in libheif/color-conversion/yuv2rgb.cc [803:930]
int convert_colorspace_core<uint16_t> (const bool has_alpha,
const heif_chroma in_chroma,
const uint16_t* in_y,
const int in_y_stride,
const uint16_t* in_cb,
const int in_cb_stride,
const uint16_t* in_cr,
const int in_cr_stride,
const uint16_t* in_a,
const int in_a_stride,
const struct YuvConstants * matrixYUV,
const struct YuvConstants * matrixYVU,
const int width,
const int height,
uint8_t* out_p,
int& out_p_stride
)
{
int hit = 0;
// AVIF_RGB_FORMAT_RGB *ToRGB24Matrix matrixYVU
if(has_alpha)
{
if (in_chroma == heif_chroma_444 ) {
if (libyuv::I410AlphaToABGRMatrix(in_y,
in_y_stride/2,
in_cb,
in_cb_stride/2,
in_cr,
in_cr_stride/2,
in_a,
in_a_stride/2,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_422 ) {
if (libyuv::I210AlphaToABGRMatrix(in_y,
in_y_stride/2,
in_cb,
in_cb_stride/2,
in_cr,
in_cr_stride/2,
in_a,
in_a_stride/2,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_420) {
if (libyuv::I010AlphaToABGRMatrix(in_y,
in_y_stride/2,
in_cb,
in_cb_stride/2,
in_cr,
in_cr_stride/2,
in_a,
in_a_stride/2,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
}
else
{
if (in_chroma == heif_chroma_444 ) {
if (libyuv::I410ToARGBMatrix(in_y,
in_y_stride/2,
in_cr,
in_cr_stride/2,
in_cb,
in_cb_stride/2,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_422 ) {
if (libyuv::I210ToARGBMatrix(in_y,
in_y_stride/2,
in_cr,
in_cr_stride/2,
in_cb,
in_cb_stride/2,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_420) {
if (libyuv::I010ToARGBMatrix(in_y,
in_y_stride/2,
in_cr,
in_cr_stride/2,
in_cb,
in_cb_stride/2,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
}
return hit;
}