diff options
| author | Carl Hetherington <cth@carlh.net> | 2023-09-04 00:48:10 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2023-10-18 12:53:58 +0200 |
| commit | 353ed18e817980eaa3afac6cf5d26b1f187f8803 (patch) | |
| tree | 745724138ac1552256a5f55a0d029f978efe249e | |
| parent | 621926b6bfc15b6bb0d87c03b00bf831b46e7b14 (diff) | |
Add rgb_to_xyz for packed int16_t.v1.8.87
Adapted from a patch from Aaron Boxer for grok support.
| -rw-r--r-- | src/rgb_xyz.cc | 21 | ||||
| -rw-r--r-- | src/rgb_xyz.h | 16 |
2 files changed, 32 insertions, 5 deletions
diff --git a/src/rgb_xyz.cc b/src/rgb_xyz.cc index 49f9e905..e6c5105d 100644 --- a/src/rgb_xyz.cc +++ b/src/rgb_xyz.cc @@ -266,14 +266,13 @@ dcp::make_inverse_gamma_lut(shared_ptr<const TransferFunction> fn) } - -static +template <class T> void rgb_to_xyz_internal( uint8_t const* rgb, - int*& xyz_x, - int*& xyz_y, - int*& xyz_z, + T*& xyz_x, + T*& xyz_y, + T*& xyz_z, dcp::Size size, int stride, ColourConversion const& conversion, @@ -357,3 +356,15 @@ dcp::rgb_to_xyz ( } +void +dcp::rgb_to_xyz ( + uint8_t const * rgb, + uint16_t* dst, + dcp::Size size, + int stride, + ColourConversion const & conversion, + optional<NoteHandler> note + ) +{ + rgb_to_xyz_internal(rgb, dst, dst, dst, size, stride, conversion, note); +} diff --git a/src/rgb_xyz.h b/src/rgb_xyz.h index d6fb4d35..22e1396d 100644 --- a/src/rgb_xyz.h +++ b/src/rgb_xyz.h @@ -94,6 +94,22 @@ extern void xyz_to_rgb ( extern PiecewiseLUT2 make_inverse_gamma_lut(std::shared_ptr<const TransferFunction> fn); +/** @param rgb RGB data; packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, + * with the 2-byte value for each R/G/B component stored as + * little-endian; i.e. AV_PIX_FMT_RGB48LE. + * @param dst Buffer to fill with packed 16-bit XYZ data, i.e. first + * 16-bit word is X, second is Y etc. + * @param size size of RGB image in pixels. + * @param size stride of RGB data in pixels. + */ +extern void rgb_to_xyz ( + uint8_t const * rgb, + uint16_t* dst, + dcp::Size size, + int stride, + ColourConversion const & conversion, + boost::optional<NoteHandler> note = boost::optional<NoteHandler>() + ); /** @param rgb RGB data; packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, * with the 2-byte value for each R/G/B component stored as |
