X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_repository.c;h=cdda3db33407042f10972e62f51065b389691382;hb=51de85d7a61e44bde5395629af348d9ca96ee13b;hp=9c25b2151e6d34f1bae8e32cefc31c97feb0eaf0;hpb=520454d526bdcd58f1ac6ab7532dc2529b822808;p=melted diff --git a/src/framework/mlt_repository.c b/src/framework/mlt_repository.c index 9c25b21..cdda3db 100644 --- a/src/framework/mlt_repository.c +++ b/src/framework/mlt_repository.c @@ -29,7 +29,6 @@ struct mlt_repository_s { struct mlt_properties_s parent; - mlt_properties object_list; }; static char *construct_full_file( char *output, char *prefix, char *file ) @@ -50,8 +49,7 @@ static char *chomp( char *input ) static mlt_properties construct_object( char *prefix, char *id ) { - mlt_properties output = calloc( sizeof( struct mlt_properties_s ), 1 ); - mlt_properties_init( output, NULL ); + mlt_properties output = mlt_properties_new( ); mlt_properties_set( output, "prefix", prefix ); mlt_properties_set( output, "id", id ); return output; @@ -59,8 +57,7 @@ static mlt_properties construct_object( char *prefix, char *id ) static mlt_properties construct_service( mlt_properties object, char *id ) { - mlt_properties output = calloc( sizeof( struct mlt_properties_s ), 1 ); - mlt_properties_init( output, NULL ); + mlt_properties output = mlt_properties_new( ); mlt_properties_set_data( output, "object", object, 0, NULL, NULL ); mlt_properties_set( output, "id", id ); return output; @@ -93,12 +90,16 @@ static void *construct_instance( mlt_properties service_properties, char *symbol construct_full_file( full_file, prefix, file ); // Open the shared object - object = dlopen( full_file, RTLD_NOW | RTLD_GLOBAL ); - if ( object == NULL ) + object = dlopen( full_file, RTLD_NOW ); + if ( object != NULL ) + { + // Set it on the properties + mlt_properties_set_data( object_properties, "dlopen", object, 0, ( mlt_destructor )dlclose, NULL ); + } + else + { fprintf( stderr, "Failed to load plugin: %s\n", dlerror() ); - - // Set it on the properties - mlt_properties_set_data( object_properties, "dlopen", object, 0, ( void (*)( void * ) )dlclose, NULL ); + } } // Now check if we have this symbol pointer @@ -115,12 +116,6 @@ static void *construct_instance( mlt_properties service_properties, char *symbol return symbol_ptr != NULL ? symbol_ptr( service, input ) : NULL; } -void destroy_properties( void *arg ) -{ - mlt_properties_close( arg ); - free( arg ); -} - mlt_repository mlt_repository_init( mlt_properties object_list, char *prefix, char *data, char *symbol ) { char full_file[ 512 ]; @@ -133,11 +128,9 @@ mlt_repository mlt_repository_init( mlt_properties object_list, char *prefix, ch // Add the symbol to THIS repository properties. mlt_properties_set( &this->parent, "_symbol", symbol ); - // Asociate the repository to the global object_list - this->object_list = object_list; - // Construct full file construct_full_file( full_file, prefix, data ); + strcat( full_file, ".dat" ); // Open the file file = fopen( full_file, "r" ); @@ -165,14 +158,14 @@ mlt_repository mlt_repository_init( mlt_properties object_list, char *prefix, ch object_properties = construct_object( prefix, object ); // Add it to the object list - mlt_properties_set_data( object_list, object, object_properties, 0, destroy_properties, NULL ); + mlt_properties_set_data( object_list, object, object_properties, 0, ( mlt_destructor )mlt_properties_close, NULL ); } // Now construct a property for the service mlt_properties service_properties = construct_service( object_properties, service ); // Add it to the repository - mlt_properties_set_data( &this->parent, service, service_properties, 0, destroy_properties, NULL ); + mlt_properties_set_data( &this->parent, service, service_properties, 0, ( mlt_destructor )mlt_properties_close, NULL ); } }