From d881836379172f4072ed81ea074f46b3a363a681 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 26 Jul 2022 15:22:54 +0200 Subject: [PATCH] Fix lines down the right-hand-side of exports in some cases. --- src/lib/image.cc | 16 +++++++++------- test/data | 2 +- test/image_test.cc | 17 +++++++++++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/lib/image.cc b/src/lib/image.cc index f86c105d4..629fc0a64 100644 --- a/src/lib/image.cc +++ b/src/lib/image.cc @@ -292,13 +292,15 @@ Image::crop_scale_window ( 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 && diff --git a/test/data b/test/data index 6d4d01a10..a92011d3c 160000 --- a/test/data +++ b/test/data @@ -1 +1 @@ -Subproject commit 6d4d01a10bc14f3a4a0db5c3e0a4be72176543bf +Subproject commit a92011d3c4ebe0e443b6ea37c749f27c9102c156 diff --git a/test/image_test.cc b/test/image_test.cc index 94b7ba017..c638523a8 100644 --- a/test/image_test.cc +++ b/test/image_test.cc @@ -409,6 +409,23 @@ BOOST_AUTO_TEST_CASE (crop_scale_window_test7) } +BOOST_AUTO_TEST_CASE (crop_scale_window_test8) +{ + using namespace boost::filesystem; + + auto image = make_shared(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("test/data/3d_test/000001.png"); -- 2.30.2