diff options
| author | Carl Hetherington <cth@carlh.net> | 2019-11-04 16:38:14 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2019-11-04 16:38:14 +0100 |
| commit | 7b0372776ac4da6a8e4ff29f41a4f08b9b4de506 (patch) | |
| tree | 18306caff0a8c2ded2669d27cd2c179fc56869fd /test/image_test.cc | |
| parent | 25d968fdcf1abada4bd7bbcb8c72eeebda73b134 (diff) | |
Fix incorrect images when cropping without stretch.
Always overallocate images so that Image::crop_scale_window is always
safe from over-reading buffers. Relates to #1654 and probably #1653.
Diffstat (limited to 'test/image_test.cc')
| -rw-r--r-- | test/image_test.cc | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/test/image_test.cc b/test/image_test.cc index 8378207cf..e5c95ea2d 100644 --- a/test/image_test.cc +++ b/test/image_test.cc @@ -270,12 +270,43 @@ BOOST_AUTO_TEST_CASE (crop_scale_window_test) /** Special cases of Image::crop_scale_window which triggered some valgrind warnings */ BOOST_AUTO_TEST_CASE (crop_scale_window_test2) { - /* This 2048 does the same as J2KImageProxy does when it makes an image */ - shared_ptr<Image> image (new Image(AV_PIX_FMT_XYZ12LE, dcp::Size(2048, 858), true, 2048)); + shared_ptr<Image> image (new Image(AV_PIX_FMT_XYZ12LE, dcp::Size(2048, 858), true)); image->crop_scale_window (Crop(279, 0, 0, 0), dcp::Size(1069, 448), dcp::Size(1069, 578), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_RGB24, false, false); image->crop_scale_window (Crop(2048, 0, 0, 0), dcp::Size(1069, 448), dcp::Size(1069, 578), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_RGB24, false, false); } +BOOST_AUTO_TEST_CASE (crop_scale_window_test3) +{ + shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png")); + shared_ptr<Image> xyz = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, true, false); + shared_ptr<Image> cropped = xyz->crop_scale_window(Crop(512, 0, 0, 0), dcp::Size(1486, 1080), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_RGB24, false, false); + write_image(cropped, "build/test/crop_scale_window_test3.png", "RGB", MagickCore::CharPixel); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test4) +{ + shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png")); + shared_ptr<Image> xyz = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, true, false); + shared_ptr<Image> cropped = xyz->crop_scale_window(Crop(512, 0, 0, 0), dcp::Size(1486, 1080), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_XYZ12LE, false, false); + write_image(cropped, "build/test/crop_scale_window_test4.png", "RGB", MagickCore::ShortPixel); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test5) +{ + shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png")); + shared_ptr<Image> xyz = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_XYZ12LE, true, false); + shared_ptr<Image> cropped = xyz->crop_scale_window(Crop(512, 0, 0, 0), dcp::Size(1486, 1080), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_RGB24, false, false); + write_image(cropped, "build/test/crop_scale_window_test5.png", "RGB", MagickCore::CharPixel); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test6) +{ + shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png")); + shared_ptr<Image> xyz = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_XYZ12LE, true, false); + shared_ptr<Image> cropped = xyz->crop_scale_window(Crop(512, 0, 0, 0), dcp::Size(1486, 1080), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_XYZ12LE, false, false); + write_image(cropped, "build/test/crop_scale_window_test6.png", "RGB", MagickCore::ShortPixel); +} + BOOST_AUTO_TEST_CASE (as_png_test) { shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/3d_test/000001.png")); |
