[Mlt-devel] SF.net SVN: mlt: [1144] trunk/mlt/src/framework/mlt_consumer.c
Brought to you by:
ddennedy,
lilo_booter
From: <dde...@us...> - 2008-06-22 17:46:33
|
Revision: 1144 http://mlt.svn.sourceforge.net/mlt/?rev=1144&view=rev Author: ddennedy Date: 2008-06-22 10:46:30 -0700 (Sun, 22 Jun 2008) Log Message: ----------- mlt_consumer.c: make the realtime frame-dropping heuristic based on actual frame rate instead of 25fps Modified Paths: -------------- trunk/mlt/src/framework/mlt_consumer.c Modified: trunk/mlt/src/framework/mlt_consumer.c =================================================================== --- trunk/mlt/src/framework/mlt_consumer.c 2008-06-17 03:03:05 UTC (rev 1143) +++ trunk/mlt/src/framework/mlt_consumer.c 2008-06-22 17:46:30 UTC (rev 1144) @@ -29,6 +29,8 @@ #include <stdlib.h> #include <sys/time.h> +#undef DEINTERLACE_ON_NOT_NORMAL_SPEED + static void mlt_consumer_frame_render( mlt_listener listener, mlt_properties owner, mlt_service this, void **args ); static void mlt_consumer_frame_show( mlt_listener listener, mlt_properties owner, mlt_service this, void **args ); static void mlt_consumer_property_changed( mlt_service owner, mlt_consumer this, char *name ); @@ -322,6 +324,11 @@ mlt_properties_set_data( properties, "test_card_producer", NULL, 0, NULL, NULL ); } + // Set the frame duration in microseconds for the frame-dropping heuristic + int frame_duration = 1000000 / mlt_properties_get_int( properties, "frame_rate_num" ) * + mlt_properties_get_int( properties, "frame_rate_den" ); + mlt_properties_set_int( properties, "frame_duration", frame_duration ); + // Check and run an ante command if ( mlt_properties_get( properties, "ante" ) ) system( mlt_properties_get( properties, "ante" ) ); @@ -570,7 +577,9 @@ // All non normal playback frames should be shown if ( mlt_properties_get_int( MLT_FRAME_PROPERTIES( frame ), "_speed" ) != 1 ) { +#ifdef DEINTERLACE_ON_NOT_NORMAL_SPEED mlt_properties_set_int( MLT_FRAME_PROPERTIES( frame ), "consumer_deinterlace", 1 ); +#endif skipped = 0; time_frame = 0; time_process = 0; @@ -618,8 +627,12 @@ time_process += time_difference( &ante ); // Determine if the next frame should be skipped - if ( mlt_deque_count( this->queue ) <= 5 && ( ( time_wait + time_frame + time_process ) / count ) > 40000 ) - skip_next = 1; + if ( mlt_deque_count( this->queue ) <= 5 ) + { + int frame_duration = mlt_properties_get_int( properties, "frame_duration" ); + if ( ( ( time_wait + time_frame + time_process ) / count ) > frame_duration ) + skip_next = 1; + } // Unlock if there's a lock object if ( lock_object ) mlt_service_unlock( lock_object ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |