in libheif/color-conversion/yuv2rgb.cc [672:799]
int convert_colorspace_core<uint8_t> (const bool has_alpha,
const heif_chroma in_chroma,
const uint8_t* in_y,
const int in_y_stride,
const uint8_t* in_cb,
const int in_cb_stride,
const uint8_t* in_cr,
const int in_cr_stride,
const uint8_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::I444AlphaToABGRMatrix(in_y,
in_y_stride,
in_cb,
in_cb_stride,
in_cr,
in_cr_stride,
in_a,
in_a_stride,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_422 ) {
if (libyuv::I422AlphaToABGRMatrix(in_y,
in_y_stride,
in_cb,
in_cb_stride,
in_cr,
in_cr_stride,
in_a,
in_a_stride,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_420) {
if (libyuv::I420AlphaToABGRMatrix(in_y,
in_y_stride,
in_cb,
in_cb_stride,
in_cr,
in_cr_stride,
in_a,
in_a_stride,
out_p,
out_p_stride,
matrixY,
width,
height,
0) == 0) {
hit = 1;
}
}
}
else
{
if (in_chroma == heif_chroma_444 ) {
if (libyuv::I444ToARGBMatrix(in_y,
in_y_stride,
in_cr,
in_cr_stride,
in_cb,
in_cb_stride,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_422 ) {
if (libyuv::I422ToARGBMatrix(in_y,
in_y_stride,
in_cr,
in_cr_stride,
in_cb,
in_cb_stride,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
else if(in_chroma == heif_chroma_420) {
if (libyuv::I420ToARGBMatrix(in_y,
in_y_stride,
in_cr,
in_cr_stride,
in_cb,
in_cb_stride,
out_p,
out_p_stride,
matrixYVU,
width,
height) == 0) {
hit = 1;
}
}
}
return hit;
}