summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2017-03-30 23:08:54 +0100
committerCarl Hetherington <cth@carlh.net>2017-03-30 23:08:54 +0100
commitb0b10b50e5a9a21e54459369b9e6eba2b7dd44a3 (patch)
tree202ecf605396db022c8f608ed87cf8e0c7be59c3
parent47c65b4db31a821c4c0934d0dcc88970423980c3 (diff)
Add stride parameter to dcp::xyz_to_rgba.
-rw-r--r--examples/read_dcp.cc2
-rw-r--r--src/rgb_xyz.cc6
-rw-r--r--src/rgb_xyz.h3
-rw-r--r--test/decryption_test.cc2
-rw-r--r--test/round_trip_test.cc4
5 files changed, 9 insertions, 8 deletions
diff --git a/examples/read_dcp.cc b/examples/read_dcp.cc
index a851f0bb..5b44fb51 100644
--- a/examples/read_dcp.cc
+++ b/examples/read_dcp.cc
@@ -94,7 +94,7 @@ main ()
/* Convert to ARGB */
boost::scoped_array<uint8_t> rgba (new uint8_t[picture_image_xyz->size().width * picture_image_xyz->size().height * 4]);
- dcp::xyz_to_rgba (picture_image_xyz, dcp::ColourConversion::srgb_to_xyz(), rgba.get ());
+ dcp::xyz_to_rgba (picture_image_xyz, dcp::ColourConversion::srgb_to_xyz(), rgba.get(), picture_image_xyz->size().width * 4);
Magick::Image image (picture_image_xyz->size().width, picture_image_xyz->size().height, "BGRA", Magick::CharPixel, rgba.get ());
image.write ("frame.png");
diff --git a/src/rgb_xyz.cc b/src/rgb_xyz.cc
index 1110accb..b4307756 100644
--- a/src/rgb_xyz.cc
+++ b/src/rgb_xyz.cc
@@ -67,7 +67,8 @@ void
dcp::xyz_to_rgba (
boost::shared_ptr<const OpenJPEGImage> xyz_image,
ColourConversion const & conversion,
- uint8_t* argb
+ uint8_t* argb,
+ int stride
)
{
int const max_colour = pow (2, 16) - 1;
@@ -134,8 +135,7 @@ dcp::xyz_to_rgba (
*argb_line++ = 0xff;
}
- /* 4 bytes per pixel */
- argb += width * 4;
+ argb += stride;
}
}
diff --git a/src/rgb_xyz.h b/src/rgb_xyz.h
index 51846083..907869af 100644
--- a/src/rgb_xyz.h
+++ b/src/rgb_xyz.h
@@ -46,7 +46,8 @@ class ColourConversion;
extern void xyz_to_rgba (
boost::shared_ptr<const OpenJPEGImage>,
ColourConversion const & conversion,
- uint8_t* rgba
+ uint8_t* rgba,
+ int stride
);
extern void xyz_to_rgb (
diff --git a/test/decryption_test.cc b/test/decryption_test.cc
index 32ea7cda..49fb3a92 100644
--- a/test/decryption_test.cc
+++ b/test/decryption_test.cc
@@ -52,7 +52,7 @@ get_frame (dcp::DCP const & dcp)
shared_ptr<dcp::OpenJPEGImage> xyz = j2k_frame->xyz_image();
uint8_t* argb = new uint8_t[xyz->size().width * xyz->size().height * 4];
- dcp::xyz_to_rgba (j2k_frame->xyz_image(), dcp::ColourConversion::srgb_to_xyz(), argb);
+ dcp::xyz_to_rgba (j2k_frame->xyz_image(), dcp::ColourConversion::srgb_to_xyz(), argb, xyz->size().width * 4);
return make_pair (argb, xyz->size ());
}
diff --git a/test/round_trip_test.cc b/test/round_trip_test.cc
index e2b90244..396dba67 100644
--- a/test/round_trip_test.cc
+++ b/test/round_trip_test.cc
@@ -112,10 +112,10 @@ BOOST_AUTO_TEST_CASE (round_trip_test)
shared_ptr<dcp::OpenJPEGImage> xyz_B = asset_B->start_read()->get_frame(0)->xyz_image ();
scoped_array<uint8_t> frame_A (new uint8_t[xyz_A->size().width * xyz_A->size().height * 4]);
- dcp::xyz_to_rgba (xyz_A, dcp::ColourConversion::srgb_to_xyz(), frame_A.get());
+ dcp::xyz_to_rgba (xyz_A, dcp::ColourConversion::srgb_to_xyz(), frame_A.get(), xyz_A->size().width * 4);
scoped_array<uint8_t> frame_B (new uint8_t[xyz_B->size().width * xyz_B->size().height * 4]);
- dcp::xyz_to_rgba (xyz_B, dcp::ColourConversion::srgb_to_xyz(), frame_B.get());
+ dcp::xyz_to_rgba (xyz_B, dcp::ColourConversion::srgb_to_xyz(), frame_B.get(), xyz_B->size().width * 4);
BOOST_CHECK_EQUAL (xyz_A->size().width, xyz_B->size().width);
BOOST_CHECK_EQUAL (xyz_A->size().height, xyz_B->size().height);