Splits, joins and repeats
[melted] / src / modules / westley / producer_westley.c
index 4e5bad8..fa40406 100644 (file)
@@ -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
                {
@@ -719,17 +727,23 @@ static void on_end_track( deserialise_context context, const xmlChar *name )
                if ( multitrack != NULL )
                {
                        // Set the track on the multitrack
-                       mlt_multitrack_connect( multitrack, producer, mlt_multitrack_count( multitrack ) );
 
                        // Set producer i/o if specified
-                       if ( mlt_properties_get( track_props, "in" ) != NULL ||
-                               mlt_properties_get( track_props, "out" ) != NULL )
+                       if ( mlt_properties_get( track_props, "in" ) != NULL &&
+                                mlt_properties_get( track_props, "out" ) != NULL )
                        {
-                               mlt_producer_set_in_and_out( MLT_PRODUCER( producer ),
+                               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 );
                        }
-       
+                       else
+                       {
+                               mlt_multitrack_connect( multitrack, producer, mlt_multitrack_count( multitrack ) );
+                       }
+
                        // Set the hide state of the track producer
                        char *hide_s = mlt_properties_get( track_props, "hide" );
                        if ( hide_s != NULL )