RGB/RGBA to I420 Color Conversion¶
Converts an image from RGB or RGBA format to I420 format.
Description
This function can operate with ROI (see Image Regions of Interest).
This function performs conversion from gamma-corrected RGB or RGBA image to I420 image using formulae:
Y' = 0.257 * R' + 0.504 * G' + 0.098 * B' + 16
Cb' = -0.148 * R' - 0.291 * G' + 0.439 * B + 128'
Cr' = 0.439 * R' - 0.368 * G' - 0.071 * B' + 128
Conversion also performs 4:2:0 downsampling for the converted image with Cb and Cr channels being in different planes. Three plane Y’Cb’Cr’ image with 4:2:0 sampling is also known as I420 format. In case of RGBA source image format, alpha channel is ignored and it’s values are lost. Source and destination image width and height must be even.
Headers
oneapi/ipl/convert.hpp
Syntax
-
template<typename ComputeT = float, formats SrcFormat, typename SrcDataT, typename SrcAllocatorT, typename DstDataT, typename DstAllocatorT>
sycl::event oneapi::ipl::convert(sycl::queue &queue, image<SrcFormat, SrcDataT, SrcAllocatorT> &src, image<formats::i420, DstDataT, DstAllocatorT> &dst, const convert_spec<DstDataT> &spec = {}, const std::vector<sycl::event> &dependencies = {})¶ Function for RGB or RGBA to I420 color conversion.
- Template Parameters
ComputeT – The type in which all calculations will be performed
SrcFormat – Source image color format
SrcDataT – Source image data type
SrcAllocatorT – Source image allocator type
DstDataT – Destination image data type
DstAllocatorT – Destination image allocator type
- Parameters
queue – SYCL queue object
src – Source image object
dst – Destination image object
spec – Specification for convert function
dependencies – SYCL event dependencies
- Returns
SYCL event
Supported values for ComputeT:
|
|
Supported values for SrcFormat:
|
|
Parameters
See Parameters of Color Conversion (spec).
Errors
compile-time format check |
Indicates an error when image format is not supported. |
compile-time data type check |
Indicates an error when image data type is not supported. |
compile-time compute data type check |
Indicates an error when compute data type is not supported. |
|
Indicates an error when ROI sizes of the source image and the destination image are not equal. |
|
Indicates an error when one of the pitch values is not divisible by size of component data type in bytes. |
The code example below demonstrates how to use the
oneapi::ipl::convert
for RGBA to I420 conversion:
// Create queue
sycl::queue queue{};
shared_usm_allocator_t usm_allocator{ queue };
// Source rgba image data (image_image)
image<formats::rgba, std::uint8_t> src_image{ src_data_pointer, src_size };
// Destination I420 image data (usm_image)
image<formats::i420, std::uint8_t> i420_image{ src_size, usm_allocator };
(void)convert(queue, src_image, i420_image);