reformat_libyuv: use RAWToI444/RAWToJ444 if available (#2598) These are available since libyuv 1902 and 1903. Bug: b:345259429
diff --git a/src/reformat_libyuv.c b/src/reformat_libyuv.c index cfd7e29..800b4b6 100644 --- a/src/reformat_libyuv.c +++ b/src/reformat_libyuv.c
@@ -80,6 +80,13 @@ // These defines are used to create a NULL reference to libyuv functions that // did not exist prior to a particular version of libyuv. // Versions prior to 1755 are considered too old and not used (see CMakeLists.txt). +#if LIBYUV_VERSION < 1902 +// RAWToJ444 was added in libyuv version 1902. +// See https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6207845. +// NEON was added afterward, but the version was not increased. +// See https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6220890 +#define RAWToJ444 NULL +#endif #if LIBYUV_VERSION < 1844 // I444ToRGB24Matrix() and I422ToRGB24MatrixFilter() were added in libyuv version 1844. // @@ -217,6 +224,12 @@ height); \ } +#if LIBYUV_VERSION < 1903 +// AVIF_RGB_FORMAT_RGB +// RAWToI444 was added in libyuv version 1903. +// https://chromium-review.googlesource.com/c/libyuv/libyuv/+/6223658 +AVIF_DEFINE_CONVERSION(RAWToI444, RAWToARGB, ARGBToI444, AVIF_PIXEL_FORMAT_YUV444) +#endif #if LIBYUV_VERSION < 1840 // AVIF_RGB_FORMAT_RGBA AVIF_DEFINE_CONVERSION(ABGRToJ422, ABGRToARGB, ARGBToJ422, AVIF_PIXEL_FORMAT_YUV422) @@ -226,7 +239,6 @@ // These are not yet implemented in libyuv so they cannot be guarded by a version check. // The "avif" prefix avoids any redefinition if they are available in libyuv one day. // AVIF_RGB_FORMAT_RGB -AVIF_DEFINE_CONVERSION(avifRAWToI444, RAWToARGB, ARGBToI444, AVIF_PIXEL_FORMAT_YUV444) AVIF_DEFINE_CONVERSION(avifRAWToI422, RAWToARGB, ARGBToI422, AVIF_PIXEL_FORMAT_YUV422) AVIF_DEFINE_CONVERSION(avifRAWToJ422, RAWToARGB, ARGBToJ422, AVIF_PIXEL_FORMAT_YUV422) // AVIF_RGB_FORMAT_RGBA @@ -323,7 +335,7 @@ // AVIF_RANGE_LIMITED { // { NONE, YUV444, YUV422, YUV420, YUV400 } // AVIF_RGB_FORMAT_ - { NULL, avifRAWToI444, avifRAWToI422, RAWToI420, NULL }, // RGB + { NULL, RAWToI444, avifRAWToI422, RAWToI420, NULL }, // RGB { NULL, avifABGRToI444, avifABGRToI422, ABGRToI420, NULL }, // RGBA { NULL, avifBGRAToI444, avifBGRAToI422, BGRAToI420, NULL }, // ARGB { NULL, avifRGB24ToI444, avifRGB24ToI422, RGB24ToI420, NULL }, // BGR @@ -334,7 +346,7 @@ // AVIF_RANGE_FULL { // { NONE, YUV444, YUV422, YUV420, YUV400 } // AVIF_RGB_FORMAT_ - { NULL, NULL, avifRAWToJ422, RAWToJ420, NULL }, // RGB + { NULL, RAWToJ444, avifRAWToJ422, RAWToJ420, NULL }, // RGB { NULL, NULL, ABGRToJ422, ABGRToJ420, NULL }, // RGBA { NULL, NULL, avifBGRAToJ422, avifBGRAToJ420, NULL }, // ARGB { NULL, NULL, avifRGB24ToJ422, RGB24ToJ420, NULL }, // BGR
diff --git a/tests/gtest/avifgainmaptest.cc b/tests/gtest/avifgainmaptest.cc index c076528..8abd226 100644 --- a/tests/gtest/avifgainmaptest.cc +++ b/tests/gtest/avifgainmaptest.cc
@@ -1097,7 +1097,7 @@ /*out_depth=*/8, /*out_transfer=*/AVIF_TRANSFER_CHARACTERISTICS_SRGB, /*out_rgb_format=*/AVIF_RGB_FORMAT_RGB, - /*reference=*/"seine_sdr_gainmap_srgb.avif", /*min_psnr=*/60.0f, + /*reference=*/"seine_sdr_gainmap_srgb.avif", /*min_psnr=*/53.5f, /*max_psnr=*/80.0f), // Same as above, outputting to RGBA. @@ -1221,7 +1221,7 @@ /*out_depth=*/image->depth, /*out_transfer_characteristics=*/image->transferCharacteristics, AVIF_RGB_FORMAT_RGB, /*reference_image=*/image.get(), - /*min_psnr=*/60, /*max_psnr=*/100); + /*min_psnr=*/53.5, /*max_psnr=*/100); } } @@ -1410,7 +1410,7 @@ /*image2_name=*/"seine_hdr_gainmap_srgb.avif", /*downscaling=*/1, /*gain_map_depth=*/10, /*gain_map_format=*/AVIF_PIXEL_FORMAT_YUV444, - /*min_psnr=*/55.0f, /*max_psnr=*/80.0f), + /*min_psnr=*/53.25f, /*max_psnr=*/80.0f), // 8 bit gain map, expect a slightly lower PSNR. std::make_tuple(/*image1_name=*/"seine_sdr_gainmap_srgb.avif", /*image2_name=*/"seine_hdr_gainmap_srgb.avif", @@ -1459,7 +1459,7 @@ /*image2_name=*/"colors_hdr_rec2020.avif", /*downscaling=*/1, /*gain_map_depth=*/10, /*gain_map_format=*/AVIF_PIXEL_FORMAT_YUV444, - /*min_psnr=*/55.0f, /*max_psnr=*/100.0f), + /*min_psnr=*/52.5f, /*max_psnr=*/100.0f), // The PSNR is very high because there are essentially the same image, // simply expresed in different colorspaces. std::make_tuple(/*image1_name=*/"colors_hdr_rec2020.avif", @@ -1472,7 +1472,7 @@ /*image2_name=*/"colors_wcg_hdr_rec2020.avif", /*downscaling=*/1, /*gain_map_depth=*/10, /*gain_map_format=*/AVIF_PIXEL_FORMAT_YUV444, - /*min_psnr=*/55.0f, /*max_psnr=*/80.0f))); + /*min_psnr=*/52.5f, /*max_psnr=*/80.0f))); TEST(GainMapTest, CreateGainMapConstantFactor) { // Used only to initialize rgb images.