]> git.sesse.net Git - mlt/blobdiff - src/modules/avformat/filter_avcolour_space.c
Refactor to use mlt_frame_set_image/_alpha.
[mlt] / src / modules / avformat / filter_avcolour_space.c
index 79c1b157a2fd837fffb1686cc872d0c9f2fefd5a..77c2fee0e034ec5b803fddbaa555f27ff44b5301 100644 (file)
@@ -24,9 +24,9 @@
 #include <framework/mlt_profile.h>
 
 // ffmpeg Header files
-#include <avformat.h>
+#include <libavformat/avformat.h>
 #ifdef SWSCALE
-#include <swscale.h>
+#include <libswscale/swscale.h>
 #endif
 
 #if LIBAVUTIL_VERSION_INT < (50<<16)
@@ -75,6 +75,7 @@ static int convert_mlt_to_av_cs( mlt_image_format format )
 
 static void set_luma_transfer( struct SwsContext *context, int colorspace, int use_full_range )
 {
+#if defined(SWSCALE) && (LIBSWSCALE_VERSION_INT >= ((0<<16)+(7<<8)+2))
        int *coefficients;
        int full_range;
        int brightness, contrast, saturation;
@@ -103,6 +104,7 @@ static void set_luma_transfer( struct SwsContext *context, int colorspace, int u
                sws_setColorspaceDetails( context, coefficients, full_range, coefficients, full_range,
                        brightness, contrast, saturation );
        }
+#endif
 }
 
 static void av_convert_image( uint8_t *out, uint8_t *in, int out_fmt, int in_fmt,
@@ -110,6 +112,7 @@ static void av_convert_image( uint8_t *out, uint8_t *in, int out_fmt, int in_fmt
 {
        AVPicture input;
        AVPicture output;
+#ifdef SWSCALE
        int flags = SWS_BILINEAR | SWS_ACCURATE_RND;
 
        if ( out_fmt == PIX_FMT_YUYV422 )
@@ -122,6 +125,7 @@ static void av_convert_image( uint8_t *out, uint8_t *in, int out_fmt, int in_fmt
 #ifdef USE_SSE
        flags |= SWS_CPU_CAPS_MMX2;
 #endif
+#endif /* SWSCALE */
 
        avpicture_fill( &input, in, in_fmt, width, height );
        avpicture_fill( &output, out, out_fmt, width, height );
@@ -186,7 +190,7 @@ static int convert_image( mlt_frame frame, uint8_t **image, mlt_image_format *fo
                                                        }
                                                        while ( --n > 0 );
                                }
-                               mlt_properties_set_data( properties, "alpha", alpha, len, mlt_pool_release, NULL );
+                               mlt_frame_set_alpha( frame, alpha, len, mlt_pool_release );
                                frame->get_alpha_mask = NULL;
                        }
                }
@@ -204,7 +208,7 @@ static int convert_image( mlt_frame frame, uint8_t **image, mlt_image_format *fo
                av_convert_image( output, *image, out_fmt, in_fmt, width, height, colorspace, force_full_luma );
                *image = output;
                *format = output_format;
-               mlt_properties_set_data( properties, "image", output, size, mlt_pool_release, NULL );
+               mlt_frame_set_image( frame, output, size, mlt_pool_release );
                mlt_properties_set_int( properties, "format", output_format );
 
                if ( output_format == mlt_image_rgb24a || output_format == mlt_image_opengl )
@@ -240,6 +244,9 @@ static int convert_image( mlt_frame frame, uint8_t **image, mlt_image_format *fo
        return error;
 }
 
+/* TODO: The below is not working because swscale does not have
+ * adjustable coefficients yet for RGB->YUV */
+
 static int get_image( mlt_frame frame, uint8_t **image, mlt_image_format *format, int *width, int *height, int writable )
 {
        int error = 0;
@@ -289,8 +296,11 @@ static mlt_frame filter_process( mlt_filter filter, mlt_frame frame )
                mlt_properties_set_int( properties, "colorspace", mlt_service_profile( MLT_FILTER_SERVICE(filter) )->colorspace );
 
        frame->convert_image = convert_image;
-       mlt_frame_push_service( frame, mlt_service_profile( MLT_FILTER_SERVICE( filter ) ) );
-       mlt_frame_push_get_image( frame, get_image );
+    
+//     Not working yet - see comment for get_image() above.
+//     mlt_frame_push_service( frame, mlt_service_profile( MLT_FILTER_SERVICE( filter ) ) );
+//     mlt_frame_push_get_image( frame, get_image );
+
        return frame;
 }
 
@@ -315,9 +325,9 @@ mlt_filter filter_avcolour_space_init( void *arg )
        return NULL;
 #endif
 #endif
-       mlt_filter this = mlt_filter_new( );
-       if ( this != NULL )
-               this->process = filter_process;
-       return this;
+       mlt_filter filter = mlt_filter_new( );
+       if ( filter != NULL )
+               filter->process = filter_process;
+       return filter;
 }