summaryrefslogtreecommitdiff
path: root/test/image_test.cc
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2020-11-17 00:00:50 +0100
committerCarl Hetherington <cth@carlh.net>2020-11-17 09:59:30 +0100
commit27c0e43d75218b926068fff3d6d1364b476e56ff (patch)
tree47328853ebd6dae4859d67fd0eac0051dd1f5f4e /test/image_test.cc
parent451e5465bbd10827dafe76b35704102e589c0980 (diff)
Fix cropping of subsampled images.
The calculations for how to crop subsampled components of YUV images were wrong, causing strange effects like misregistration of colour components in cropped images. Should fix #1872.
Diffstat (limited to 'test/image_test.cc')
-rw-r--r--test/image_test.cc26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/image_test.cc b/test/image_test.cc
index 3c89d5da7..9fe793d70 100644
--- a/test/image_test.cc
+++ b/test/image_test.cc
@@ -24,6 +24,7 @@
* @see test/make_black_test.cc, test/pixel_formats_test.cc
*/
+#include "lib/compose.hpp"
#include "lib/image.h"
#include "lib/ffmpeg_image_proxy.h"
#include "test.h"
@@ -307,6 +308,31 @@ BOOST_AUTO_TEST_CASE (crop_scale_window_test6)
write_image(cropped, "build/test/crop_scale_window_test6.png", "RGB", MagickCore::ShortPixel);
}
+
+/** Test some small crops with an image that shows up errors in registration of the YUV planes (#1872) */
+BOOST_AUTO_TEST_CASE (crop_scale_window_test7)
+{
+ using namespace boost::filesystem;
+ for (int left_crop = 0; left_crop < 8; ++left_crop) {
+ shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/rgb_grey_testcard.png"));
+ shared_ptr<Image> yuv = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_YUV420P, true, false);
+ int rounded = left_crop - (left_crop % 2);
+ shared_ptr<Image> cropped = yuv->crop_scale_window(
+ Crop(left_crop, 0, 0, 0),
+ dcp::Size(1998 - rounded, 1080),
+ dcp::Size(1998 - rounded, 1080),
+ dcp::YUV_TO_RGB_REC709,
+ AV_PIX_FMT_RGB24,
+ true,
+ false
+ );
+ path file = String::compose("crop_scale_window_test7-%1.png", left_crop);
+ write_image(cropped, path("build") / "test" / file, "RGB");
+ check_image(path("test") / "data" / file, path("build") / "test" / file, 10);
+ }
+}
+
+
BOOST_AUTO_TEST_CASE (as_png_test)
{
shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/3d_test/000001.png"));