Attempt at an aspect ratio clean up
[melted] / src / modules / core / filter_resize.c
index 7a1f5dd..627d9e0 100644 (file)
@@ -62,6 +62,8 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
                double input_ar = mlt_frame_get_aspect_ratio( this ) * real_width / real_height;
                double output_ar = mlt_properties_get_double( properties, "consumer_aspect_ratio" ) * owidth / oheight;
                
+               //fprintf( stderr, "normalised %dx%d output %dx%d %f %f\n", normalised_width, normalised_height, owidth, oheight, ( float )output_ar, ( float )mlt_properties_get_double( properties, "consumer_aspect_ratio" ) * owidth / oheight );
+
                // Optimised for the input_ar > output_ar case (e.g. widescreen on standard)
                int scaled_width = input_ar / output_ar * normalised_width + 0.5;
                int scaled_height = normalised_height;
@@ -78,7 +80,7 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
                oheight = scaled_height * oheight / normalised_height;
 
                // Tell frame we have conformed the aspect to the consumer
-               mlt_frame_set_aspect_ratio( this, output_ar );
+               mlt_frame_set_aspect_ratio( this, mlt_properties_get_double( properties, "consumer_aspect_ratio" ) );
        }
 
        // Now pass on the calculations down the line
@@ -104,10 +106,13 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
                        // Keep the original image around to be destroyed on frame close
                        mlt_properties_rename( properties, "image", "original_image" );
 
+                       // Duplicate the last line in the field to avoid artifact
+                       memcpy( image + oheight * owidth * 2, image + oheight * owidth * 2 - owidth * 4, owidth * 2 );
+
                        // Offset the image pointer by one line
                        image += owidth * 2;
                        size -= owidth * 2;
-
+                       
                        // Set the new image pointer with no destructor
                        mlt_properties_set_data( properties, "image", image, size, NULL, NULL );
 
@@ -130,7 +135,7 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
                }
        }
 
-       return 0;
+       return error;
 }
 
 /** Filter processing.