From 143e6ca14ef8d043cc01e922ac6ed03e20b71606 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Hellstr=C3=B6m?= Date: Fri, 6 May 2005 07:42:20 +0000 Subject: **BUGFIX** improve xxmc cpu-usage for IDCT / MOCOMP acceleration through better locking [bug #1195282] CVS patchset: 7524 CVS date: 2005/05/06 07:42:20 --- src/video_out/xvmc_vld.c | 23 +++-------------------- 1 file changed, 3 insertions(+), 20 deletions(-) (limited to 'src/video_out/xvmc_vld.c') diff --git a/src/video_out/xvmc_vld.c b/src/video_out/xvmc_vld.c index 93c5f00bd..ba1b51795 100644 --- a/src/video_out/xvmc_vld.c +++ b/src/video_out/xvmc_vld.c @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: xvmc_vld.c,v 1.3 2005/05/04 04:27:20 totte67 Exp $ + * $Id: xvmc_vld.c,v 1.4 2005/05/06 07:42:21 totte67 Exp $ * * xvmc_vld.c, X11 decoding accelerated video extension interface for xine * @@ -92,24 +92,14 @@ void xvmc_vld_frame(struct vo_frame_s *this_gen) } qmx.load_chroma_intra_quantiser_matrix = 0; qmx.load_chroma_non_intra_quantiser_matrix = 0; - xvmc_context_reader_lock( &driver->xvmc_lock ); - if ( (!xxmc_xvmc_surface_valid( driver, cf->xvmc_surf)) || - ((ctl.picture_coding_type == XVMC_P_PICTURE || - ctl.picture_coding_type == XVMC_B_PICTURE) && - !xxmc_xvmc_surface_valid( driver, fs )) || - ((ctl.picture_coding_type == XVMC_B_PICTURE) && - !xxmc_xvmc_surface_valid( driver, bs )) ) { - cf->xxmc_data.result = 128; - xvmc_context_reader_unlock( &driver->xvmc_lock ); - return; - } + XVMCLOCKDISPLAY( driver->display ); XvMCLoadQMatrix(driver->display, &driver->context, &qmx); + while((cf->xxmc_data.result = XvMCBeginSurface(driver->display, &driver->context, cf->xvmc_surf, fs, bs, &ctl))); XVMCUNLOCKDISPLAY( driver->display ); - xvmc_context_reader_unlock( &driver->xvmc_lock ); driver->cpu_saver = 0.; } @@ -120,12 +110,6 @@ void xvmc_vld_slice(vo_frame_t *this_gen) xxmc_driver_t *driver = (xxmc_driver_t *) cf->vo_frame.driver; - xvmc_context_reader_lock( &driver->xvmc_lock ); - if ( ! xxmc_xvmc_surface_valid( driver, cf->xvmc_surf)) { - cf->xxmc_data.result = 128; - xvmc_context_reader_unlock( &driver->xvmc_lock ); - return; - } XVMCLOCKDISPLAY( driver->display ); cf->xxmc_data.result = XvMCPutSlice2(driver->display,&driver->context,cf->xxmc_data.slice_data, @@ -138,7 +122,6 @@ void xvmc_vld_slice(vo_frame_t *this_gen) */ XVMCUNLOCKDISPLAY( driver->display ); - xvmc_context_reader_unlock( &driver->xvmc_lock ); if (driver->cpu_save_enabled) { driver->cpu_saver += 1.; if (driver->cpu_saver >= cf->xxmc_data.sleep) { -- cgit v1.2.3