]> git.sesse.net Git - mlt/blobdiff - src/modules/plus/filter_sepia.c
src/framework/mlt_frame.c
[mlt] / src / modules / plus / filter_sepia.c
index 07ab2682507f0bb80b16a1c69195c973fcaa7b9b..4aa0dbc0088e7225b565c9307626cd48b1cfd5cb 100644 (file)
@@ -38,23 +38,35 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
        int error = mlt_frame_get_image( this, image, format, width, height, 1 );
 
        // Only process if we have no error and a valid colour space
-       if ( error == 0 && *format == mlt_image_yuv422 )
+       if ( error == 0 && *image && *format == mlt_image_yuv422 )
        {
                // We modify the whole image
                uint8_t *p = *image;
-               uint8_t *q = *image + *height * *width * 2;
+               int h = *height;
+               int uneven = *width % 2;
+               int w = ( *width - uneven ) / 2;
+               int t;
 
                // Get u and v values
                int u = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "u" );
                int v = mlt_properties_get_int( MLT_FILTER_PROPERTIES( filter ), "v" );
 
                // Loop through image
-               while ( p != q )
+               while( h -- )
                {
-                       p ++;
-                       *p ++ = u;
-                       p ++;
-                       *p ++ = v;
+                       t = w;
+                       while( t -- )
+                       {
+                               p ++;
+                               *p ++ = u;
+                               p ++;
+                               *p ++ = v;
+                       }
+                       if ( uneven )
+                       {
+                               p ++;
+                               *p ++ = u;
+                       }
                }
        }