Use I420ToRGB24Matrix() in reformat_libyuv.c As suggested in https://crbug.com/libyuv/936
diff --git a/src/reformat_libyuv.c b/src/reformat_libyuv.c index 9fd91a0..7e42d80 100644 --- a/src/reformat_libyuv.c +++ b/src/reformat_libyuv.c
@@ -239,14 +239,52 @@ // // libavif format libyuv Func UV matrix (and UV argument ordering) // -------------------- ------------- ------------------------------------ - // AVIF_RGB_FORMAT_RGB n/a n/a - // AVIF_RGB_FORMAT_BGR n/a n/a + // AVIF_RGB_FORMAT_RGB *ToRGB24Matrix matrixYVU + // AVIF_RGB_FORMAT_BGR *ToRGB24Matrix matrixYUV // AVIF_RGB_FORMAT_BGRA *ToARGBMatrix matrixYUV // AVIF_RGB_FORMAT_RGBA *ToARGBMatrix matrixYVU // AVIF_RGB_FORMAT_ABGR *ToRGBAMatrix matrixYUV // AVIF_RGB_FORMAT_ARGB *ToRGBAMatrix matrixYVU - if (rgb->format == AVIF_RGB_FORMAT_BGRA) { + if (rgb->format == AVIF_RGB_FORMAT_RGB) { + // AVIF_RGB_FORMAT_RGB *ToRGB24Matrix matrixYVU + + if (image->yuvFormat == AVIF_PIXEL_FORMAT_YUV420) { + if (I420ToRGB24Matrix(image->yuvPlanes[AVIF_CHAN_Y], + image->yuvRowBytes[AVIF_CHAN_Y], + image->yuvPlanes[AVIF_CHAN_V], + image->yuvRowBytes[AVIF_CHAN_V], + image->yuvPlanes[AVIF_CHAN_U], + image->yuvRowBytes[AVIF_CHAN_U], + rgb->pixels, + rgb->rowBytes, + matrixYVU, + image->width, + image->height) != 0) { + return AVIF_RESULT_REFORMAT_FAILED; + } + return AVIF_RESULT_OK; + } + } else if (rgb->format == AVIF_RGB_FORMAT_BGR) { + // AVIF_RGB_FORMAT_BGR *ToRGB24Matrix matrixYUV + + if (image->yuvFormat == AVIF_PIXEL_FORMAT_YUV420) { + if (I420ToRGB24Matrix(image->yuvPlanes[AVIF_CHAN_Y], + image->yuvRowBytes[AVIF_CHAN_Y], + image->yuvPlanes[AVIF_CHAN_U], + image->yuvRowBytes[AVIF_CHAN_U], + image->yuvPlanes[AVIF_CHAN_V], + image->yuvRowBytes[AVIF_CHAN_V], + rgb->pixels, + rgb->rowBytes, + matrixYUV, + image->width, + image->height) != 0) { + return AVIF_RESULT_REFORMAT_FAILED; + } + return AVIF_RESULT_OK; + } + } else if (rgb->format == AVIF_RGB_FORMAT_BGRA) { // AVIF_RGB_FORMAT_BGRA *ToARGBMatrix matrixYUV if (image->yuvFormat == AVIF_PIXEL_FORMAT_YUV444) {