int convert_colorspace_core()

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;
}