X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fimage_test.cc;h=e2b1d71c7d0899a8a7e60b4a242e0632f7706e62;hb=69f1be3e258140a4835d805596ea87f2a32e2083;hp=8a7feb1267fa0761e46457e188ea9cdd68de2e62;hpb=11efa93e15b694b8ea6f0a2bc68c87503cc570bb;p=dcpomatic.git diff --git a/test/image_test.cc b/test/image_test.cc index 8a7feb126..e2b1d71c7 100644 --- a/test/image_test.cc +++ b/test/image_test.cc @@ -137,8 +137,8 @@ BOOST_AUTO_TEST_CASE (compact_image_test) void alpha_blend_test_one (AVPixelFormat format, string suffix) { - shared_ptr proxy (new FFmpegImageProxy (private_data / "prophet_frame.tiff")); - shared_ptr raw = proxy->image().first; + shared_ptr proxy (new FFmpegImageProxy (TestPaths::private_data() / "prophet_frame.tiff", VIDEO_RANGE_FULL)); + shared_ptr raw = proxy->image().image; shared_ptr background = raw->convert_pixel_format (dcp::YUV_TO_RGB_REC709, format, true, false); shared_ptr overlay (new Image (AV_PIX_FMT_BGRA, dcp::Size(431, 891), true)); @@ -172,8 +172,8 @@ alpha_blend_test_one (AVPixelFormat format, string suffix) shared_ptr save = background->convert_pixel_format (dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, false, false); - write_image (save, "build/test/image_test_" + suffix + ".png", "RGB"); - check_image ("build/test/image_test_" + suffix + ".png", private_data / ("image_test_" + suffix + ".png")); + write_image (save, "build/test/image_test_" + suffix + ".png"); + check_image ("build/test/image_test_" + suffix + ".png", TestPaths::private_data() / ("image_test_" + suffix + ".png")); } /** Test Image::alpha_blend */ @@ -259,18 +259,62 @@ BOOST_AUTO_TEST_CASE (merge_test2) /** Test Image::crop_scale_window with YUV420P and some windowing */ BOOST_AUTO_TEST_CASE (crop_scale_window_test) { - shared_ptr proxy(new FFmpegImageProxy("test/data/flat_red.png")); - shared_ptr raw = proxy->image().first; - shared_ptr out = raw->crop_scale_window(Crop(), dcp::Size(1998, 836), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_YUV420P, true, false); + shared_ptr proxy(new FFmpegImageProxy("test/data/flat_red.png", VIDEO_RANGE_FULL)); + shared_ptr raw = proxy->image().image; + shared_ptr out = raw->crop_scale_window(Crop(), dcp::Size(1998, 836), dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, VIDEO_RANGE_FULL, AV_PIX_FMT_YUV420P, true, false); shared_ptr save = out->scale(dcp::Size(1998, 1080), dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, false, false); - write_image(save, "build/test/crop_scale_window_test.png", "RGB"); + write_image(save, "build/test/crop_scale_window_test.png"); check_image("test/data/crop_scale_window_test.png", "build/test/crop_scale_window_test.png"); } +/** Special cases of Image::crop_scale_window which triggered some valgrind warnings */ +BOOST_AUTO_TEST_CASE (crop_scale_window_test2) +{ + shared_ptr 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 proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png", VIDEO_RANGE_FULL)); + shared_ptr xyz = proxy->image().image->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, true, false); + shared_ptr 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"); + check_image("test/data/crop_scale_window_test3.png", "build/test/crop_scale_window_test3.png"); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test4) +{ + shared_ptr proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png", VIDEO_RANGE_FULL)); + shared_ptr xyz = proxy->image().image->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGB24, true, false); + shared_ptr 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"); + check_image("test/data/crop_scale_window_test4.png", "build/test/crop_scale_window_test4.png", 35000); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test5) +{ + shared_ptr proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png", VIDEO_RANGE_FULL)); + shared_ptr xyz = proxy->image().image->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_XYZ12LE, true, false); + shared_ptr 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"); + check_image("test/data/crop_scale_window_test5.png", "build/test/crop_scale_window_test5.png"); +} + +BOOST_AUTO_TEST_CASE (crop_scale_window_test6) +{ + shared_ptr proxy(new FFmpegImageProxy("test/data/player_seek_test_0.png", VIDEO_RANGE_FULL)); + shared_ptr xyz = proxy->image().image->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_XYZ12LE, true, false); + shared_ptr 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"); + check_image("test/data/crop_scale_window_test6.png", "build/test/crop_scale_window_test6.png", 35000); +} + BOOST_AUTO_TEST_CASE (as_png_test) { - shared_ptr proxy(new FFmpegImageProxy("test/data/3d_test/000001.png")); - shared_ptr image_rgb = proxy->image().first; + shared_ptr proxy(new FFmpegImageProxy("test/data/3d_test/000001.png", VIDEO_RANGE_FULL)); + shared_ptr image_rgb = proxy->image().image; shared_ptr image_bgr = image_rgb->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_BGRA, true, false); image_rgb->as_png().write ("build/test/as_png_rgb.png"); image_bgr->as_png().write ("build/test/as_png_bgr.png"); @@ -295,8 +339,8 @@ fade_test_format_black (AVPixelFormat f, string name) static void fade_test_format_red (AVPixelFormat f, float amount, string name) { - shared_ptr proxy(new FFmpegImageProxy("test/data/flat_red.png")); - shared_ptr red = proxy->image().first->convert_pixel_format(dcp::YUV_TO_RGB_REC709, f, true, false); + shared_ptr proxy(new FFmpegImageProxy("test/data/flat_red.png", VIDEO_RANGE_FULL)); + shared_ptr red = proxy->image().image->convert_pixel_format(dcp::YUV_TO_RGB_REC709, f, true, false); red->fade (amount); string const filename = "fade_test_red_" + name + ".png"; red->convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGBA, true, false)->as_png().write("build/test/" + filename);