diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-11-17 00:00:50 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2020-11-17 09:59:30 +0100 |
| commit | 27c0e43d75218b926068fff3d6d1364b476e56ff (patch) | |
| tree | 47328853ebd6dae4859d67fd0eac0051dd1f5f4e /test | |
| parent | 451e5465bbd10827dafe76b35704102e589c0980 (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')
| m--------- | test/data | 0 | ||||
| -rw-r--r-- | test/image_test.cc | 26 |
2 files changed, 26 insertions, 0 deletions
diff --git a/test/data b/test/data -Subproject 054ce8c174147046d343cf1972e4e1405745ad8 +Subproject 3b2a8c56dff15050a9eca576214399ef4a5abc0 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")); |
