From b9402bbbbcc5c6569d55700564275f59cd9e2242 Mon Sep 17 00:00:00 2001 From: ddennedy Date: Mon, 16 Feb 2009 07:06:33 +0000 Subject: [PATCH] frei0r/factory.c, frei0r_helper.c: add support for color parameter type with whitespace cleanup courtesy of eclipse. git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1358 d19143bc-622f-0410-bfdd-b5b2a6649095 --- src/modules/frei0r/factory.c | 78 +++++++++++++++++++----------------- src/modules/frei0r/frei0r_helper.c | 71 +++++++++++++++++++++----------- 2 files changed, 87 insertions(+), 62 deletions(-) diff --git a/src/modules/frei0r/factory.c b/src/modules/frei0r/factory.c index 91ca3da..132123f 100644 --- a/src/modules/frei0r/factory.c +++ b/src/modules/frei0r/factory.c @@ -43,7 +43,7 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi char file[ PATH_MAX ]; char servicetype[ 1024 ]=""; struct stat stat_buff; - + switch ( type ) { case filter_type: strcpy ( servicetype , "filter" ); @@ -54,14 +54,14 @@ static mlt_properties fill_param_info ( mlt_service_type type, const char *servi 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"); @@ -93,13 +93,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;jprocess = filter_process; - this->close = filter_close; + this->close = filter_close; f0r_init(); properties=MLT_FILTER_PROPERTIES ( this ); - + for (i=0;i #include +#include + + +static void parse_color( char *color, f0r_param_color_t *fcolor ) +{ + unsigned int temp = strtoul( color, &color, 0 ); + if ( strlen( color ) > 6 ) + temp >>= 8; + fcolor->r = ( temp >> 16 ) & 0xff; + fcolor->r /= 255; + fcolor->g = ( temp >> 8 ) & 0xff; + fcolor->g /= 255; + fcolor->b = ( temp >> 0 ) & 0xff; + fcolor->b /= 255; +} + int process_frei0r_item( mlt_service_type type, double position , mlt_properties prop , mlt_frame this, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable ){ @@ -26,21 +42,21 @@ f0r_instance_t ( *f0r_construct ) ( unsigned int , unsigned int ) = mlt_properties_get_data( prop , "f0r_construct" ,NULL); void (*f0r_update)(f0r_instance_t instance, double time, const uint32_t* inframe, uint32_t* outframe)=mlt_properties_get_data( prop , "f0r_update" ,NULL); void (*f0r_destruct)(f0r_instance_t instance)=mlt_properties_get_data( prop , "f0r_destruct" ,NULL); - + void (*f0r_get_plugin_info)(f0r_plugin_info_t*)=mlt_properties_get_data( prop, "f0r_get_plugin_info" ,NULL); void (*f0r_get_param_info)(f0r_param_info_t* info, int param_index)=mlt_properties_get_data( prop , "f0r_get_param_info" ,NULL); void (*f0r_set_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index)=mlt_properties_get_data( prop , "f0r_set_param_value" ,NULL); void (*f0r_get_param_value)(f0r_instance_t instance, f0r_param_t param, int param_index)=mlt_properties_get_data( prop , "f0r_get_param_value" ,NULL); void (*f0r_update2) (f0r_instance_t instance, double time, const uint32_t* inframe1,const uint32_t* inframe2,const uint32_t* inframe3, - uint32_t* outframe)=mlt_properties_get_data( prop , "f0r_update2" ,NULL); - - + uint32_t* outframe)=mlt_properties_get_data( prop , "f0r_update2" ,NULL); + + //use as name the width and height f0r_instance_t inst; char ctorname[1024]=""; sprintf(ctorname,"ctor-%dx%d",*width,*height); - + void* neu=mlt_properties_get_data( prop , ctorname ,NULL ); if (!f0r_construct){ //printf("no ctor\n"); @@ -61,7 +77,7 @@ mlt_geometry geom=mlt_geometry_init(); struct mlt_geometry_item_s item; //set param if found - + double t=0.0; f0r_get_param_value(inst,&t,i); char *val; @@ -75,53 +91,58 @@ t=item.x; f0r_set_param_value(inst,&t,i); break; - //case F0R_PARAM_COLOR: - // t=mlt_properties_get_double( prop , pinfo.name ); - + case F0R_PARAM_COLOR: + { + f0r_param_color_t color; + parse_color(mlt_properties_get(prop , pinfo.name), &color); + f0r_set_param_value(inst, &color, i); + break; + } + } } - + mlt_geometry_close(geom); } } - + int video_area = *width * *height; uint32_t *img_a = mlt_pool_alloc( video_area * sizeof(uint32_t) ); uint32_t *img_b = mlt_pool_alloc( video_area * sizeof(uint32_t) ); - + if (type==filter_type){ mlt_convert_yuv422_to_rgb24a(*image, (uint8_t *)img_a, video_area); f0r_update ( inst , position , img_a , img_b ); - mlt_convert_rgb24a_to_yuv422((uint8_t *)img_b , *width, *height, *width * sizeof(uint32_t), - *image, NULL ); + mlt_convert_rgb24a_to_yuv422((uint8_t *)img_b , *width, *height, *width * sizeof(uint32_t), + *image, NULL ); }else if (type==transition_type && f0r_update2 ){ uint32_t *result = mlt_pool_alloc( video_area * sizeof(uint32_t) ); - + mlt_convert_yuv422_to_rgb24a ( image[0] , (uint8_t *)img_a , video_area ); mlt_convert_yuv422_to_rgb24a ( image[1] , (uint8_t *)img_b , video_area ); f0r_update2 ( inst , position , img_a , img_b , NULL , result ); - + uint8_t * image_ptr=mlt_properties_get_data(MLT_FRAME_PROPERTIES(this), "image", NULL ); if (image_ptr) mlt_convert_rgb24a_to_yuv422((uint8_t *)result, *width, *height, *width * sizeof(uint32_t), image_ptr , NULL ); - + mlt_pool_release(result); } mlt_pool_release(img_a); mlt_pool_release(img_b); - + return 0; } void destruct (mlt_properties prop ) { - + void (*f0r_destruct)(f0r_instance_t instance)=mlt_properties_get_data( prop , "f0r_destruct" , NULL ); void (*f0r_deinit)(void)=mlt_properties_get_data ( prop , "f0r_deinit" , NULL); int i=0; - + if ( f0r_deinit != NULL ) f0r_deinit(); - + for ( i=0 ; i < mlt_properties_count ( prop ) ; i++ ){ if ( strstr ( mlt_properties_get_name ( prop , i ) , "ctor-" ) != NULL ){ void * inst=mlt_properties_get_data( prop , mlt_properties_get_name ( prop , i ) , NULL ); @@ -130,11 +151,11 @@ void destruct (mlt_properties prop ) { } } } - void (*dlclose)(void*)=mlt_properties_get_data ( prop , "_dlclose" , NULL); - void *handle=mlt_properties_get_data ( prop , "_dlclose_handle" , NULL); - + void (*dlclose)(void*)=mlt_properties_get_data ( prop , "_dlclose" , NULL); + void *handle=mlt_properties_get_data ( prop , "_dlclose_handle" , NULL); + if (handle && dlclose ){ dlclose ( handle ); } - + } -- 1.7.4.4