X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Finigo%2Finigo.c;h=8b84043869aacf828a0dd9528659419eeefd1679;hb=9390e8b584f3f717f0a326893c0e37cf187a0a51;hp=fcb377d509f6a56c667a0e076ea2628406c7f322;hpb=7da5daf600f8b97781d85a137c3aa81effb7e610;p=melted diff --git a/src/inigo/inigo.c b/src/inigo/inigo.c index fcb377d..8b84043 100644 --- a/src/inigo/inigo.c +++ b/src/inigo/inigo.c @@ -44,43 +44,68 @@ mlt_producer create_producer( char *file ) void transport_action( mlt_producer producer, char *value ) { mlt_properties properties = mlt_producer_properties( producer ); + mlt_multitrack multitrack = mlt_properties_get_data( properties, "multitrack", NULL ); - switch( value[ 0 ] ) + if ( strlen( value ) == 1 ) { - case 'q': - mlt_properties_set_int( properties, "done", 1 ); - break; - case '0': - mlt_producer_set_speed( producer, 1 ); - mlt_producer_seek( producer, 0 ); - break; - case '1': - mlt_producer_set_speed( producer, -5 ); - break; - case '2': - mlt_producer_set_speed( producer, -2.5 ); - break; - case '3': - mlt_producer_set_speed( producer, -1 ); - break; - case '4': - mlt_producer_set_speed( producer, -0.5 ); - break; - case '5': - mlt_producer_set_speed( producer, 0 ); - break; - case '6': - mlt_producer_set_speed( producer, 0.5 ); - break; - case '7': - mlt_producer_set_speed( producer, 1 ); - break; - case '8': - mlt_producer_set_speed( producer, 2.5 ); - break; - case '9': - mlt_producer_set_speed( producer, 5 ); - break; + switch( value[ 0 ] ) + { + case 'q': + mlt_properties_set_int( properties, "done", 1 ); + break; + case '0': + mlt_producer_set_speed( producer, 1 ); + mlt_producer_seek( producer, 0 ); + break; + case '1': + mlt_producer_set_speed( producer, -10 ); + break; + case '2': + mlt_producer_set_speed( producer, -5 ); + break; + case '3': + mlt_producer_set_speed( producer, -2 ); + break; + case '4': + mlt_producer_set_speed( producer, -1 ); + break; + case '5': + mlt_producer_set_speed( producer, 0 ); + break; + case '6': + mlt_producer_set_speed( producer, 1 ); + break; + case '7': + mlt_producer_set_speed( producer, 2 ); + break; + case '8': + mlt_producer_set_speed( producer, 5 ); + break; + case '9': + mlt_producer_set_speed( producer, 10 ); + break; + case 'j': + if ( multitrack != NULL ) + { + mlt_timecode time = mlt_multitrack_clip( multitrack, mlt_whence_relative_current, -1 ); + mlt_producer_seek( producer, time ); + } + break; + case 'k': + if ( multitrack != NULL ) + { + mlt_timecode time = mlt_multitrack_clip( multitrack, mlt_whence_relative_current, 0 ); + mlt_producer_seek( producer, time ); + } + break; + case 'l': + if ( multitrack != NULL ) + { + mlt_timecode time = mlt_multitrack_clip( multitrack, mlt_whence_relative_current, 1 ); + mlt_producer_seek( producer, time ); + } + break; + } } } @@ -122,9 +147,8 @@ mlt_filter create_filter( mlt_field field, char *id, int track ) return filter; } -void set_properties( mlt_service service, char *namevalue ) +void set_properties( mlt_properties properties, char *namevalue ) { - mlt_properties properties = mlt_service_properties( service ); mlt_properties_parse( properties, namevalue ); } @@ -133,7 +157,16 @@ void transport( mlt_producer producer ) mlt_properties properties = mlt_producer_properties( producer ); term_init( ); - fprintf( stderr, "Press 'q' to continue\n" ); + + fprintf( stderr, "+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+\n" ); + fprintf( stderr, "|1=-10| |2= -5| |3= -2| |4= -1| |5= 0| |6= 1| |7= 2| |8= 5| |9= 10|\n" ); + fprintf( stderr, "+-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+ +-----+\n" ); + + fprintf( stderr, "+---------------------------------------------------------------------+\n" ); + fprintf( stderr, "| j = previous, k = restart current, l = next |\n" ); + fprintf( stderr, "| 0 = restart, q = quit |\n" ); + fprintf( stderr, "+---------------------------------------------------------------------+\n" ); + while( mlt_properties_get_int( properties, "done" ) == 0 ) { int value = term_read( ); @@ -145,12 +178,15 @@ void transport( mlt_producer producer ) int main( int argc, char **argv ) { int i; - mlt_service service = NULL; + int track = 0; mlt_consumer consumer = NULL; - mlt_multitrack multitrack = NULL; mlt_producer producer = NULL; mlt_playlist playlist = NULL; - mlt_field field = NULL; + mlt_properties group = mlt_properties_new( ); + mlt_properties properties = group; + mlt_field field = mlt_field_init( ); + mlt_properties field_properties = mlt_field_properties( field ); + mlt_multitrack multitrack = mlt_field_multitrack( field ); // Construct the factory mlt_factory_init( getenv( "MLT_REPOSITORY" ) ); @@ -158,15 +194,8 @@ int main( int argc, char **argv ) // Set up containers playlist = mlt_playlist_init( ); - // Construct the field - field = mlt_field_init( ); - // We need to track the number of registered filters - mlt_properties properties = mlt_field_properties( field ); - mlt_properties_set_int( properties, "registered", 0 ); - - // Get the multitrack from the field - multitrack = mlt_field_multitrack( field ); + mlt_properties_set_int( field_properties, "registered", 0 ); // Parse the arguments for ( i = 1; i < argc; i ++ ) @@ -175,13 +204,36 @@ int main( int argc, char **argv ) { consumer = create_consumer( argv[ ++ i ], mlt_multitrack_producer( multitrack ) ); if ( consumer != NULL ) - service = mlt_consumer_service( consumer ); + { + properties = mlt_consumer_properties( consumer ); + mlt_properties_inherit( properties, group ); + } + } + else if ( !strcmp( argv[ i ], "-group" ) ) + { + if ( mlt_properties_count( group ) != 0 ) + { + mlt_properties_close( group ); + group = mlt_properties_new( ); + } + if ( group != NULL ) + properties = group; } else if ( !strcmp( argv[ i ], "-filter" ) ) { mlt_filter filter = create_filter( field, argv[ ++ i ], 0 ); if ( filter != NULL ) - service = mlt_filter_service( filter ); + { + properties = mlt_filter_properties( filter ); + mlt_properties_inherit( properties, group ); + } + } + else if ( !strcmp( argv[ i ], "-blank" ) ) + { + if ( producer != NULL ) + mlt_playlist_append( playlist, producer ); + producer = NULL; + mlt_playlist_blank( playlist, atof( argv[ ++ i ] ) ); } else if ( !strstr( argv[ i ], "=" ) ) { @@ -189,26 +241,38 @@ int main( int argc, char **argv ) mlt_playlist_append( playlist, producer ); producer = create_producer( argv[ i ] ); if ( producer != NULL ) - service = mlt_producer_service( producer ); + { + properties = mlt_producer_properties( producer ); + mlt_properties_inherit( properties, group ); + } } else { - set_properties( service, argv[ i ] ); + set_properties( properties, argv[ i ] ); } } - // We must have a producer at this point + // Connect producer to playlist if ( producer != NULL ) - { - // Connect producer to playlist mlt_playlist_append( playlist, producer ); + + // We must have a producer at this point + if ( mlt_playlist_count( playlist ) > 0 ) + { // If we have no consumer, default to sdl if ( consumer == NULL ) + { consumer = create_consumer( "sdl", mlt_multitrack_producer( multitrack ) ); + if ( consumer != NULL ) + { + properties = mlt_consumer_properties( consumer ); + mlt_properties_inherit( properties, group ); + } + } // Connect multitrack to producer - mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist ), 0 ); + mlt_multitrack_connect( multitrack, mlt_playlist_producer( playlist ), track ); // Connect consumer to tractor mlt_consumer_connect( consumer, mlt_field_service( field ) ); @@ -222,7 +286,8 @@ int main( int argc, char **argv ) } else { - fprintf( stderr, "Usage: inigo [ -consumer id[:arg] [ name=value ]* ]\n" + fprintf( stderr, "Usage: inigo [ -group [ name=value ]* ]\n" + " [ -consumer id[:arg] [ name=value ]* ]\n" " [ -filter id[:arg] [ name=value ] * ]\n" " [ producer [ name=value ] * ]+\n" ); } @@ -230,6 +295,9 @@ int main( int argc, char **argv ) // Close the field mlt_field_close( field ); + // Close the group + mlt_properties_close( group ); + // Close the factory mlt_factory_close( );