From 097426600056a112752e92eb1c13f0d6900f3907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Dvo=C5=99=C3=A1k?= Date: Mon, 19 Sep 2005 16:14:02 +0000 Subject: *BUGFIX* added missing mutex init in xine_ticket (fixes pause assert with win32-pthreads) added missing destroys due to pthread doc spells and houskeeping use directx of older versions too, possibility to use xine w/o HW accel CVS patchset: 7738 CVS date: 2005/09/19 16:14:02 --- ChangeLog | 2 +- doc/README.MINGWCROSS | 11 ++- doc/README.WIN32 | 1 - doc/hackersguide/output.sgml | 2 +- src/post/deinterlace/xine_plugin.c | 3 +- src/video_out/video_out_directx.c | 144 +++++++++++++++++++------------------ src/xine-engine/events.c | 6 +- src/xine-engine/load_plugins.c | 6 +- src/xine-engine/metronom.h | 3 +- src/xine-engine/xine.c | 3 +- 10 files changed, 99 insertions(+), 82 deletions(-) diff --git a/ChangeLog b/ChangeLog index 948ab4058..20105fc3f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,7 +2,7 @@ xine-lib (1.1.1) * Improve sound quality when using alsa 1.0.9 or above. When playing a 44.1khz stream on a 48khz only capable sound card. It bypasses alsa-lib resampler and uses xine's - * Windows ports fixes and improvements + * Windows ports bug fixes and improvements * Set up the framebuffer palette (fb video out). * build fixes and improvements, added --with-pthread-prefix and --with-zlib-prefix options diff --git a/doc/README.MINGWCROSS b/doc/README.MINGWCROSS index a840172a6..c867bf9ac 100644 --- a/doc/README.MINGWCROSS +++ b/doc/README.MINGWCROSS @@ -173,6 +173,9 @@ In following text are used symbols $PREFIX and $USER with this meaning: # mv pthread.def pthreadGC2.def wine LIB.EXE /machine:i386 /def:pthreadGC2.def + # + # installing + # su mkdir -p $PREFIX/pthreads-win32/bin mkdir -p $PREFIX/pthreads-win32/include @@ -193,12 +196,18 @@ In following text are used symbols $PREFIX and $USER with this meaning: # small workaround in Makefile: # sed -e 's/dllwrap /i386-mingw32-dllwrap /g' win32/Makefile.gcc > Makefile + # + # compiling + # make CC=i386-mingw32-gcc AR=i386-mingw32-ar RC=i386-mingw32-windres STATICLIB=libz-static.a IMPLIB=libz.a # # possibility to use zlib library in M$ Visual C (optional) # cp win32/zlib.def zlib1.def wine LIB.EXE /machine:i386 /def:zlib1.def + # + # installing + # su mkdir -p $PREFIX/zlib/{include,lib,bin} cp zconf.h zlib.h $PREFIX/zlib/include/ @@ -247,7 +256,7 @@ Now we can build xine library for Windows by this way: # if we want to use xine library in M$ compilers, we will need wine and some # tools from M$ Visual C: LIB.EXE, LINK.EXE, MSPDB60.DLL # - # create libxine-1.lib file + # create libxine-1.lib file (optional) # cd /lib cp ../bin/libxine-1.dll . diff --git a/doc/README.WIN32 b/doc/README.WIN32 index bff456ce7..6c19553d8 100644 --- a/doc/README.WIN32 +++ b/doc/README.WIN32 @@ -170,4 +170,3 @@ Bugs: - random crashes and random locks in stress tests - non-seekable input plugins crash - ffmpeg bug visible for some video sizes - - pause doesn't work (asserts) diff --git a/doc/hackersguide/output.sgml b/doc/hackersguide/output.sgml index d24e8f903..806e89d0a 100644 --- a/doc/hackersguide/output.sgml +++ b/doc/hackersguide/output.sgml @@ -357,7 +357,7 @@ Rewiring is the reconnection of one post plugin's outputs and another post plugin's inputs. This can happen on the fly during playback, which makes this a very delicate process. In one such input to output connection, only the output is active by either - writing data directly to the connected intput or by calling functions there. Therefore + writing data directly to the connected input or by calling functions there. Therefore we have to notify only the output, when it is rewired. This is done by calling the rewire() member function of the corresponding xine_post_out_t when the frontend issues a rewiring on this output. diff --git a/src/post/deinterlace/xine_plugin.c b/src/post/deinterlace/xine_plugin.c index aa43c5dee..c3ecbd2e3 100644 --- a/src/post/deinterlace/xine_plugin.c +++ b/src/post/deinterlace/xine_plugin.c @@ -17,7 +17,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: xine_plugin.c,v 1.45 2005/06/17 22:36:43 dsalt Exp $ + * $Id: xine_plugin.c,v 1.46 2005/09/19 16:14:02 valtri Exp $ * * advanced video deinterlacer plugin * Jun/2003 by Miguel Freitas @@ -445,6 +445,7 @@ static void deinterlace_dispose(post_plugin_t *this_gen) if (_x_post_dispose(this_gen)) { _flush_frames(this); + pthread_mutex_destroy(&this->lock); free(this); } } diff --git a/src/video_out/video_out_directx.c b/src/video_out/video_out_directx.c index 946e3f3e4..349fff0f7 100755 --- a/src/video_out/video_out_directx.c +++ b/src/video_out/video_out_directx.c @@ -20,7 +20,7 @@ * video_out_directx.c, direct draw video output plugin for xine * by Matthew Grooms * - * $Id: video_out_directx.c,v 1.23 2005/08/29 15:28:16 valtri Exp $ + * $Id: video_out_directx.c,v 1.24 2005/09/19 16:14:02 valtri Exp $ */ typedef unsigned char boolean; @@ -56,7 +56,7 @@ typedef unsigned char boolean; * Defining them here allows us to get rid of the dxguid library during * the linking stage. *****************************************************************************/ -#if 0 +#if 1 static const GUID IID_IDirectDraw = { 0x6C14DB80,0xA733,0x11CE,{0xA5,0x21,0x00,0x20,0xAF,0x0B,0xE5,0x60} }; @@ -68,7 +68,7 @@ static const GUID IID_IDirectDraw2 = { }; #endif -#if 1 +#if 0 static const GUID IID_IDirectDraw4 = { 0x9C59509A,0x39BD,0x11D1,{0x8C,0x4A,0x00,0xC0,0x4F,0xD9,0x30,0xC5} }; @@ -102,9 +102,9 @@ typedef struct { xine_t *xine; - LPDIRECTDRAW4 ddobj; /* direct draw object */ - LPDIRECTDRAWSURFACE4 primary; /* primary dd surface */ - LPDIRECTDRAWSURFACE4 secondary; /* secondary dd surface */ + LPDIRECTDRAW ddobj; /* direct draw object */ + LPDIRECTDRAWSURFACE primary; /* primary dd surface */ + LPDIRECTDRAWSURFACE secondary; /* secondary dd surface */ LPDIRECTDRAWCLIPPER ddclipper; /* dd clipper object */ uint8_t * contents; /* secondary contents */ win32_frame_t *current; /* current frame */ @@ -139,7 +139,7 @@ typedef struct { /* Display formatted error message in * popup message box.*/ -void Error( HWND hwnd, LPSTR szfmt, ... ) +static void Error( HWND hwnd, LPSTR szfmt, ... ) { char tempbuff[ 256 ]; *tempbuff = 0; @@ -150,7 +150,7 @@ void Error( HWND hwnd, LPSTR szfmt, ... ) /* Update our drivers current knowledge * of our windows video out posistion */ -void UpdateRect( win32_visual_t * win32_visual ) +static void UpdateRect( win32_visual_t * win32_visual ) { if( win32_visual->FullScreen ) { @@ -174,10 +174,10 @@ void UpdateRect( win32_visual_t * win32_visual ) * window and will always have a pixel format * identical to the current display mode. */ -boolean CreatePrimary( win32_driver_t * win32_driver ) +static boolean CreatePrimary( win32_driver_t * win32_driver ) { - LPDIRECTDRAW4 ddobj; - DDSURFACEDESC2 ddsd; + LPDIRECTDRAW ddobj; + DDSURFACEDESC ddsd; HRESULT result; /* create direct draw object */ @@ -201,10 +201,10 @@ boolean CreatePrimary( win32_driver_t * win32_driver ) /* try to get new interface */ - result = IDirectDraw_QueryInterface( ddobj, &IID_IDirectDraw4, (LPVOID *) &win32_driver->ddobj ); + result = IDirectDraw_QueryInterface( ddobj, &IID_IDirectDraw, (LPVOID *) &win32_driver->ddobj ); if( result != DD_OK ) { - Error( 0, "ddobj->QueryInterface : DirectX 4 or higher required" ); + Error( 0, "ddobj->QueryInterface : DirectX required" ); return 0; } @@ -219,7 +219,7 @@ boolean CreatePrimary( win32_driver_t * win32_driver ) ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; - result = IDirectDraw4_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->primary, 0 ); + result = IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->primary, 0 ); if( result != DD_OK ) { Error( 0, "CreateSurface ( primary ) : error 0x%lx", result ); @@ -228,7 +228,7 @@ boolean CreatePrimary( win32_driver_t * win32_driver ) /* create our clipper object */ - result = IDirectDraw4_CreateClipper( win32_driver->ddobj, 0, &win32_driver->ddclipper, 0 ); + result = IDirectDraw_CreateClipper( win32_driver->ddobj, 0, &win32_driver->ddclipper, 0 ); if( result != DD_OK ) { Error( 0, "CreateClipper : error 0x%lx", result ); @@ -246,7 +246,7 @@ boolean CreatePrimary( win32_driver_t * win32_driver ) /* associate our primary surface with our clipper */ - result = IDirectDrawSurface4_SetClipper( win32_driver->primary, win32_driver->ddclipper ); + result = IDirectDrawSurface_SetClipper( win32_driver->primary, win32_driver->ddclipper ); if( result != DD_OK ) { Error( 0, "ddclipper->SetHWnd : error 0x%lx", result ); @@ -270,9 +270,10 @@ boolean CreatePrimary( win32_driver_t * win32_driver ) * as the primary surface. At least then we * can use h/w scaling if supported. */ -boolean CreateSecondary( win32_driver_t * win32_driver, int width, int height, int format ) +static boolean CreateSecondary( win32_driver_t * win32_driver, int width, int height, int format ) { - DDSURFACEDESC2 ddsd; + DDSURFACEDESC ddsd; + HRESULT result; if( format == XINE_IMGFMT_YV12 ) xprintf(win32_driver->xine, XINE_VERBOSITY_DEBUG, "vo_out_directx : switching to YV12 overlay type\n" ); @@ -299,7 +300,7 @@ boolean CreateSecondary( win32_driver_t * win32_driver, int width, int height, i * surface then release it */ if( win32_driver->secondary ) - IDirectDrawSurface4_Release( win32_driver->secondary ); + IDirectDrawSurface_Release( win32_driver->secondary ); memset( &ddsd, 0, sizeof( ddsd ) ); ddsd.dwSize = sizeof( ddsd ); @@ -358,48 +359,49 @@ boolean CreateSecondary( win32_driver_t * win32_driver, int width, int height, i } #endif /* RGB_SUPPORT */ - lprintf("CreateSecondary() - IDirectDraw4_CreateSurface()\n"); - - if( IDirectDraw4_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) == DD_OK ) + lprintf("CreateSecondary() - IDirectDraw_CreateSurface()\n"); + if( IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) == DD_OK ) return TRUE; /* Our fallback method is to create a back buffer * with the same image format as the primary surface */ lprintf("CreateSecondary() - Falling back to back buffer same as primary\n"); + lprintf("CreateSecondary() - act_format = (NATIVE) %d\n", IMGFMT_NATIVE); ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; - - lprintf("CreateSecondary() - act_format = (NATIVE) %d\n", IMGFMT_NATIVE); - win32_driver->act_format = IMGFMT_NATIVE; - if( IDirectDraw4_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) != DD_OK ) { - /* This is bad. We cant even create a surface with - * the same format as the primary surface. */ - - Error( 0, "CreateSurface ( Secondary ) : unable to create a suitable rendering surface" ); + if( IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 ) == DD_OK ) + return TRUE; - return FALSE; - } + /* Our second fallback - all w/o HW acceleration */ + lprintf("CreateSecondary() - Falling back, disabling HW acceleration \n"); + ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; + ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN; + if( (result = IDirectDraw_CreateSurface( win32_driver->ddobj, &ddsd, &win32_driver->secondary, 0 )) == DD_OK ) + return TRUE; - return TRUE; + /* This is bad. We cant even create a surface with + * the same format as the primary surface. */ + Error( 0, "CreateSurface ( Secondary ) : unable to create a suitable rendering surface: 0x%08lX", result ); + return FALSE; } /* Destroy all direct draw driver allocated * resources. */ -void Destroy( win32_driver_t * win32_driver ) +static void Destroy( win32_driver_t * win32_driver ) { if( win32_driver->ddclipper ) IDirectDrawClipper_Release( win32_driver->ddclipper ); if( win32_driver->primary ) - IDirectDrawSurface4_Release( win32_driver->primary ); + IDirectDrawSurface_Release( win32_driver->primary ); if( win32_driver->secondary ) - IDirectDrawSurface4_Release( win32_driver->secondary ); + IDirectDrawSurface_Release( win32_driver->secondary ); if( win32_driver->ddobj ) IDirectDraw_Release( win32_driver->ddobj ); @@ -414,7 +416,7 @@ void Destroy( win32_driver_t * win32_driver ) * the h/w does not support an overlay for * the native frame format. */ -boolean CheckPixelFormat( win32_driver_t * win32_driver ) +static boolean CheckPixelFormat( win32_driver_t * win32_driver ) { DDPIXELFORMAT ddpf; HRESULT result; @@ -423,10 +425,10 @@ boolean CheckPixelFormat( win32_driver_t * win32_driver ) memset( &ddpf, 0, sizeof( DDPIXELFORMAT )); ddpf.dwSize = sizeof( DDPIXELFORMAT ); - result = IDirectDrawSurface4_GetPixelFormat( win32_driver->primary, &ddpf ); + result = IDirectDrawSurface_GetPixelFormat( win32_driver->primary, &ddpf ); if( result != DD_OK ) { - Error( 0, "IDirectDrawSurface4_GetPixelFormat ( CheckPixelFormat ) : error 0x%lx", result ); + Error( 0, "IDirectDrawSurface_GetPixelFormat ( CheckPixelFormat ) : error 0x%lx", result ); return 0; } @@ -489,10 +491,10 @@ boolean CheckPixelFormat( win32_driver_t * win32_driver ) * being pushed to the backend. */ -LPDIRECTDRAWSURFACE4 CreateBMP( win32_driver_t * win32_driver, int resource ) +static LPDIRECTDRAWSURFACE CreateBMP( win32_driver_t * win32_driver, int resource ) { - LPDIRECTDRAWSURFACE4 bmp_surf; - DDSURFACEDESC2 bmp_ddsd; + LPDIRECTDRAWSURFACE bmp_surf; + DDSURFACEDESC bmp_ddsd; HBITMAP bmp_hndl; BITMAP bmp_head; HDC hdc_dds; @@ -518,7 +520,7 @@ LPDIRECTDRAWSURFACE4 CreateBMP( win32_driver_t * win32_driver, int resource ) bmp_ddsd.dwWidth = bmp_head.bmWidth; bmp_ddsd.dwHeight = bmp_head.bmHeight; - if( IDirectDraw4_CreateSurface( win32_driver->ddobj, &bmp_ddsd, &bmp_surf, 0 ) != DD_OK ) + if( IDirectDraw_CreateSurface( win32_driver->ddobj, &bmp_ddsd, &bmp_surf, 0 ) != DD_OK ) { Error( 0, "CreateSurface ( bitmap ) : could not create dd surface" ); return 0; @@ -528,7 +530,7 @@ LPDIRECTDRAWSURFACE4 CreateBMP( win32_driver_t * win32_driver, int resource ) * create a compat dc and load * our bitmap into the compat dc */ - IDirectDrawSurface4_GetDC( bmp_surf, &hdc_dds ); + IDirectDrawSurface_GetDC( bmp_surf, &hdc_dds ); hdc_mem = CreateCompatibleDC( hdc_dds ); SelectObject( hdc_mem, bmp_hndl ); @@ -542,7 +544,7 @@ LPDIRECTDRAWSURFACE4 CreateBMP( win32_driver_t * win32_driver, int resource ) DeleteDC( hdc_mem ); DeleteObject( bmp_hndl ); - IDirectDrawSurface4_ReleaseDC( bmp_surf, hdc_dds ); + IDirectDrawSurface_ReleaseDC( bmp_surf, hdc_dds ); return bmp_surf; } @@ -552,8 +554,8 @@ LPDIRECTDRAWSURFACE4 CreateBMP( win32_driver_t * win32_driver, int resource ) * a h/w overlay of the current frame type * is supported. */ -boolean Overlay( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, - LPDIRECTDRAWSURFACE4 dst_surface, RECT * dst_rect, +static boolean Overlay( LPDIRECTDRAWSURFACE src_surface, RECT * src_rect, + LPDIRECTDRAWSURFACE dst_surface, RECT * dst_rect, COLORREF color_key ) { DWORD dw_color_key; @@ -567,10 +569,10 @@ boolean Overlay( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, memset( &ddpf, 0, sizeof( DDPIXELFORMAT )); ddpf.dwSize = sizeof( DDPIXELFORMAT ); - result = IDirectDrawSurface4_GetPixelFormat( dst_surface, &ddpf ); + result = IDirectDrawSurface_GetPixelFormat( dst_surface, &ddpf ); if( result != DD_OK ) { - Error( 0, "IDirectDrawSurface4_GetPixelFormat : could not get surface pixel format" ); + Error( 0, "IDirectDrawSurface_GetPixelFormat : could not get surface pixel format" ); return FALSE; } @@ -588,19 +590,19 @@ boolean Overlay( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, /* attempt to overlay the surface */ - result = IDirectDrawSurface4_UpdateOverlay( src_surface, src_rect, dst_surface, dst_rect, flags, &ddofx ); + result = IDirectDrawSurface_UpdateOverlay( src_surface, src_rect, dst_surface, dst_rect, flags, &ddofx ); if( result != DD_OK ) { if( result == DDERR_SURFACELOST ) { - IDirectDrawSurface4_Restore( src_surface ); - IDirectDrawSurface4_Restore( dst_surface ); + IDirectDrawSurface_Restore( src_surface ); + IDirectDrawSurface_Restore( dst_surface ); - IDirectDrawSurface4_UpdateOverlay( src_surface, src_rect, dst_surface, dst_rect, flags, &ddofx ); + IDirectDrawSurface_UpdateOverlay( src_surface, src_rect, dst_surface, dst_rect, flags, &ddofx ); } else { - Error( 0, "IDirectDrawSurface4_UpdateOverlay : error 0x%lx", result ); + Error( 0, "IDirectDrawSurface_UpdateOverlay : error 0x%lx", result ); return FALSE; } } @@ -613,8 +615,8 @@ boolean Overlay( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, * h/w overlay of the current frame format is * not supported. */ -boolean BltCopy( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, - LPDIRECTDRAWSURFACE4 dst_surface, RECT * dst_rect ) +static boolean BltCopy( LPDIRECTDRAWSURFACE src_surface, RECT * src_rect, + LPDIRECTDRAWSURFACE dst_surface, RECT * dst_rect ) { DDSURFACEDESC ddsd_target; HRESULT result; @@ -624,19 +626,19 @@ boolean BltCopy( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, /* attempt to blt the surface sontents */ - result = IDirectDrawSurface4_Blt( dst_surface, dst_rect, src_surface, src_rect, DDBLT_WAIT, 0 ); + result = IDirectDrawSurface_Blt( dst_surface, dst_rect, src_surface, src_rect, DDBLT_WAIT, 0 ); if( result != DD_OK ) { if( result != DDERR_SURFACELOST ) { - IDirectDrawSurface4_Restore( src_surface ); - IDirectDrawSurface4_Restore( dst_surface ); + IDirectDrawSurface_Restore( src_surface ); + IDirectDrawSurface_Restore( dst_surface ); - IDirectDrawSurface4_Blt( dst_surface, dst_rect, src_surface, src_rect, DDBLT_WAIT, 0 ); + IDirectDrawSurface_Blt( dst_surface, dst_rect, src_surface, src_rect, DDBLT_WAIT, 0 ); } else { - Error( 0, "IDirectDrawSurface4_Blt : error 0x%lx", result ); + Error( 0, "IDirectDrawSurface_Blt : error 0x%lx", result ); return FALSE; } } @@ -650,7 +652,7 @@ boolean BltCopy( LPDIRECTDRAWSURFACE4 src_surface, RECT * src_rect, * moving the image contents contained in our * secondary surface to our primary surface. */ -boolean DisplayFrame( win32_driver_t * win32_driver ) +static boolean DisplayFrame( win32_driver_t * win32_driver ) { int view_width; int view_height; @@ -755,10 +757,10 @@ boolean DisplayFrame( win32_driver_t * win32_driver ) /* Lock our back buffer to update its contents. */ -void * Lock( void * surface ) +static void * Lock( void * surface ) { - LPDIRECTDRAWSURFACE4 lock_surface = ( LPDIRECTDRAWSURFACE4 ) surface; - DDSURFACEDESC2 ddsd; + LPDIRECTDRAWSURFACE lock_surface = ( LPDIRECTDRAWSURFACE ) surface; + DDSURFACEDESC ddsd; HRESULT result; if( !surface ) @@ -767,11 +769,11 @@ void * Lock( void * surface ) memset( &ddsd, 0, sizeof( ddsd ) ); ddsd.dwSize = sizeof( ddsd ); - result = IDirectDrawSurface4_Lock( lock_surface, 0, &ddsd, DDLOCK_WAIT | DDLOCK_NOSYSLOCK, 0 ); + result = IDirectDrawSurface_Lock( lock_surface, 0, &ddsd, DDLOCK_WAIT | DDLOCK_NOSYSLOCK, 0 ); if( result == DDERR_SURFACELOST ) { - IDirectDrawSurface4_Restore( lock_surface ); - result = IDirectDrawSurface4_Lock( lock_surface, 0, &ddsd, DDLOCK_WAIT | DDLOCK_NOSYSLOCK, 0 ); + IDirectDrawSurface_Restore( lock_surface ); + result = IDirectDrawSurface_Lock( lock_surface, 0, &ddsd, DDLOCK_WAIT | DDLOCK_NOSYSLOCK, 0 ); if( result != DD_OK ) return 0; @@ -791,14 +793,14 @@ void * Lock( void * surface ) /* Unlock our back buffer to prepair for display. */ -void Unlock( void * surface ) +static void Unlock( void * surface ) { - LPDIRECTDRAWSURFACE4 lock_surface = ( LPDIRECTDRAWSURFACE4 ) surface; + LPDIRECTDRAWSURFACE lock_surface = ( LPDIRECTDRAWSURFACE ) surface; if( !surface ) return; - IDirectDrawSurface4_Unlock( lock_surface, 0 ); + IDirectDrawSurface_Unlock( lock_surface, 0 ); } /* ----------------------------------------- diff --git a/src/xine-engine/events.c b/src/xine-engine/events.c index e7aa28772..ef399b5c6 100644 --- a/src/xine-engine/events.c +++ b/src/xine-engine/events.c @@ -17,7 +17,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: events.c,v 1.27 2005/06/13 00:32:12 miguelfreitas Exp $ + * $Id: events.c,v 1.28 2005/09/19 16:14:02 valtri Exp $ * * Event handling functions * @@ -183,6 +183,10 @@ void xine_event_dispose_queue (xine_event_queue_t *queue) { xine_event_free (event); } + pthread_mutex_destroy(&queue->lock); + pthread_cond_destroy(&queue->new_event); + pthread_cond_destroy(&queue->events_processed); + free (queue); } diff --git a/src/xine-engine/load_plugins.c b/src/xine-engine/load_plugins.c index d7005b733..24f51af45 100644 --- a/src/xine-engine/load_plugins.c +++ b/src/xine-engine/load_plugins.c @@ -17,7 +17,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: load_plugins.c,v 1.215 2005/09/11 22:07:48 miguelfreitas Exp $ + * $Id: load_plugins.c,v 1.216 2005/09/19 16:14:02 valtri Exp $ * * * Load input/demux/audio_out/video_out/codec plugins @@ -2506,7 +2506,9 @@ void _x_dispose_plugins (xine_t *this) { for (i = 0; this->plugin_catalog->prio_desc[i]; i++) free(this->plugin_catalog->prio_desc[i]); - + + pthread_mutex_destroy(&this->plugin_catalog->lock); + free (this->plugin_catalog); } } diff --git a/src/xine-engine/metronom.h b/src/xine-engine/metronom.h index 78834e02a..2a8f0e94d 100644 --- a/src/xine-engine/metronom.h +++ b/src/xine-engine/metronom.h @@ -17,7 +17,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: metronom.h,v 1.62 2004/09/26 22:54:52 valtri Exp $ + * $Id: metronom.h,v 1.63 2005/09/19 16:14:02 valtri Exp $ * * metronom: general pts => virtual calculation/assoc * @@ -202,7 +202,6 @@ struct metronom_s { int discontinuity_handled_count; pthread_cond_t video_discontinuity_reached; pthread_cond_t audio_discontinuity_reached; - pthread_cond_t cancel; int force_video_jump; int force_audio_jump; diff --git a/src/xine-engine/xine.c b/src/xine-engine/xine.c index 40b773af7..ce37b289e 100644 --- a/src/xine-engine/xine.c +++ b/src/xine-engine/xine.c @@ -17,7 +17,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: xine.c,v 1.317 2005/09/11 22:07:48 miguelfreitas Exp $ + * $Id: xine.c,v 1.318 2005/09/19 16:14:02 valtri Exp $ */ /* @@ -232,6 +232,7 @@ static xine_ticket_t *ticket_init(void) { pthread_mutex_init(&port_ticket->lock, NULL); pthread_mutex_init(&port_ticket->revoke_lock, NULL); pthread_cond_init(&port_ticket->issued, NULL); + pthread_cond_init(&port_ticket->revoked, NULL); return port_ticket; } -- cgit v1.2.3