X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_factory.c;h=4a14decc98ef02ed28e9335b81a629522d68ca7a;hb=9bee7421e4b65a36f9977482a88027e8a5260eeb;hp=d551cfac4167a609bd347b0e28cd28f65df65555;hpb=bf3264b9e340ba5c11cbf59835a8af3db94e0cc2;p=melted diff --git a/src/framework/mlt_factory.c b/src/framework/mlt_factory.c index d551cfa..4a14dec 100644 --- a/src/framework/mlt_factory.c +++ b/src/framework/mlt_factory.c @@ -111,8 +111,10 @@ int mlt_factory_init( const char *prefix ) mlt_properties_set_or_default( global_properties, "MLT_PRODUCER", getenv( "MLT_PRODUCER" ), "fezzik" ); mlt_properties_set_or_default( global_properties, "MLT_CONSUMER", getenv( "MLT_CONSUMER" ), "sdl" ); mlt_properties_set( global_properties, "MLT_TEST_CARD", getenv( "MLT_TEST_CARD" ) ); + mlt_properties_set_or_default( global_properties, "MLT_PROFILE", getenv( "MLT_PROFILE" ), "dv_pal" ); } + return 0; } @@ -137,13 +139,37 @@ const char *mlt_factory_prefix( ) char *mlt_environment( const char *name ) { - return mlt_properties_get( global_properties, name ); + if ( global_properties ) + return mlt_properties_get( global_properties, name ); + else + return NULL; +} + +/** Set a value in the environment. +*/ + +int mlt_environment_set( const char *name, const char *value ) +{ + if ( global_properties ) + return mlt_properties_set( global_properties, name, value ); + else + return -1; +} + +static void set_common_properties( mlt_properties properties, mlt_profile profile, const char *type, const char *service ) +{ + mlt_properties_set_int( properties, "_unique_id", ++ unique_id ); + mlt_properties_set( properties, "mlt_type", type ); + if ( mlt_properties_get_int( properties, "_mlt_service_hidden" ) == 0 ) + mlt_properties_set( properties, "mlt_service", service ); + if ( profile != NULL ) + mlt_properties_set_data( properties, "_profile", profile, 0, NULL, NULL ); } /** Fetch a producer from the repository. */ -mlt_producer mlt_factory_producer( const char *service, void *input ) +mlt_producer mlt_factory_producer( mlt_profile profile, const char *service, void *input ) { mlt_producer obj = NULL; @@ -157,15 +183,12 @@ mlt_producer mlt_factory_producer( const char *service, void *input ) // Try to instantiate via the specified service if ( obj == NULL ) { - obj = mlt_repository_fetch( producers, service, input ); + obj = mlt_repository_fetch( producers, profile, producer_type, service, input ); mlt_events_fire( event_object, "producer-create-done", service, input, obj, NULL ); if ( obj != NULL ) { mlt_properties properties = MLT_PRODUCER_PROPERTIES( obj ); - mlt_properties_set_int( properties, "_unique_id", ++ unique_id ); - mlt_properties_set( properties, "mlt_type", "producer" ); - if ( mlt_properties_get_int( properties, "_mlt_service_hidden" ) == 0 ) - mlt_properties_set( properties, "mlt_service", service ); + set_common_properties( properties, profile, "producer", service ); } } return obj; @@ -174,7 +197,7 @@ mlt_producer mlt_factory_producer( const char *service, void *input ) /** Fetch a filter from the repository. */ -mlt_filter mlt_factory_filter( const char *service, void *input ) +mlt_filter mlt_factory_filter( mlt_profile profile, const char *service, void *input ) { mlt_filter obj = NULL; @@ -183,16 +206,14 @@ mlt_filter mlt_factory_filter( const char *service, void *input ) if ( obj == NULL ) { - obj = mlt_repository_fetch( filters, service, input ); + obj = mlt_repository_fetch( filters, profile, filter_type, service, input ); mlt_events_fire( event_object, "filter-create-done", service, input, obj, NULL ); } if ( obj != NULL ) { mlt_properties properties = MLT_FILTER_PROPERTIES( obj ); - mlt_properties_set_int( properties, "_unique_id", ++ unique_id ); - mlt_properties_set( properties, "mlt_type", "filter" ); - mlt_properties_set( properties, "mlt_service", service ); + set_common_properties( properties, profile, "filter", service ); } return obj; } @@ -200,7 +221,7 @@ mlt_filter mlt_factory_filter( const char *service, void *input ) /** Fetch a transition from the repository. */ -mlt_transition mlt_factory_transition( const char *service, void *input ) +mlt_transition mlt_factory_transition( mlt_profile profile, const char *service, void *input ) { mlt_transition obj = NULL; @@ -209,16 +230,14 @@ mlt_transition mlt_factory_transition( const char *service, void *input ) if ( obj == NULL ) { - obj = mlt_repository_fetch( transitions, service, input ); + obj = mlt_repository_fetch( transitions, profile, filter_type, service, input ); mlt_events_fire( event_object, "transition-create-done", service, input, obj, NULL ); } if ( obj != NULL ) { mlt_properties properties = MLT_TRANSITION_PROPERTIES( obj ); - mlt_properties_set_int( properties, "_unique_id", ++ unique_id ); - mlt_properties_set( properties, "mlt_type", "transition" ); - mlt_properties_set( properties, "mlt_service", service ); + set_common_properties( properties, profile, "transition", service ); } return obj; } @@ -226,7 +245,7 @@ mlt_transition mlt_factory_transition( const char *service, void *input ) /** Fetch a consumer from the repository */ -mlt_consumer mlt_factory_consumer( const char *service, void *input ) +mlt_consumer mlt_factory_consumer( mlt_profile profile, const char *service, void *input ) { mlt_consumer obj = NULL; @@ -238,19 +257,14 @@ mlt_consumer mlt_factory_consumer( const char *service, void *input ) if ( obj == NULL ) { - obj = mlt_repository_fetch( consumers, service, input ); + obj = mlt_repository_fetch( consumers, profile, consumer_type, service, input ); mlt_events_fire( event_object, "consumer-create-done", service, input, obj, NULL ); } if ( obj != NULL ) { - mlt_filter filter = mlt_factory_filter( "data_show", NULL ); mlt_properties properties = MLT_CONSUMER_PROPERTIES( obj ); - mlt_properties_set_int( properties, "_unique_id", ++ unique_id ); - mlt_properties_set( properties, "mlt_type", "consumer" ); - mlt_properties_set( properties, "mlt_service", service ); - mlt_service_attach( MLT_CONSUMER_SERVICE( obj ), filter ); - mlt_filter_close( filter ); + set_common_properties( properties, profile, "consumer", service ); } return obj; } @@ -284,4 +298,3 @@ void mlt_factory_close( ) mlt_pool_close( ); } } -