X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Fwestley%2Fproducer_westley.c;h=52509a064ae65f0f7ce9989b28887ed351d830d2;hb=804cde4a7e15b76587b48102a061e879b6cc0e77;hp=9e276302445a28cb342c1695efa18f686c2352eb;hpb=6fbad87cfc97a367c4e47216b83c9e433253aa9e;p=melted diff --git a/src/modules/westley/producer_westley.c b/src/modules/westley/producer_westley.c index 9e27630..52509a0 100644 --- a/src/modules/westley/producer_westley.c +++ b/src/modules/westley/producer_westley.c @@ -21,7 +21,6 @@ // TODO: destroy unreferenced producers (they are currently destroyed // when the returned producer is closed). -#include "producer_westley.h" #include #include #include @@ -82,6 +81,7 @@ struct deserialise_context_s const xmlChar *publicId; const xmlChar *systemId; mlt_properties params; + mlt_profile profile; }; typedef struct deserialise_context_s *deserialise_context; @@ -504,18 +504,18 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) strcat( temp, ":" ); strncat( temp, resource, 1023 - strlen( temp ) ); } - producer = MLT_SERVICE( mlt_factory_producer( "fezzik", temp ) ); + producer = MLT_SERVICE( mlt_factory_producer( context->profile, "fezzik", temp ) ); } // Just in case the plugin requested doesn't exist... if ( producer == NULL && resource != NULL ) - producer = MLT_SERVICE( mlt_factory_producer( "fezzik", resource ) ); + producer = MLT_SERVICE( mlt_factory_producer( context->profile, "fezzik", resource ) ); if ( producer == NULL ) - producer = MLT_SERVICE( mlt_factory_producer( "fezzik", "+INVALID.txt" ) ); + producer = MLT_SERVICE( mlt_factory_producer( context->profile, "fezzik", "+INVALID.txt" ) ); if ( producer == NULL ) - producer = MLT_SERVICE( mlt_factory_producer( "fezzik", "colour:red" ) ); + producer = MLT_SERVICE( mlt_factory_producer( context->profile, "fezzik", "colour:red" ) ); // Track this producer track_service( context->destructors, producer, (mlt_destructor) mlt_producer_close ); @@ -540,7 +540,7 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) if ( strchr( mlt_properties_get( properties, "clipBegin" ), ':' ) ) // Parse clock value in = parse_clock_value( mlt_properties_get( properties, "clipBegin" ), - mlt_properties_get_double( mlt_producer_properties( MLT_PRODUCER( producer ) ), "fps" ) ); + mlt_producer_get_fps( MLT_PRODUCER( producer ) ) ); else // Parse frames value in = mlt_properties_get_position( properties, "clipBegin" ); @@ -554,7 +554,7 @@ static void on_end_producer( deserialise_context context, const xmlChar *name ) if ( strchr( mlt_properties_get( properties, "clipEnd" ), ':' ) ) // Parse clock value out = parse_clock_value( mlt_properties_get( properties, "clipEnd" ), - mlt_properties_get_double( mlt_producer_properties( MLT_PRODUCER( producer ) ), "fps" ) ); + mlt_producer_get_fps( MLT_PRODUCER( producer ) ) ); else // Parse frames value out = mlt_properties_get_position( properties, "clipEnd" ); @@ -844,7 +844,7 @@ static void on_end_filter( deserialise_context context, const xmlChar *name ) if ( service != NULL && type == mlt_dummy_filter_type ) { - mlt_service filter = MLT_SERVICE( mlt_factory_filter( mlt_properties_get( properties, "mlt_service" ), NULL ) ); + mlt_service filter = MLT_SERVICE( mlt_factory_filter( context->profile, mlt_properties_get( properties, "mlt_service" ), NULL ) ); mlt_properties filter_props = MLT_SERVICE_PROPERTIES( filter ); track_service( context->destructors, filter, (mlt_destructor) mlt_filter_close ); @@ -919,7 +919,8 @@ static void on_end_transition( deserialise_context context, const xmlChar *name if ( service != NULL && type == mlt_dummy_transition_type ) { - mlt_service effect = MLT_SERVICE( mlt_factory_transition(mlt_properties_get(properties,"mlt_service"), NULL ) ); + char *id = mlt_properties_get( properties, "mlt_service" ); + mlt_service effect = MLT_SERVICE( mlt_factory_transition( context->profile, id, NULL ) ); mlt_properties effect_props = MLT_SERVICE_PROPERTIES( effect ); track_service( context->destructors, effect, (mlt_destructor) mlt_transition_close ); @@ -1332,7 +1333,7 @@ static int file_exists( char *file ) return exists; } -mlt_producer producer_westley_init( int info, char *data ) +mlt_producer producer_westley_init( mlt_profile profile, mlt_service_type servtype, const char *id, char *data ) { xmlSAXHandler *sax = calloc( 1, sizeof( xmlSAXHandler ) ); struct deserialise_context_s *context = calloc( 1, sizeof( struct deserialise_context_s ) ); @@ -1341,6 +1342,7 @@ mlt_producer producer_westley_init( int info, char *data ) struct _xmlParserCtxt *xmlcontext; int well_formed = 0; char *filename = NULL; + int info = strcmp( id, "westley-xml" ) ? 0 : 1; if ( data == NULL || !strcmp( data, "" ) || ( info == 0 && !file_exists( data ) ) ) return NULL; @@ -1352,6 +1354,7 @@ mlt_producer producer_westley_init( int info, char *data ) context->producer_map = mlt_properties_new(); context->destructors = mlt_properties_new(); context->params = mlt_properties_new(); + context->profile = profile; // Decode URL and parse parameters mlt_properties_set( context->producer_map, "root", "" );