summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2019-03-12 23:16:03 +0000
committerCarl Hetherington <cth@carlh.net>2019-03-12 23:16:03 +0000
commitc984f807703fb113c3e53d9a61d38e1cc83bf196 (patch)
tree479331e9fae5adc188db3a52cc06023030f8ce3e
parent2901ba31aade56fa60613441dda9e49b3b035409 (diff)
Fix R/B swap with as_png(); support as_png() for any pixel format.v2.13.129
-rw-r--r--src/lib/image.cc4
-rw-r--r--test/image_test.cc12
2 files changed, 15 insertions, 1 deletions
diff --git a/src/lib/image.cc b/src/lib/image.cc
index f005e3f63..95cb93b65 100644
--- a/src/lib/image.cc
+++ b/src/lib/image.cc
@@ -1248,7 +1248,9 @@ Image::as_png () const
{
DCPOMATIC_ASSERT (bytes_per_pixel(0) == 4);
DCPOMATIC_ASSERT (planes() == 1);
- DCPOMATIC_ASSERT (pixel_format() == AV_PIX_FMT_BGRA);
+ if (pixel_format() != AV_PIX_FMT_RGBA) {
+ return convert_pixel_format(dcp::YUV_TO_RGB_REC709, AV_PIX_FMT_RGBA, true, false)->as_png();
+ }
/* error handling? */
png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, reinterpret_cast<void*>(const_cast<Image*>(this)), png_error_fn, 0);
diff --git a/test/image_test.cc b/test/image_test.cc
index 9d07f8a0a..2bbe9d14b 100644
--- a/test/image_test.cc
+++ b/test/image_test.cc
@@ -266,3 +266,15 @@ BOOST_AUTO_TEST_CASE (crop_scale_window_test)
write_image(save, "build/test/crop_scale_window_test.png", "RGB");
check_image("test/data/crop_scale_window_test.png", "build/test/crop_scale_window_test.png");
}
+
+BOOST_AUTO_TEST_CASE (as_png_test)
+{
+ shared_ptr<FFmpegImageProxy> proxy(new FFmpegImageProxy("test/data/3d_test/000001.png"));
+ shared_ptr<Image> image_rgb = proxy->image().first;
+ shared_ptr<Image> 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");
+
+ check_image ("test/data/3d_test/000001.png", "build/test/as_png_rgb.png");
+ check_image ("test/data/3d_test/000001.png", "build/test/as_png_bgr.png");
+}