X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmodules%2Ffrei0r%2Ffactory.c;h=8e2ab997bc03ea270f1901b53a2a640c224baac5;hb=f4963a6aa07644399b273b5d2b1f9299c9047414;hp=e51e2582cfb3b2a70c5147d8eaec3ae976c9263e;hpb=a6313ab2681932e2e9d2834711390c9f130b751a;p=melted diff --git a/src/modules/frei0r/factory.c b/src/modules/frei0r/factory.c index e51e258..8e2ab99 100644 --- a/src/modules/frei0r/factory.c +++ b/src/modules/frei0r/factory.c @@ -23,19 +23,50 @@ #include #include +#include #include #include #include #include +#include + +#define FREI0R_PLUGIN_PATH "/usr/lib/frei0r-1:/usr/local/lib/frei0r-1:/usr/lib64/frei0r-1:/opt/local/lib/frei0r-1" 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 ); extern void filter_close( mlt_filter this ); +extern int producer_get_frame( mlt_producer producer, mlt_frame_ptr frame, int index ); +extern void producer_close( mlt_producer 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 fill_param_info ( mlt_service_type type, const char *service_name, char *name ) { + char file[ PATH_MAX ]; + char servicetype[ 1024 ]=""; + struct stat stat_buff; + + switch ( type ) { + case producer_type: + strcpy ( servicetype , "producer" ); + break; + case filter_type: + strcpy ( servicetype , "filter" ); + break; + case transition_type: + strcpy ( servicetype , "transition" ) ; + break; + default: + strcpy ( servicetype , "" ); + }; + + 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"); @@ -58,6 +89,9 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi mlt_properties_set ( metadata, "description" , info.explanation ); mlt_properties_set ( metadata, "creator" , info.author ); switch (type){ + case producer_type: + mlt_properties_set ( metadata, "type" , "producer" ); + break; case filter_type: mlt_properties_set ( metadata, "type" , "filter" ); break; @@ -67,13 +101,13 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi default: break; } - + 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" ); - + for (j=0;jget_frame = producer_get_frame; + this->close = ( mlt_destructor )producer_close; + f0r_init(); + properties=MLT_PRODUCER_PROPERTIES ( this ); + + for (i=0;iprocess = filter_process; - this->close = filter_close; + this->close = filter_close; f0r_init(); properties=MLT_FILTER_PROPERTIES ( this ); - + for (i=0;i