X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_factory.c;h=9795770ba430f94ac293b4e3b6689bf37087d687;hb=3cdcb361562ac24233535f04e88df5c99d7c24b2;hp=3b40464d6fb729531ca4e93399276fd98a92a375;hpb=661165812e3410fe2f6f49d7af882b36a0efcf82;p=melted diff --git a/src/framework/mlt_factory.c b/src/framework/mlt_factory.c index 3b40464..9795770 100644 --- a/src/framework/mlt_factory.c +++ b/src/framework/mlt_factory.c @@ -21,12 +21,16 @@ #include "config.h" #include "mlt_factory.h" #include "mlt_repository.h" +#include "mlt_properties.h" #include +#include /** Singleton repositories */ +static char *mlt_prefix = NULL; +static mlt_properties object_list = NULL; static mlt_repository producers = NULL; static mlt_repository filters = NULL; static mlt_repository transitions = NULL; @@ -35,15 +39,36 @@ static mlt_repository consumers = NULL; /** Construct the factories. */ -int mlt_factory_init( ) +int mlt_factory_init( char *prefix ) { - producers = mlt_repository_init( PREFIX_DATA "/producers.dat", "mlt_create_producer" ); - filters = mlt_repository_init( PREFIX_DATA "/filters.dat", "mlt_create_filter" ); - transitions = mlt_repository_init( PREFIX_DATA "/transitions.dat", "mlt_create_transition" ); - consumers = mlt_repository_init( PREFIX_DATA "/consumers.dat", "mlt_create_consumer" ); + // If no directory is specified, default to install directory + if ( prefix == NULL ) + prefix = PREFIX_DATA; + + // Store the prefix for later retrieval + mlt_prefix = strdup( prefix ); + + // Create the object list. + object_list = calloc( sizeof( struct mlt_properties_s ), 1 ); + mlt_properties_init( object_list, NULL ); + + // Create a repository for each service type + producers = mlt_repository_init( object_list, prefix, "producers.dat", "mlt_create_producer" ); + filters = mlt_repository_init( object_list, prefix, "filters.dat", "mlt_create_filter" ); + transitions = mlt_repository_init( object_list, prefix, "transitions.dat", "mlt_create_transition" ); + consumers = mlt_repository_init( object_list, prefix, "consumers.dat", "mlt_create_consumer" ); + return 0; } +/** Fetch the prefix used in this instance. +*/ + +const char *mlt_factory_prefix( ) +{ + return mlt_prefix; +} + /** Fetch a producer from the repository. */ @@ -63,7 +88,7 @@ mlt_filter mlt_factory_filter( char *service, void *input ) /** Fetch a transition from the repository. */ -mlt_transition mlt_transition_filter( char *service, void *input ) +mlt_transition mlt_factory_transition( char *service, void *input ) { return ( mlt_transition )mlt_repository_fetch( transitions, service, input ); } @@ -85,5 +110,8 @@ void mlt_factory_close( ) mlt_repository_close( filters ); mlt_repository_close( transitions ); mlt_repository_close( consumers ); + mlt_properties_close( object_list ); + free( mlt_prefix ); + free( object_list ); }