[Mlt-devel] mlt/src/modules/sdl consumer_sdl_preview.c,1.18,1.19 consumer_sdl_still.c,1.19,1.20
Brought to you by:
ddennedy,
lilo_booter
From: Charles Y. <lil...@us...> - 2005-07-10 15:21:16
|
Update of /cvsroot/mlt/mlt/src/modules/sdl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1962 Modified Files: consumer_sdl_preview.c consumer_sdl_still.c Log Message: consumer_sdl_preview.c consumer_sdl_still.c + Fixes a deadlock condition Index: consumer_sdl_preview.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/sdl/consumer_sdl_preview.c,v retrieving revision 1.18 retrieving revision 1.19 diff -u -d -r1.18 -r1.19 --- consumer_sdl_preview.c 21 Jun 2005 20:59:39 -0000 1.18 +++ consumer_sdl_preview.c 10 Jul 2005 15:21:03 -0000 1.19 @@ -168,9 +168,6 @@ pthread_cond_broadcast( &this->refresh_cond ); pthread_mutex_unlock( &this->refresh_mutex ); - if ( this->play ) mlt_consumer_stop( this->play ); - if ( this->still ) mlt_consumer_stop( this->still ); - pthread_join( this->thread, NULL ); this->joined = 1; @@ -253,6 +250,8 @@ mlt_properties_set_int( play, "put_mode", 1 ); mlt_properties_set_int( still, "put_mode", 1 ); + this->refresh_count = 0; + // Loop until told not to while( this->running ) { @@ -260,7 +259,7 @@ frame = mlt_consumer_get_frame( consumer ); // Ensure that we have a frame - if ( frame != NULL ) + if ( this->running && frame != NULL ) { // Get the speed of the frame double speed = mlt_properties_get_double( MLT_FRAME_PROPERTIES( frame ), "_speed" ); @@ -353,7 +352,7 @@ if ( this->active == this->still ) { pthread_mutex_lock( &this->refresh_mutex ); - if ( speed == 0 && this->refresh_count <= 0 ) + if ( this->running && speed == 0 && this->refresh_count <= 0 ) pthread_cond_wait( &this->refresh_cond, &this->refresh_mutex ); this->refresh_count --; pthread_mutex_unlock( &this->refresh_mutex ); @@ -364,12 +363,14 @@ } else { + if ( frame ) mlt_frame_close( frame ); + mlt_consumer_put_frame( this->active, NULL ); this->running = 0; } } - //mlt_consumer_stop( this->play ); - //mlt_consumer_stop( this->still ); + if ( this->play ) mlt_consumer_stop( this->play ); + if ( this->still ) mlt_consumer_stop( this->still ); //SDL_Quit( ); Index: consumer_sdl_still.c =================================================================== RCS file: /cvsroot/mlt/mlt/src/modules/sdl/consumer_sdl_still.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -d -r1.19 -r1.20 --- consumer_sdl_still.c 24 Jun 2005 08:36:21 -0000 1.19 +++ consumer_sdl_still.c 10 Jul 2005 15:21:04 -0000 1.20 @@ -539,13 +539,14 @@ frame = mlt_consumer_rt_frame( consumer ); // Ensure that we have a frame - if ( frame != NULL ) + if ( this->running && frame != NULL ) { consumer_play_video( this, frame ); mlt_frame_close( frame ); } else { + if ( frame ) mlt_frame_close( frame ); this->running = 0; } } |