X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Finigo%2Finigo.c;h=5c8e9b88982eff5d4fa20bafd43a6625b72b9ac9;hb=1f6faabf5ef11e6321d186772d88fb6958cdd057;hp=bc4ad7c4cbeefe4886352f614cbbd55d98833205;hpb=7cef152403bfa0ea30e4a3e102fe33bc75e508ab;p=melted diff --git a/src/inigo/inigo.c b/src/inigo/inigo.c index bc4ad7c..5c8e9b8 100644 --- a/src/inigo/inigo.c +++ b/src/inigo/inigo.c @@ -1,6 +1,7 @@ #include #include #include +#include #include @@ -8,8 +9,9 @@ static void transport_action( mlt_producer producer, char *value ) { - mlt_properties properties = mlt_producer_properties( producer ); + mlt_properties properties = MLT_PRODUCER_PROPERTIES( producer ); mlt_multitrack multitrack = mlt_properties_get_data( properties, "multitrack", NULL ); + mlt_consumer consumer = mlt_properties_get_data( properties, "transport_consumer", NULL ); mlt_properties_set_int( properties, "stats_off", 0 ); @@ -121,6 +123,8 @@ static void transport_action( mlt_producer producer, char *value ) } break; } + + mlt_properties_set_int( MLT_CONSUMER_PROPERTIES( consumer ), "refresh", 1 ); } mlt_properties_set_int( properties, "stats_off", 0 ); @@ -134,18 +138,19 @@ static mlt_consumer create_consumer( char *id, mlt_producer producer ) mlt_consumer consumer = mlt_factory_consumer( id, arg ); if ( consumer != NULL ) { - mlt_properties properties = mlt_consumer_properties( consumer ); + mlt_properties properties = MLT_CONSUMER_PROPERTIES( consumer ); mlt_properties_set_data( properties, "transport_callback", transport_action, 0, NULL, NULL ); mlt_properties_set_data( properties, "transport_producer", producer, 0, NULL, NULL ); + mlt_properties_set_data( MLT_PRODUCER_PROPERTIES( producer ), "transport_consumer", consumer, 0, NULL, NULL ); } return consumer; } static void transport( mlt_producer producer, mlt_consumer consumer ) { - mlt_properties properties = mlt_producer_properties( producer ); - int silent = mlt_properties_get_int( mlt_consumer_properties( consumer ), "silent" ); - + mlt_properties properties = MLT_PRODUCER_PROPERTIES( producer ); + int silent = mlt_properties_get_int( MLT_CONSUMER_PROPERTIES( consumer ), "silent" ); + struct timespec tm = { 0, 40000 }; if ( mlt_properties_get_int( properties, "done" ) == 0 && !mlt_consumer_is_stopped( consumer ) ) { @@ -167,12 +172,16 @@ static void transport( mlt_producer producer, mlt_consumer consumer ) while( mlt_properties_get_int( properties, "done" ) == 0 && !mlt_consumer_is_stopped( consumer ) ) { - int value = term_read( ); + int value = silent ? -1 : term_read( ); + if ( value != -1 ) transport_action( producer, ( char * )&value ); if ( !silent && mlt_properties_get_int( properties, "stats_off" ) == 0 ) fprintf( stderr, "Current Position: %10d\r", mlt_producer_position( producer ) ); + + if ( silent ) + nanosleep( &tm, NULL ); } if ( !silent ) @@ -187,6 +196,14 @@ int main( int argc, char **argv ) mlt_producer inigo = NULL; FILE *store = NULL; char *name = NULL; + struct sched_param scp; + + // Use realtime scheduling if possible + memset( &scp, '\0', sizeof( scp ) ); + scp.sched_priority = sched_get_priority_max( SCHED_FIFO ) - 1; +#ifndef __DARWIN__ + sched_setscheduler( 0, SCHED_FIFO, &scp ); +#endif // Construct the factory mlt_factory_init( NULL ); @@ -209,7 +226,7 @@ int main( int argc, char **argv ) if ( argc > 1 && inigo != NULL && mlt_producer_get_length( inigo ) > 0 ) { // Get inigo's properties - mlt_properties inigo_props = mlt_producer_properties( inigo ); + mlt_properties inigo_props = MLT_PRODUCER_PROPERTIES( inigo ); // Get the last group mlt_properties group = mlt_properties_get_data( inigo_props, "group", 0 ); @@ -252,11 +269,11 @@ int main( int argc, char **argv ) if ( consumer != NULL && store == NULL ) { // Apply group settings - mlt_properties properties = mlt_consumer_properties( consumer ); + mlt_properties properties = MLT_CONSUMER_PROPERTIES( consumer ); mlt_properties_inherit( properties, group ); // Connect consumer to inigo - mlt_consumer_connect( consumer, mlt_producer_service( inigo ) ); + mlt_consumer_connect( consumer, MLT_PRODUCER_SERVICE( inigo ) ); // Start the consumer mlt_consumer_start( consumer );