X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fwestley%2Fproducer_westley.c;h=40e94c14ce8c07f3341309de0f49359d923aa4ce;hb=c12c6c380fa37b6a0d28ce98fdcda487a8aca76d;hp=ff7c5806b81f8cae9e25e93fb21c00e64a86ba05;hpb=9b115c18489fdc84e2198fef65e4e444f579ff24;p=melted diff --git a/src/modules/westley/producer_westley.c b/src/modules/westley/producer_westley.c index ff7c580..40e94c1 100644 --- a/src/modules/westley/producer_westley.c +++ b/src/modules/westley/producer_westley.c @@ -54,7 +54,7 @@ enum service_type mlt_transition_type, mlt_consumer_type, mlt_field_type, - mlt_service_type, + mlt_services_type, mlt_dummy_filter_type, mlt_dummy_transition_type, mlt_dummy_producer_type, @@ -550,7 +550,7 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) else { // Otherwise, set in and out on producer directly - mlt_producer_set_in_and_out( MLT_PRODUCER( service ), in, out ); + mlt_producer_set_in_and_out( MLT_PRODUCER( producer ), in, out ); } } else @@ -559,7 +559,7 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) mlt_producer_set_in_and_out( MLT_PRODUCER( producer ), in, out ); } } - + // Push the producer onto the stack context_push_service( context, producer, mlt_producer_type ); } @@ -639,8 +639,16 @@ static void on_start_entry( deserialise_context context, const xmlChar *name, co mlt_playlist_append( MLT_PLAYLIST( parent ), producer ); } + // Handle the repeat property + if ( mlt_properties_get_int( temp, "repeat" ) > 0 ) + { + mlt_playlist_repeat_clip( MLT_PLAYLIST( parent ), + mlt_playlist_count( MLT_PLAYLIST( parent ) ) - 1, + mlt_properties_get_int( temp, "repeat" ) ); + } + mlt_playlist_get_clip_info( MLT_PLAYLIST( parent ), &info, mlt_playlist_count( MLT_PLAYLIST( parent ) ) - 1 ); - entry = info.producer; + entry = info.cut; } else { @@ -718,12 +726,12 @@ static void on_end_track( deserialise_context context, const xmlChar *name ) if ( multitrack != NULL ) { - // Set the track on the multitrack - // Set producer i/o if specified - if ( mlt_properties_get( track_props, "in" ) != NULL && + if ( mlt_properties_get( track_props, "in" ) != NULL || mlt_properties_get( track_props, "out" ) != NULL ) { + if ( mlt_properties_get( track_props, "out" ) == NULL ) + mlt_properties_set_position( track_props, "out", mlt_properties_get_position( track_props, "length" ) - 1 ); mlt_producer cut = mlt_producer_cut( MLT_PRODUCER( producer ), mlt_properties_get_position( track_props, "in" ), mlt_properties_get_position( track_props, "out" ) ); @@ -883,6 +891,8 @@ static void on_end_transition( deserialise_context context, const xmlChar *name if ( parent_type == mlt_tractor_type ) { mlt_field field = mlt_tractor_field( MLT_TRACTOR( parent ) ); + if ( mlt_properties_get_int( properties, "a_track" ) == mlt_properties_get_int( properties, "b_track" ) ) + mlt_properties_set_int( properties, "b_track", mlt_properties_get_int( properties, "a_track" ) + 1 ); mlt_field_plant_transition( field, MLT_TRANSITION( effect ), mlt_properties_get_int( properties, "a_track" ), mlt_properties_get_int( properties, "b_track" ) ); @@ -1259,7 +1269,7 @@ mlt_producer producer_westley_init( int info, char *data ) struct _xmlParserCtxt *xmlcontext; int well_formed = 0; char *filename = NULL; - + context->producer_map = mlt_properties_new(); context->destructors = mlt_properties_new(); context->params = mlt_properties_new(); @@ -1376,6 +1386,9 @@ mlt_producer producer_westley_init( int info, char *data ) // Assign the title mlt_properties_set( properties, "title", title ); + // Optimise for overlapping producers + mlt_producer_optimise( MLT_PRODUCER( service ) ); + // Handle deep copies if ( getenv( "MLT_WESTLEY_DEEP" ) == NULL ) { @@ -1389,6 +1402,7 @@ mlt_producer producer_westley_init( int info, char *data ) else { // Allow the project to be edited + mlt_properties_set( properties, "_westley", "was here" ); mlt_properties_set_int( properties, "_mlt_service_hidden", 1 ); } }