summaryrefslogtreecommitdiff
path: root/test
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 00:16:58 +0100
commit17959746895a04bd20cc20cd8bdde91d71570b53 (patch)
tree20863137583aa9d62a059f9c386be533dcf5eac5 /test
parent40339285d62d136c4f87c8c7e030ff4f2bdb55b9 (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/data0
-rw-r--r--test/image_test.cc28
2 files changed, 28 insertions, 0 deletions
diff --git a/test/data b/test/data
-Subproject afc23969020af54cfb5e6e2f368ca7d395ae428
+Subproject 30022e624852127f464933f5008f8ac6226d831
diff --git a/test/image_test.cc b/test/image_test.cc
index 2f2c9a9b7..0aa450321 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"
@@ -325,6 +326,33 @@ BOOST_AUTO_TEST_CASE (crop_scale_window_test6)
check_image("test/data/crop_scale_window_test6.png", "build/test/crop_scale_window_test6.png", 35000);
}
+
+/** 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", VIDEO_RANGE_FULL));
+ shared_ptr<Image> yuv = proxy->image().image->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,
+ VIDEO_RANGE_VIDEO,
+ AV_PIX_FMT_RGB24,
+ VIDEO_RANGE_VIDEO,
+ true,
+ false
+ );
+ path file = String::compose("crop_scale_window_test7-%1.png", left_crop);
+ write_image(cropped, path("build") / "test" / file);
+ 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", VIDEO_RANGE_FULL));