sws_freeContext (scale_context);
- if (corrected_crop != Crop() && cropped_size == inter_size) {
- /* We are cropping without any scaling or pixel format conversion, so FFmpeg may have left some
- data behind in our image. Clear it out. It may get to the point where we should just stop
- trying to be clever with cropping.
- */
- out->make_part_black (corner.x + cropped_size.width, out_size.width - cropped_size.width);
- }
+ /* There are some cases where there will be unwanted image data left in the image at this point:
+ *
+ * 1. When we are cropping without any scaling or pixel format conversion.
+ * 2. When we are scaling to certain sizes and placing the result into a larger
+ * black frame.
+ *
+ * Clear out the left hand side of the image to take care of that.
+ */
+ out->make_part_black (corner.x + inter_size.width, (out_size.width - inter_size.width) / 2);
if (
video_range == VideoRange::VIDEO &&
}
+BOOST_AUTO_TEST_CASE (crop_scale_window_test8)
+{
+ using namespace boost::filesystem;
+
+ auto image = make_shared<Image>(AV_PIX_FMT_YUV420P, dcp::Size(800, 600), Image::Alignment::PADDED);
+ memset(image->data()[0], 41, image->stride()[0] * 600);
+ memset(image->data()[1], 240, image->stride()[1] * 300);
+ memset(image->data()[2], 41, image->stride()[2] * 300);
+ auto scaled = image->crop_scale_window(
+ Crop(), dcp::Size(1435, 1080), dcp::Size(1998, 1080), dcp::YUVToRGB::REC709, VideoRange::FULL, AV_PIX_FMT_YUV420P, VideoRange::FULL, Image::Alignment::PADDED, false
+ );
+ auto file = "crop_scale_window_test8.png";
+ write_image(scaled->convert_pixel_format(dcp::YUVToRGB::REC709, AV_PIX_FMT_RGB24, Image::Alignment::COMPACT, false), path("build") / "test" / file);
+ check_image(path("test") / "data" / file, path("build") / "test" / file, 10);
+}
+
+
BOOST_AUTO_TEST_CASE (as_png_test)
{
auto proxy = make_shared<FFmpegImageProxy>("test/data/3d_test/000001.png");