int convert_colorspace_core()

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