Apply cosmetic cleanup part of ldflags_order patch from Alberto Villa.
[melted] / src / modules / frei0r / frei0r_helper.c
index dd7db75..e42b06e 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
-
-static void parse_color( char *color, f0r_param_color_t *fcolor )
+static void parse_color( int 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 = ( color >> 24 ) & 0xff;
        fcolor->r /= 255;
-       fcolor->g = ( temp >>  8 ) & 0xff;
+       fcolor->g = ( color >> 16 ) & 0xff;
        fcolor->g /= 255;
-       fcolor->b = ( temp >>  0 ) & 0xff;
+       fcolor->b = ( color >>  8 ) & 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 ){
+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 ){
 
        int i=0;
        f0r_instance_t ( *f0r_construct ) ( unsigned int , unsigned int ) =  mlt_properties_get_data(  prop , "f0r_construct" ,NULL);
@@ -94,11 +89,10 @@ static void parse_color( char *color, f0r_param_color_t *fcolor )
                                        case F0R_PARAM_COLOR:
                                        {
                                                f0r_param_color_t color;
-                                               parse_color(mlt_properties_get(prop , pinfo.name), &color);
+                                               parse_color(mlt_properties_get_int(prop , pinfo.name), &color);
                                                f0r_set_param_value(inst, &color, i);
                                                break;
                                        }
-
                                }
                        }
 
@@ -107,15 +101,21 @@ static void parse_color( char *color, f0r_param_color_t *fcolor )
        }
 
        int video_area = *width * *height;
-       uint32_t *img_a = mlt_pool_alloc( video_area * sizeof(uint32_t) );
+       uint32_t *img_a;
+
+       if ( type != producer_type )
+           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){
+       if (type==producer_type) {
+               f0r_update ( inst , position , NULL , img_b );
+               mlt_convert_rgb24a_to_yuv422((uint8_t *)img_b , *width, *height, *width * sizeof(uint32_t),*image, NULL);
+       } else 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 );
-       }else if (type==transition_type && f0r_update2 ){
+       } 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 );
@@ -128,7 +128,7 @@ static void parse_color( char *color, f0r_param_color_t *fcolor )
 
                mlt_pool_release(result);
        }
-       mlt_pool_release(img_a);
+       if ( type != producer_type ) mlt_pool_release(img_a);
        mlt_pool_release(img_b);
 
        return 0;