RGB/RGBA to NV12 Color Conversion

Converts an image from RGB or RGBA format to NV12 format.


This function can operate with ROI (see Image Regions of Interest).

This function performs conversion from gamma-corrected RGB or RGBA image to NV12 image using formulas:

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 interleaved. Two plane Y’Cb’Cr’ image with 4:2:0 sampling and interleaved Cb and Cr components in respected order is also known as NV12 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.




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::nv12, DstDataT, DstAllocatorT> &dst, const convert_spec<DstDataT> &spec = {}, const std::vector<sycl::event> &dependencies = {})

Function for RGB or RGBA to NV12 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

  • queue – SYCL queue object

  • src – Source image object

  • dst – Destination image object

  • spec – Specification for convert function

  • dependencies – SYCL event dependencies


SYCL event

Supported values for ComputeT:



Supported values for SrcFormat:




See Parameters of Color Conversion (spec).


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.

invalid_argument exception

Indicates an error when ROI sizes of the source image and the destination image are not equal.

invalid_argument exception

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 NV12 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 NV12 image data (usm_image)
image<formats::nv12, std::uint8_t> nv12_image{ src_size, usm_allocator };

(void)convert(queue, src_image, nv12_image);