Improved push capabilities
[melted] / src / modules / westley / producer_westley.c
index 45d4dbb..1d42754 100644 (file)
@@ -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,
@@ -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,15 +726,16 @@ 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 ||
-                               mlt_properties_get( track_props, "out" ) != 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" ) );
+                               mlt_properties_set_int( mlt_producer_properties( cut ), "cut", 1 );
                                mlt_multitrack_connect( multitrack, cut, mlt_multitrack_count( multitrack ) );
                                mlt_producer_close( cut );
                        }
@@ -882,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" ) );
@@ -1375,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 )
                {
@@ -1388,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 );
                }
        }