Splits, joins and repeats
[melted] / src / modules / westley / consumer_westley.c
index 15bd525..6a9644c 100644 (file)
@@ -268,6 +268,8 @@ static void serialise_producer( serialise_context context, mlt_service service,
        }
 }
 
+static void serialise_tractor( serialise_context context, mlt_service service, xmlNode *node );
+
 static void serialise_multitrack( serialise_context context, mlt_service service, xmlNode *node )
 {
        int i;
@@ -276,7 +278,21 @@ static void serialise_multitrack( serialise_context context, mlt_service service
        {
                // Iterate over the tracks to collect the producers
                for ( i = 0; i < mlt_multitrack_count( MLT_MULTITRACK( service ) ); i++ )
-                       serialise_service( context, MLT_SERVICE( mlt_multitrack_track( MLT_MULTITRACK( service ), i ) ), node );
+               {
+                       mlt_producer producer = mlt_producer_cut_parent( mlt_multitrack_track( MLT_MULTITRACK( service ), i ) );
+                       char *resource_s = mlt_properties_get( mlt_producer_properties( producer ), "resource" );
+                       if ( resource_s != NULL && !strcmp( resource_s, "<tractor>" ) )
+                       {
+                               serialise_tractor( context, MLT_SERVICE( producer ), node );
+                               context->pass ++;
+                               serialise_tractor( context, MLT_SERVICE( producer ), node );
+                               context->pass --;
+                       }
+                       else
+                       {
+                               serialise_service( context, MLT_SERVICE( producer ), node );
+                       }
+               }
        }
        else
        {
@@ -311,8 +327,6 @@ static void serialise_multitrack( serialise_context context, mlt_service service
        }
 }
 
-static void serialise_tractor( serialise_context context, mlt_service service, xmlNode *node );
-
 static void serialise_playlist( serialise_context context, mlt_service service, xmlNode *node )
 {
        int i;
@@ -344,10 +358,10 @@ static void serialise_playlist( serialise_context context, mlt_service service,
                                                serialise_tractor( context, MLT_SERVICE( producer ), node );
                                                context->pass --;
                                        }
-                                       else if ( service_s != NULL && strcmp( service_s, "blank" ) != 0 )
-                                               serialise_service( context, MLT_SERVICE( producer ), node );
                                        else if ( resource_s != NULL && !strcmp( resource_s, "<playlist>" ) )
                                                serialise_playlist( context, MLT_SERVICE( producer ), node );
+                                       else if ( service_s != NULL && strcmp( service_s, "blank" ) != 0 )
+                                               serialise_service( context, MLT_SERVICE( producer ), node );
                                }
                        }
                }
@@ -385,8 +399,13 @@ static void serialise_playlist( serialise_context context, mlt_service service,
                                        xmlNewProp( entry, "in", temp );
                                        sprintf( temp, "%d", info.frame_out );
                                        xmlNewProp( entry, "out", temp );
-                                       if ( mlt_producer_is_cut( info.producer ) )
-                                               serialise_service_filters( context, mlt_producer_service( info.producer ), entry );
+                                       if ( info.repeat > 1 )
+                                       {
+                                               sprintf( temp, "%d", info.repeat );
+                                               xmlNewProp( entry, "repeat", temp );
+                                       }
+                                       if ( mlt_producer_is_cut( info.cut ) )
+                                               serialise_service_filters( context, mlt_producer_service( info.cut ), entry );
                                }
                        }
                }