X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Ffrei0r%2Ffactory.c;h=4cd84853afc773d65ce3e5824873a6a3f86e4e67;hb=70933f360aa7d16e5140267ce2f716de924464c7;hp=e981de7796a51a89b2c4beeeb216f053a3437e0b;hpb=5d9f26d0c9c2acce11cec6a0f26b649d78834167;p=melted diff --git a/src/modules/frei0r/factory.c b/src/modules/frei0r/factory.c index e981de7..4cd8485 100644 --- a/src/modules/frei0r/factory.c +++ b/src/modules/frei0r/factory.c @@ -23,10 +23,12 @@ #include #include +#include #include #include #include #include +#include extern mlt_filter filter_frei0r_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg ); extern mlt_frame filter_process( mlt_filter this, mlt_frame frame ); @@ -34,66 +36,81 @@ extern void filter_close( mlt_filter this ); extern void transition_close( mlt_transition this ); extern mlt_frame transition_process( mlt_transition transition, mlt_frame a_frame, mlt_frame b_frame ); -static mlt_properties subtag ( mlt_properties prop , char *name , mlt_serialiser serialise_yaml ){ - mlt_properties ret = mlt_properties_get_data( prop , name , NULL ); +static mlt_properties fill_param_info ( mlt_service_type type, const char *service_name, char *name ) +{ + char file[ PATH_MAX ]; + char servicetype[ 1024 ]=""; + struct stat stat_buff; - if (!ret){ - ret = mlt_properties_new ( ); - mlt_properties_set_data ( prop , name , ret , 0 , ( mlt_destructor )mlt_properties_close , serialise_yaml ); - } - return ret; -} - -void fill_param_info ( mlt_repository repository , void* handle, f0r_plugin_info_t* info , mlt_service_type type , char* name ) { + switch ( type ) { + case filter_type: + strcpy ( servicetype , "filter" ); + break; + case transition_type: + strcpy ( servicetype , "transition" ) ; + break; + default: + strcpy ( servicetype , "" ); + }; - int j=0; + snprintf( file, PATH_MAX, "%s/frei0r/%s_%s.yml", mlt_environment( "MLT_DATA" ), servicetype, service_name ); + stat(file,&stat_buff); + + if (S_ISREG(stat_buff.st_mode)){ + return mlt_properties_parse_yaml( file ); + } + + void* handle=dlopen(name,RTLD_LAZY); + if (!handle) return NULL; + void (*plginfo)(f0r_plugin_info_t*)=dlsym(handle,"f0r_get_plugin_info"); void (*param_info)(f0r_param_info_t*,int param_index)=dlsym(handle,"f0r_get_param_info"); - mlt_properties metadata_properties=NULL; + if (!plginfo || !param_info) { + dlclose(handle); + return NULL; + } + mlt_properties metadata = mlt_properties_new(); + f0r_plugin_info_t info; + char string[48]; + int j=0; + + plginfo(&info); + snprintf ( string, sizeof(string) , "%d.%d" , info.major_version , info.minor_version ); + mlt_properties_set ( metadata, "schema_version" , "0.1" ); + mlt_properties_set ( metadata, "title" , info.name ); + mlt_properties_set ( metadata, "version", string ); + mlt_properties_set ( metadata, "identifier" , service_name ); + mlt_properties_set ( metadata, "description" , info.explanation ); + mlt_properties_set ( metadata, "creator" , info.author ); switch (type){ case filter_type: - metadata_properties=mlt_repository_filters(repository); + mlt_properties_set ( metadata, "type" , "filter" ); break; case transition_type: - metadata_properties=mlt_repository_transitions(repository); + mlt_properties_set ( metadata, "type" , "transition" ); break; default: - metadata_properties=NULL; - } - - if (!metadata_properties){ - return; + break; } - mlt_properties this_item_properties = mlt_properties_get_data( metadata_properties , name , NULL ); - mlt_properties metadata = subtag( this_item_properties , "metadata" , ( mlt_serialiser )mlt_properties_serialise_yaml ); - - char descstr[2048]; - snprintf ( descstr, 2048 , "%s (Version: %d.%d)" , info->explanation , info->major_version , info->minor_version ); - mlt_properties_set ( metadata, "title" , info->name ); - mlt_properties_set ( metadata, "identifier" , name ); - mlt_properties_set ( metadata, "description" , descstr ); - mlt_properties_set ( metadata, "creator" , info->author ); - - mlt_properties parameter = subtag ( metadata , "parameters" , NULL ); - mlt_properties tags = subtag ( metadata , "tags" , NULL ); + mlt_properties parameter = mlt_properties_new ( ); + mlt_properties_set_data ( metadata , "parameters" , parameter , 0 , ( mlt_destructor )mlt_properties_close, NULL ); + mlt_properties tags = mlt_properties_new ( ); + mlt_properties_set_data ( metadata , "tags" , tags , 0 , ( mlt_destructor )mlt_properties_close, NULL ); mlt_properties_set ( tags , "0" , "Video" ); - char numstr[512]; - - for (j=0;jnum_params;j++){ - snprintf ( numstr , 512 , "%d" , j ); - mlt_properties pnum = subtag ( parameter , numstr , NULL ); - + for (j=0;j