struct mlt_repository_s
{
struct mlt_properties_s parent;
- mlt_properties object_list;
};
static char *construct_full_file( char *output, char *prefix, char *file )
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;
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;
}
-void *construct_instance( mlt_properties service_properties, char *symbol, void *input )
+static void *construct_instance( mlt_properties service_properties, char *symbol, void *input )
{
// Extract the service
char *service = mlt_properties_get( service_properties, "id" );
construct_full_file( full_file, prefix, file );
// Open the shared object
- object = dlopen( full_file, RTLD_NOW | RTLD_GLOBAL );
-
- // Set it on the properties
- mlt_properties_set_data( object_properties, "dlopen", object, 0, ( void (*)( void * ) )dlclose, 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() );
+ }
}
// Now check if we have this symbol pointer
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 ];
// Construct the repository
mlt_repository this = calloc( sizeof( struct mlt_repository_s ), 1 );
- mlt_properties_init( &this->parent, NULL );
+ mlt_properties_init( &this->parent, this );
// 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" );
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 );
}
}