Turn gain map flag on by default. (#2513)
Remove 'EXPERIMENTAL' from its name.
diff --git a/.github/workflows/ci-fuzztest.yml b/.github/workflows/ci-fuzztest.yml
index 02de76d..48f13f8 100644
--- a/.github/workflows/ci-fuzztest.yml
+++ b/.github/workflows/ci-fuzztest.yml
@@ -50,7 +50,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_FUZZTEST=ON
diff --git a/.github/workflows/ci-linux-golden-tests.yml b/.github/workflows/ci-linux-golden-tests.yml
index 7a270d4..c869467 100644
--- a/.github/workflows/ci-linux-golden-tests.yml
+++ b/.github/workflows/ci-linux-golden-tests.yml
@@ -46,7 +46,7 @@
-DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
-DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=LOCAL
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_LIBXML2=LOCAL
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GOLDEN_TESTS=ON
-DAVIF_ENABLE_GTEST=OFF -DAVIF_ENABLE_WERROR=ON
diff --git a/.github/workflows/ci-linux-static-old-local.yml b/.github/workflows/ci-linux-static-old-local.yml
index bca3778..52d03d3 100644
--- a/.github/workflows/ci-linux-static-old-local.yml
+++ b/.github/workflows/ci-linux-static-old-local.yml
@@ -51,7 +51,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_LOCAL_GTEST=ON
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_WERROR=ON
- name: Build libavif (ninja)
diff --git a/.github/workflows/ci-unix-shared-local.yml b/.github/workflows/ci-unix-shared-local.yml
index 2f1ed51..13aba36 100644
--- a/.github/workflows/ci-unix-shared-local.yml
+++ b/.github/workflows/ci-unix-shared-local.yml
@@ -55,7 +55,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_WERROR=ON
diff --git a/.github/workflows/ci-unix-static.yml b/.github/workflows/ci-unix-static.yml
index bd09019..5ed5257 100644
--- a/.github/workflows/ci-unix-static.yml
+++ b/.github/workflows/ci-unix-static.yml
@@ -59,7 +59,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_WERROR=ON
diff --git a/.github/workflows/ci-windows-installed.yml b/.github/workflows/ci-windows-installed.yml
index fd88df2..d0072f0 100644
--- a/.github/workflows/ci-windows-installed.yml
+++ b/.github/workflows/ci-windows-installed.yml
@@ -74,7 +74,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_WERROR=ON $env:AVIF_CMAKE_C_COMPILER $env:AVIF_CMAKE_CXX_COMPILER
diff --git a/.github/workflows/ci-windows-shared-local.yml b/.github/workflows/ci-windows-shared-local.yml
index 08d749d..c827962 100644
--- a/.github/workflows/ci-windows-shared-local.yml
+++ b/.github/workflows/ci-windows-shared-local.yml
@@ -54,7 +54,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_WERROR=ON $env:AVIF_CMAKE_C_COMPILER $env:AVIF_CMAKE_CXX_COMPILER
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
index 9a73211..14fe116 100644
--- a/.github/workflows/ci-windows.yml
+++ b/.github/workflows/ci-windows.yml
@@ -67,7 +67,7 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_ENABLE_GTEST=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
- -DAVIF_ENABLE_EXPERIMENTAL_GAIN_MAP=ON
+ -DAVIF_ENABLE_GAIN_MAP=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_WERROR=ON
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e9ea1ce..298c508 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -37,6 +37,8 @@
avifGainMapMetadataDouble structs.
* Add avif(Un)SignedFraction structs and avifDoubleTo(Un)SignedFraction
utility functions.
+* Turn on the gain map API by default. Rename the compile flag from
+ AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP to AVIF_ENABLE_GAIN_MAP.
## [1.1.1] - 2024-07-30
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b54a208..1623039 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -64,10 +64,11 @@
option(AVIF_ENABLE_WERROR "Treat all compiler warnings as errors" OFF)
-option(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R "Enable experimental YCgCo-R matrix code" OFF)
-option(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
- "Enable experimental gain map code (for HDR images that look good both on HDR and SDR displays)" OFF
+option(AVIF_ENABLE_GAIN_MAP
+ "Enable gain map code (for HDR images that look good both on HDR and SDR displays)" ON
)
+
+option(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R "Enable experimental YCgCo-R matrix code" OFF)
option(AVIF_ENABLE_EXPERIMENTAL_MINI "Enable experimental reduced header" OFF)
option(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM "Enable experimental sample transform code" OFF)
@@ -272,11 +273,11 @@
endif(AVIF_LIBSHARPYUV_ENABLED)
set_local_or_system_option(
- "LIBXML2" "OFF" "Build libxml2 by providing your own copy inside the ext subdir. \
-libxml2 is used when AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is ON"
+ "LIBXML2" "OFF" "Use libxml2. When enabled and AVIF_ENABLE_GAIN_MAP is ON, \
+ allows converting JPEG files with gain maps to AVIF using avifenc"
)
-if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+if(AVIF_ENABLE_GAIN_MAP)
check_avif_option(AVIF_LIBXML2 TARGET LibXml2::LibXml2 PKG_NAME LibXml2)
endif()
# ---------------------------------------------------------------------------------------
@@ -364,8 +365,8 @@
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
endif()
-if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
- add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+if(AVIF_ENABLE_GAIN_MAP)
+ add_compile_definitions(AVIF_ENABLE_GAIN_MAP)
endif()
if(AVIF_ENABLE_EXPERIMENTAL_MINI)
@@ -396,7 +397,7 @@
src/utils.c
src/write.c
)
-if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+if(AVIF_ENABLE_GAIN_MAP)
list(APPEND AVIF_SRCS src/gainmap.c)
endif()
if(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
@@ -584,7 +585,7 @@
message(WARNING "libavif: No decoding library is enabled.")
endif()
-if(AVIF_LIB_USE_CXX OR (AVIF_BUILD_APPS AND AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP) OR (AVIF_BUILD_TESTS AND (AVIF_ENABLE_FUZZTEST
+if(AVIF_LIB_USE_CXX OR (AVIF_BUILD_APPS AND AVIF_ENABLE_GAIN_MAP) OR (AVIF_BUILD_TESTS AND (AVIF_ENABLE_FUZZTEST
OR AVIF_ENABLE_GTEST))
)
enable_language(CXX)
@@ -676,7 +677,7 @@
find_package(JPEG REQUIRED)
endif()
- if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_GAIN_MAP)
if(TARGET LibXml2::LibXml2)
set(AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION TRUE)
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION)
@@ -754,10 +755,8 @@
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
)
endif()
- if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_GAIN_MAP)
include(LocalLibargparse)
- set(AVIF_ENABLE_AVIFGAINMAPUTIL TRUE)
-
set(AVIFGAINMAPUTIL_SRCS
apps/avifgainmaputil/avifgainmaputil.cc
apps/avifgainmaputil/convert_command.cc
diff --git a/apps/avifenc.c b/apps/avifenc.c
index b98820d..367f8a1 100644
--- a/apps/avifenc.c
+++ b/apps/avifenc.c
@@ -58,7 +58,7 @@
avifBool ignoreColorProfile;
// These settings are only relevant when compiled with AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION
- // (which also implies AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP).
+ // (which also implies AVIF_ENABLE_GAIN_MAP).
avifBool qualityGainMapIsConstrained; // true if qualityGainMap explicitly set by the user
int qualityGainMap;
avifBool ignoreGainMap; // ignore any gain map present in the input file.
diff --git a/apps/shared/avifjpeg.h b/apps/shared/avifjpeg.h
index ad2a3f0..9c7d6d3 100644
--- a/apps/shared/avifjpeg.h
+++ b/apps/shared/avifjpeg.h
@@ -15,7 +15,7 @@
// bytes of Exif or XMP metadata will be read or an error returned.
// 'ignoreGainMap' is only relevant for jpeg files that have a gain map
// and only if AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION is ON
-// (requires AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP and libxml2). Otherwise
+// (requires AVIF_ENABLE_GAIN_MAP and libxml2). Otherwise
// it has no effect.
avifBool avifJPEGRead(const char * inputFilename,
avifImage * avif,
diff --git a/apps/shared/avifutil.c b/apps/shared/avifutil.c
index fc36349..7591afd 100644
--- a/apps/shared/avifutil.c
+++ b/apps/shared/avifutil.c
@@ -125,7 +125,7 @@
printf(" * CLLI : %hu, %hu\n", avif->clli.maxCLL, avif->clli.maxPALL);
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
printf(" * Gain map : ");
avifImage * gainMapImage = avif->gainMap ? avif->gainMap->image : NULL;
if (gainMapImage != NULL) {
@@ -161,7 +161,7 @@
} else {
printf("Absent\n");
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
}
void avifImageDump(const avifImage * avif, uint32_t gridCols, uint32_t gridRows, avifProgressiveState progressiveState)
diff --git a/apps/shared/avifutil.h b/apps/shared/avifutil.h
index 734ccf5..f396985 100644
--- a/apps/shared/avifutil.h
+++ b/apps/shared/avifutil.h
@@ -67,7 +67,7 @@
// Returns AVIF_APP_FILE_FORMAT_UNKNOWN in case of error.
// 'ignoreGainMap' is only relevant for jpeg files that have a gain map
// and only if AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION is ON
-// (requires AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP and libxml2). Otherwise
+// (requires AVIF_ENABLE_GAIN_MAP and libxml2). Otherwise
// it has no effect.
avifAppFileFormat avifReadImage(const char * filename,
avifPixelFormat requestedFormat,
diff --git a/include/avif/avif.h b/include/avif/avif.h
index a34db7e..f2bb05c 100644
--- a/include/avif/avif.h
+++ b/include/avif/avif.h
@@ -193,7 +193,7 @@
AVIF_RESULT_CANNOT_CHANGE_SETTING = 27, // a setting that can't change is changed during encoding
AVIF_RESULT_INCOMPATIBLE_IMAGE = 28, // the image is incompatible with already encoded images
AVIF_RESULT_INTERNAL_ERROR = 29, // some invariants have not been satisfied (likely a bug in libavif)
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_RESULT_ENCODE_GAIN_MAP_FAILED = 30,
AVIF_RESULT_DECODE_GAIN_MAP_FAILED = 31,
AVIF_RESULT_INVALID_TONE_MAPPED_IMAGE = 32,
@@ -590,7 +590,7 @@
uint16_t maxPALL;
} avifContentLightLevelInformationBox;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// ---------------------------------------------------------------------------
// avifGainMap
// Gain Maps are a solution for a consistent and adaptive display of HDR images.
@@ -700,7 +700,7 @@
// Frees a gain map, including the 'image' field if non NULL.
AVIF_API void avifGainMapDestroy(avifGainMap * gainMap);
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
// ---------------------------------------------------------------------------
@@ -828,7 +828,7 @@
avifImageItemProperty * properties; // NULL only if numProperties is 0.
size_t numProperties;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Gain map image and metadata. NULL if no gain map is present.
// Owned by the avifImage and gets freed when calling avifImageDestroy().
// gainMap->image->transformFlags is always AVIF_TRANSFORM_NONE.
@@ -840,10 +840,10 @@
AVIF_NODISCARD AVIF_API avifImage * avifImageCreate(uint32_t width, uint32_t height, uint32_t depth, avifPixelFormat yuvFormat);
AVIF_NODISCARD AVIF_API avifImage * avifImageCreateEmpty(void); // helper for making an image to decode into
// Performs a deep copy of an image, including all metadata and planes, and the gain map metadata/planes if present
-// and if AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is defined.
+// and if AVIF_ENABLE_GAIN_MAP is defined.
AVIF_API avifResult avifImageCopy(avifImage * dstImage, const avifImage * srcImage, avifPlanesFlags planes);
// Performs a shallow copy of a rectangular area of an image. 'dstImage' does not own the planes.
-// Ignores the gainMap field (which exists only if AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is defined).
+// Ignores the gainMap field (which exists only if AVIF_ENABLE_GAIN_MAP is defined).
AVIF_API avifResult avifImageSetViewRect(avifImage * dstImage, const avifImage * srcImage, const avifCropRect * rect);
AVIF_API void avifImageDestroy(avifImage * image);
@@ -857,7 +857,7 @@
AVIF_API avifResult avifImageSetMetadataXMP(avifImage * image, const uint8_t * xmp, size_t xmpSize);
// Allocate/free/steal planes. These functions ignore the gainMap field (which exists only if
-// AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is defined).
+// AVIF_ENABLE_GAIN_MAP is defined).
AVIF_API avifResult avifImageAllocatePlanes(avifImage * image, avifPlanesFlags planes); // Ignores any pre-existing planes
AVIF_API void avifImageFreePlanes(avifImage * image, avifPlanesFlags planes); // Ignores already-freed planes
AVIF_API void avifImageStealPlanes(avifImage * dstImage, avifImage * srcImage, avifPlanesFlags planes);
@@ -1199,7 +1199,7 @@
AVIF_IMAGE_CONTENT_NONE = 0,
// Color only or alpha only is not currently supported.
AVIF_IMAGE_CONTENT_COLOR_AND_ALPHA = (1 << 0) | (1 << 1),
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_IMAGE_CONTENT_GAIN_MAP = (1 << 2),
AVIF_IMAGE_CONTENT_ALL = AVIF_IMAGE_CONTENT_COLOR_AND_ALPHA | AVIF_IMAGE_CONTENT_GAIN_MAP,
#else
@@ -1394,7 +1394,7 @@
// function can be called next to retrieve the number of top rows that can be immediately accessed
// from the luma plane of decoder->image, and alpha if any. The corresponding rows from the chroma planes,
// if any, can also be accessed (half rounded up if subsampled, same number of rows otherwise).
-// If a gain map is present and AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is on and
+// If a gain map is present and AVIF_ENABLE_GAIN_MAP is on and
// (imageContentToDecode & AVIF_IMAGE_CONTENT_GAIN_MAP) is nonzero, the gain map's planes can also be accessed
// in the same way. If the gain map's height is different from the main image, then the number of
// available gain map rows is at least:
@@ -1517,7 +1517,7 @@
// Version 1.1.0 ends here. Add any new members after this line.
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
int qualityGainMap; // changeable encoder setting
#endif
@@ -1587,7 +1587,7 @@
// AVIF_RESULT_INVALID_CODEC_SPECIFIC_OPTION from avifEncoderWrite() or avifEncoderAddImage().
AVIF_API avifResult avifEncoderSetCodecSpecificOption(avifEncoder * encoder, const char * key, const char * value);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Returns the size in bytes of the AV1 image item containing gain map samples, or 0 if no gain map was encoded.
AVIF_API size_t avifEncoderGetGainMapSizeBytes(avifEncoder * encoder);
#endif
@@ -1605,7 +1605,7 @@
// either the brand 'avif' or 'avis' (or both), without performing any allocations.
AVIF_NODISCARD AVIF_API avifBool avifPeekCompatibleFileType(const avifROData * input);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// ---------------------------------------------------------------------------
// Gain Map utilities.
// Gain Maps are a HIGHLY EXPERIMENTAL FEATURE, see comments in the avifGainMap
@@ -1658,7 +1658,7 @@
avifGainMap * gainMap,
avifDiagnostics * diag);
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#ifdef __cplusplus
} // extern "C"
diff --git a/include/avif/avif_cxx.h b/include/avif/avif_cxx.h
index 176157c..0a7ee95 100644
--- a/include/avif/avif_cxx.h
+++ b/include/avif/avif_cxx.h
@@ -21,7 +21,7 @@
void operator()(avifEncoder * encoder) const { avifEncoderDestroy(encoder); }
void operator()(avifDecoder * decoder) const { avifDecoderDestroy(decoder); }
void operator()(avifImage * image) const { avifImageDestroy(image); }
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
void operator()(avifGainMap * gainMap) const { avifGainMapDestroy(gainMap); }
#endif
};
@@ -31,7 +31,7 @@
using DecoderPtr = std::unique_ptr<avifDecoder, UniquePtrDeleter>;
using ImagePtr = std::unique_ptr<avifImage, UniquePtrDeleter>;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
using GainMapPtr = std::unique_ptr<avifGainMap, UniquePtrDeleter>;
#endif
diff --git a/include/avif/internal.h b/include/avif/internal.h
index 26e7e50..44a4ae5 100644
--- a/include/avif/internal.h
+++ b/include/avif/internal.h
@@ -146,7 +146,7 @@
// Copies the samples from srcImage to dstImage. dstImage must be allocated.
// srcImage and dstImage must have the same width, height, and depth.
// If the AVIF_PLANES_YUV bit is set in planes, then srcImage and dstImage must have the same yuvFormat.
-// Ignores the gainMap field (which exists only if AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP is defined).
+// Ignores the gainMap field (which exists only if AVIF_ENABLE_GAIN_MAP is defined).
void avifImageCopySamples(avifImage * dstImage, const avifImage * srcImage, avifPlanesFlags planes);
// Appends an opaque image item property.
@@ -391,7 +391,7 @@
{
AVIF_ITEM_COLOR,
AVIF_ITEM_ALPHA,
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_ITEM_GAIN_MAP,
#endif
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
@@ -779,7 +779,7 @@
// ---------------------------------------------------------------------------
// gain maps
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Finds the approximate min/max values from the given gain map values, excluding outliers.
// Uses a histogram, with outliers defined as having at least one empty bucket between them
@@ -789,7 +789,7 @@
avifResult avifGainMapValidateMetadata(const avifGainMap * gainMap, avifDiagnostics * diag);
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#define AVIF_INDEFINITE_DURATION64 UINT64_MAX
#define AVIF_INDEFINITE_DURATION32 UINT32_MAX
diff --git a/src/avif.c b/src/avif.c
index 93c4603..1ae949f 100644
--- a/src/avif.c
+++ b/src/avif.c
@@ -104,7 +104,7 @@
case AVIF_RESULT_CANNOT_CHANGE_SETTING: return "Cannot change some setting during encoding";
case AVIF_RESULT_INCOMPATIBLE_IMAGE: return "The image is incompatible with already encoded images";
case AVIF_RESULT_INTERNAL_ERROR: return "Internal error";
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
case AVIF_RESULT_ENCODE_GAIN_MAP_FAILED: return "Encoding of gain map planes failed";
case AVIF_RESULT_DECODE_GAIN_MAP_FAILED: return "Decoding of gain map planes failed";
case AVIF_RESULT_INVALID_TONE_MAPPED_IMAGE: return "Invalid tone mapped image item";
@@ -283,7 +283,7 @@
}
avifImageCopySamples(dstImage, srcImage, planes);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (srcImage->gainMap) {
if (!dstImage->gainMap) {
dstImage->gainMap = avifGainMapCreate();
@@ -320,7 +320,7 @@
avifGainMapDestroy(dstImage->gainMap);
dstImage->gainMap = NULL;
}
-#endif // defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#endif // defined(AVIF_ENABLE_GAIN_MAP)
return AVIF_RESULT_OK;
}
@@ -361,7 +361,7 @@
void avifImageDestroy(avifImage * image)
{
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (image->gainMap) {
avifGainMapDestroy(image->gainMap);
}
@@ -1245,7 +1245,7 @@
}
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
avifGainMap * avifGainMapCreate(void)
{
avifGainMap * gainMap = (avifGainMap *)avifAlloc(sizeof(avifGainMap));
@@ -1280,4 +1280,4 @@
avifRWDataFree(&gainMap->altICC);
avifFree(gainMap);
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
diff --git a/src/gainmap.c b/src/gainmap.c
index 318a86d..5f35411 100644
--- a/src/gainmap.c
+++ b/src/gainmap.c
@@ -7,7 +7,7 @@
#include <math.h>
#include <string.h>
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
static void avifGainMapSetDefaults(avifGainMap * gainMap)
{
@@ -849,4 +849,4 @@
return res;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
diff --git a/src/read.c b/src/read.c
index 9891c15..b317577 100644
--- a/src/read.c
+++ b/src/read.c
@@ -2016,7 +2016,7 @@
return avifROStreamRemainingBytes(&s) == 0;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
static avifBool avifParseGainMapMetadata(avifGainMap * gainMap, avifROStream * s)
{
@@ -2095,7 +2095,7 @@
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// bit_depth is assumed to be 2 (32-bit).
@@ -2317,7 +2317,7 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI) && defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI) && defined(AVIF_ENABLE_GAIN_MAP)
static avifResult avifSkipMasteringDisplayColourVolume(avifROStream * s)
{
for (int c = 0; c < 3; c++) {
@@ -2418,7 +2418,7 @@
}
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_MINI && AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_EXPERIMENTAL_MINI && AVIF_ENABLE_GAIN_MAP
// Implementation of section 2.3.3 of AV1 Codec ISO Media File Format Binding specification v1.2.0.
// See https://aomediacodec.github.io/av1-isobmff/v1.2.0.html#av1codecconfigurationbox-syntax.
@@ -3864,7 +3864,7 @@
uint32_t hasClli = AVIF_FALSE, tmapHasClli = AVIF_FALSE;
avifContentLightLevelInformationBox clli = {}, tmapClli = {};
if (hasHdr) {
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_CHECKERR(avifROStreamReadBitsU32(&s, &hasGainmap, 1), AVIF_RESULT_BMFF_PARSE_FAILED); // bit(1) gainmap_flag;
if (hasGainmap) {
// avifDecoderReset() requires the 'tmap' brand to be registered for the tone mapping derived image item to be parsed.
@@ -3932,7 +3932,7 @@
}
#else
return AVIF_RESULT_NOT_IMPLEMENTED;
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
}
// Chunk sizes
@@ -4410,7 +4410,7 @@
avifBool miniSeen = AVIF_FALSE;
avifBool needsMini = AVIF_FALSE;
#endif
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
avifBool needsTmap = AVIF_FALSE;
avifBool tmapSeen = AVIF_FALSE;
#endif
@@ -4532,7 +4532,7 @@
AVIF_RESULT_BMFF_PARSE_FAILED);
}
#endif // AVIF_ENABLE_EXPERIMENTAL_MINI
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
needsTmap = avifFileTypeHasBrand(&ftyp, "tmap");
if (needsTmap) {
needsMeta = AVIF_TRUE;
@@ -4546,7 +4546,7 @@
AVIF_CHECKRES(avifParseMetaBox(data->meta, boxOffset, boxContents.data, boxContents.size, data->diag));
metaSeen = AVIF_TRUE;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
for (uint32_t itemIndex = 0; itemIndex < data->meta->items.count; ++itemIndex) {
if (!memcmp(data->meta->items.item[itemIndex]->type, "tmap", 4)) {
tmapSeen = AVIF_TRUE;
@@ -4588,7 +4588,7 @@
#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI)
sawEverythingNeeded = sawEverythingNeeded && (!needsMini || miniSeen);
#endif
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
sawEverythingNeeded = sawEverythingNeeded && (!needsTmap || tmapSeen);
#endif
if (sawEverythingNeeded) {
@@ -4601,7 +4601,7 @@
if ((needsMeta && !metaSeen) || (needsMoov && !moovSeen)) {
return AVIF_RESULT_TRUNCATED_DATA;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (needsTmap && !tmapSeen) {
return metaIsSizeZero ? AVIF_RESULT_TRUNCATED_DATA : AVIF_RESULT_BMFF_PARSE_FAILED;
}
@@ -4666,7 +4666,7 @@
return avifFileTypeIsCompatible(&ftyp);
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
static avifBool avifBrandArrayHasBrand(avifBrandArray * brands, const char * brand)
{
for (uint32_t brandIndex = 0; brandIndex < brands->count; ++brandIndex) {
@@ -5280,7 +5280,7 @@
return avifReadColorNclxProperty(properties, colorPrimaries, transferCharacteristics, matrixCoefficients, yuvRange, cicpSet);
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Finds a 'tmap' (tone mapped image item) box associated with the given 'colorItem'.
// If found, fills 'toneMappedImageItem' and sets 'gainMapItemID' to the id of the gain map
// item associated with the box. Otherwise, sets 'toneMappedImageItem' to NULL.
@@ -5465,7 +5465,7 @@
}
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Finds a 'sato' Sample Transform derived image item box.
@@ -5598,7 +5598,7 @@
avifCodecType colorCodecType = AVIF_CODEC_TYPE_UNKNOWN;
const avifPropertyArray * colorProperties = NULL;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
const avifPropertyArray * gainMapProperties = NULL;
#endif
if (data->source == AVIF_DECODER_SOURCE_TRACKS) {
@@ -5768,7 +5768,7 @@
&codecType[AVIF_ITEM_ALPHA]));
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Section 10.2.6 of 23008-12:2024/AMD 1:2024(E):
// 'tmap' brand
// This brand enables file players to identify and decode HEIF files containing tone-map derived image
@@ -5805,7 +5805,7 @@
}
}
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// AVIF_ITEM_SAMPLE_TRANSFORM (not used through mainItems because not a coded item (well grids are not coded items either but it's different)).
@@ -5956,7 +5956,7 @@
decoder->image->alphaPremultiplied = decoder->alphaPresent &&
(mainItems[AVIF_ITEM_COLOR]->premByID == mainItems[AVIF_ITEM_ALPHA]->id);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (mainItems[AVIF_ITEM_GAIN_MAP]) {
AVIF_ASSERT_OR_RETURN(decoder->image->gainMap && decoder->image->gainMap->image);
decoder->image->gainMap->image->width = mainItems[AVIF_ITEM_GAIN_MAP]->width;
@@ -6030,7 +6030,7 @@
decoder->image->transformFlags |= AVIF_TRANSFORM_IMIR;
decoder->image->imir = imirProp->u.imir;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (gainMapProperties != NULL) {
AVIF_CHECKRES(aviDecoderCheckGainMapProperties(decoder, gainMapProperties));
}
@@ -6149,7 +6149,7 @@
static avifResult avifGetErrorForItemCategory(avifItemCategory itemCategory)
{
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return AVIF_RESULT_DECODE_GAIN_MAP_FAILED;
}
@@ -6276,7 +6276,7 @@
if (!stealPlanes) {
avifImage * dstImage = decoder->image;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (tile->input->itemCategory == AVIF_ITEM_GAIN_MAP) {
AVIF_ASSERT_OR_RETURN(dstImage->gainMap && dstImage->gainMap->image);
dstImage = dstImage->gainMap->image;
@@ -6292,7 +6292,7 @@
avifImage * src = tile->image;
switch (tile->input->itemCategory) {
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
case AVIF_ITEM_GAIN_MAP:
AVIF_ASSERT_OR_RETURN(decoder->image->gainMap && decoder->image->gainMap->image);
decoder->image->gainMap->image->width = src->width;
@@ -6319,7 +6319,7 @@
if (avifIsAlpha(tile->input->itemCategory)) {
avifImageStealPlanes(decoder->image, src, AVIF_PLANES_A);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
} else if (tile->input->itemCategory == AVIF_ITEM_GAIN_MAP) {
AVIF_ASSERT_OR_RETURN(decoder->image->gainMap && decoder->image->gainMap->image);
avifImageStealPlanes(decoder->image->gainMap->image, src, AVIF_PLANES_YUV);
@@ -6647,7 +6647,7 @@
{
uint32_t minRowCount = decoder->image->height;
for (int c = 0; c < AVIF_ITEM_CATEGORY_COUNT; ++c) {
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (c == AVIF_ITEM_GAIN_MAP) {
const avifImage * const gainMap = decoder->image->gainMap ? decoder->image->gainMap->image : NULL;
if ((decoder->imageContentToDecode & AVIF_IMAGE_CONTENT_GAIN_MAP) && gainMap != NULL && gainMap->height != 0) {
diff --git a/src/write.c b/src/write.c
index cf4e1c7..8c4bb3a 100644
--- a/src/write.c
+++ b/src/write.c
@@ -214,7 +214,7 @@
// Map the encoder settings quality and qualityAlpha to quantizer and quantizerAlpha
int quantizer;
int quantizerAlpha;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
int quantizerGainMap;
#endif
// tileRowsLog2 and tileColsLog2 are the actual tiling values after automatic tiling is handled
@@ -229,7 +229,7 @@
int lastTileRowsLog2;
int lastTileColsLog2;
avifImage * imageMetadata;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// For convenience, holds metadata derived from the avifGainMap struct (when present) about the
// altenate image
avifImage * altImageMetadata;
@@ -259,7 +259,7 @@
if (!data->imageMetadata) {
goto error;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
data->altImageMetadata = avifImageCreateEmpty();
if (!data->altImageMetadata) {
goto error;
@@ -336,7 +336,7 @@
if (data->imageMetadata) {
avifImageDestroy(data->imageMetadata);
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (data->altImageMetadata) {
avifImageDestroy(data->altImageMetadata);
}
@@ -467,7 +467,7 @@
encoder->repetitionCount = AVIF_REPETITION_COUNT_INFINITE;
encoder->quality = AVIF_QUALITY_DEFAULT;
encoder->qualityAlpha = AVIF_QUALITY_DEFAULT;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
encoder->qualityGainMap = AVIF_QUALITY_DEFAULT;
#endif
encoder->minQuantizer = AVIF_QUANTIZER_BEST_QUALITY;
@@ -710,7 +710,7 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI) && defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI) && defined(AVIF_ENABLE_GAIN_MAP)
static avifResult avifEncoderWriteMiniHDRProperties(avifRWStream * outputStream, const avifImage * imageMetadata)
{
const avifBool hasClli = imageMetadata->clli.maxCLL != 0 || imageMetadata->clli.maxPALL != 0;
@@ -747,7 +747,7 @@
}
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_MINI && AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_EXPERIMENTAL_MINI && AVIF_ENABLE_GAIN_MAP
static avifResult avifEncoderWriteExtendedColorProperties(avifRWStream * dedupStream,
avifRWStream * outputStream,
@@ -935,7 +935,7 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
static avifBool avifGainMapIdenticalChannels(const avifGainMap * gainMap)
{
@@ -1041,7 +1041,7 @@
altImageMetadata->clli = imageWithGainMap->gainMap->altCLLI;
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
static avifResult avifEncoderWriteSampleTransformTokens(avifRWStream * s, const avifSampleTransformExpression * expression)
@@ -1202,7 +1202,7 @@
static const char infeNameColor[] = "Color";
static const char infeNameAlpha[] = "Alpha";
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
static const char infeNameGainMap[] = "GMap";
#endif
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
@@ -1214,7 +1214,7 @@
if (avifIsAlpha(itemCategory)) {
return infeNameAlpha;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return infeNameGainMap;
}
@@ -1563,7 +1563,7 @@
static avifResult avifGetErrorForItemCategory(avifItemCategory itemCategory)
{
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return AVIF_RESULT_ENCODE_GAIN_MAP_FAILED;
}
@@ -1596,7 +1596,7 @@
const uint32_t cellCount = gridCols * gridRows;
const avifImage * firstCell = cellImages[0];
const avifImage * bottomRightCell = cellImages[cellCount - 1];
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (validateGainMap) {
AVIF_ASSERT_OR_RETURN(firstCell->gainMap && firstCell->gainMap->image);
firstCell = firstCell->gainMap->image;
@@ -1610,7 +1610,7 @@
const uint32_t gridHeight = avifGridHeight(gridRows, firstCell, bottomRightCell);
for (uint32_t cellIndex = 0; cellIndex < cellCount; ++cellIndex) {
const avifImage * cellImage = cellImages[cellIndex];
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (validateGainMap) {
AVIF_ASSERT_OR_RETURN(cellImage->gainMap && cellImage->gainMap->image);
cellImage = cellImage->gainMap->image;
@@ -1709,7 +1709,7 @@
AVIF_CHECKRES(avifValidateGrid(gridCols, gridRows, cellImages, /*validateGainMap=*/AVIF_FALSE, &encoder->diag));
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
const avifBool hasGainMap = (firstCell->gainMap && firstCell->gainMap->image != NULL);
// Check that either all cells have a gain map, or none of them do.
@@ -1775,7 +1775,7 @@
return AVIF_RESULT_INVALID_ARGUMENT;
}
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
// -----------------------------------------------------------------------
// Validate flags
@@ -1823,7 +1823,7 @@
// Map quality and qualityAlpha to quantizer and quantizerAlpha
encoder->data->quantizer = avifQualityToQuantizer(encoder->quality, encoder->minQuantizer, encoder->maxQuantizer);
encoder->data->quantizerAlpha = avifQualityToQuantizer(encoder->qualityAlpha, encoder->minQuantizerAlpha, encoder->maxQuantizerAlpha);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
encoder->data->quantizerGainMap =
avifQualityToQuantizer(encoder->qualityGainMap, AVIF_QUANTIZER_BEST_QUALITY, AVIF_QUANTIZER_WORST_QUALITY);
#endif
@@ -1858,7 +1858,7 @@
if (encoder->data->items.count == 0) {
// Make a copy of the first image's metadata (sans pixels) for future writing/validation
AVIF_CHECKRES(avifImageCopy(encoder->data->imageMetadata, firstCell, 0));
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (hasGainMap) {
AVIF_CHECKRES(avifImageCopyAltImageMetadata(encoder->data->altImageMetadata, encoder->data->imageMetadata));
}
@@ -1907,7 +1907,7 @@
}
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (firstCell->gainMap && firstCell->gainMap->image) {
avifEncoderItem * toneMappedItem = avifEncoderDataCreateItem(encoder->data,
"tmap",
@@ -1951,7 +1951,7 @@
colorItem->dimgFromID = toneMappedItemID;
gainMapItem->dimgFromID = toneMappedItemID;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_8B_8B ||
@@ -1959,7 +1959,7 @@
encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_8B_OVERLAP_4B) {
// For now, only 16-bit depth is supported.
AVIF_ASSERT_OR_RETURN(firstCell->depth == 16);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_CHECKERR(!firstCell->gainMap, AVIF_RESULT_NOT_IMPLEMENTED); // TODO(yguyon): Implement 16-bit HDR
#endif
AVIF_CHECKRES(avifEncoderCreateBitDepthExtensionItems(encoder, gridCols, gridRows, gridWidth, gridHeight, colorItemID));
@@ -1987,7 +1987,7 @@
} else {
// Another frame in an image sequence, or layer in a layered image
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (hasGainMap) {
avifDiagnosticsPrintf(&encoder->diag, "gain maps are not supported for image sequences or layered images");
return AVIF_RESULT_NOT_IMPLEMENTED;
@@ -2037,7 +2037,7 @@
avifImage * cellImagePlaceholder = NULL; // May be used as a temporary, modified cellImage. Left as NULL otherwise.
const avifImage * firstCellImage = firstCell;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
AVIF_ASSERT_OR_RETURN(cellImage->gainMap && cellImage->gainMap->image);
cellImage = cellImage->gainMap->image;
@@ -2061,7 +2061,7 @@
const avifBool isAlpha = avifIsAlpha(item->itemCategory);
int quantizer = isAlpha ? encoder->data->quantizerAlpha
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
: (item->itemCategory == AVIF_ITEM_GAIN_MAP) ? encoder->data->quantizerGainMap
#endif
: encoder->data->quantizer;
@@ -2223,7 +2223,7 @@
}
const avifBool isAlpha = avifIsAlpha(item->itemCategory);
const avifBool isAlphaOrGainMap = isAlpha
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
|| item->itemCategory == AVIF_ITEM_GAIN_MAP
#endif
;
@@ -2267,7 +2267,7 @@
encoder->ioStats.alphaOBUSize += sample->data.size;
} else if (item->itemCategory == AVIF_ITEM_COLOR) {
encoder->ioStats.colorOBUSize += sample->data.size;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
} else if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
encoder->data->gainMapSizeBytes += sample->data.size;
#endif
@@ -2389,7 +2389,7 @@
encoder->data->imageMetadata->xmp.size > (1 << 20)) {
return AVIF_FALSE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// gainmap_width_minus1 and gainmap_height_minus1
if (encoder->data->imageMetadata->gainMap != NULL && encoder->data->imageMetadata->gainMap->image != NULL &&
(encoder->data->imageMetadata->gainMap->image->width > (1 << 15) ||
@@ -2414,7 +2414,7 @@
encoder->data->imageMetadata->yuvFormat != AVIF_PIXEL_FORMAT_YUV400) {
return AVIF_FALSE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// gainmap_chroma_subsampling
if (encoder->data->imageMetadata->gainMap != NULL && encoder->data->imageMetadata->gainMap->image != NULL &&
(encoder->data->imageMetadata->gainMap->image->yuvFormat != AVIF_PIXEL_FORMAT_YUV444 &&
@@ -2430,7 +2430,7 @@
encoder->data->imageMetadata->matrixCoefficients > 255) {
return AVIF_FALSE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// gainmap_colour_primaries, gainmap_transfer_characteristics and gainmap_matrix_coefficients
if (encoder->data->imageMetadata->gainMap != NULL && encoder->data->imageMetadata->gainMap->image != NULL &&
(encoder->data->imageMetadata->gainMap->image->colorPrimaries > 255 ||
@@ -2470,7 +2470,7 @@
}
continue; // The alpha auxiliary item can be stored in the MinimizedImageBox.
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
// gainmap_item_data_size
if (item->encodeOutput->samples.count != 1 || item->encodeOutput->samples.sample[0].data.size >= (1 << 28)) {
@@ -2541,7 +2541,7 @@
AVIF_ASSERT_OR_RETURN(!alphaItem);
alphaItem = item;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
AVIF_ASSERT_OR_RETURN(!gainmapItem);
gainmapItem = item;
@@ -2617,7 +2617,7 @@
uint32_t fewItemDataBytesFlag = colorData->size <= (1 << 15) && (!alphaData || alphaData->size < (1 << 15));
uint32_t fewMetadataBytesFlag = image->icc.size <= (1 << 10) && image->exif.size <= (1 << 10) && image->xmp.size <= (1 << 10);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (hasGainmap) {
AVIF_ASSERT_OR_RETURN(image->gainMap != NULL && image->gainMap->image != NULL);
gainmapMetadataSize = avifGainMapMetadataSize(image->gainMap);
@@ -2700,7 +2700,7 @@
// High Dynamic Range properties
size_t tmapIccSize = 0;
if (hasHdr) {
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
AVIF_CHECKRES(avifRWStreamWriteBits(s, hasGainmap, 1)); // bit(1) gainmap_flag;
if (hasGainmap) {
const avifImage * tmap = encoder->data->altImageMetadata;
@@ -2760,7 +2760,7 @@
if (hasGainmap) {
AVIF_CHECKRES(avifEncoderWriteMiniHDRProperties(s, encoder->data->altImageMetadata));
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
}
// Chunk sizes
@@ -2773,7 +2773,7 @@
if (hasIcc) {
AVIF_CHECKRES(avifRWStreamWriteBits(s, (uint32_t)image->icc.size - 1, fewMetadataBytesFlag ? 10 : 20)); // unsigned int(few_metadata_bytes_flag ? 10 : 20) icc_data_size_minus1;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (hasHdr && hasGainmap && tmapIccSize != 0) {
AVIF_CHECKRES(avifRWStreamWriteBits(s, (uint32_t)tmapIccSize - 1, fewMetadataBytesFlag ? 10 : 20)); // unsigned int(few_metadata_bytes_flag ? 10 : 20) tmap_icc_data_size_minus1;
}
@@ -2826,7 +2826,7 @@
if (hasIcc) {
AVIF_CHECKRES(avifRWStreamWrite(s, image->icc.data, image->icc.size)); // unsigned int(8) icc_data[icc_data_size_minus1 + 1];
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (hasHdr && hasGainmap && tmapIccSize != 0) {
AVIF_CHECKRES(avifRWStreamWrite(s, encoder->data->altImageMetadata->icc.data, tmapIccSize)); // unsigned int(8) tmap_icc_data[tmap_icc_data_size_minus1 + 1];
}
@@ -2872,7 +2872,7 @@
const avifBool isGrid = (item->gridCols > 0);
// Whether there is ipma to write for this item.
avifBool hasIpmaToWrite = item->codec || isGrid;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
const avifBool isToneMappedImage = !memcmp(item->type, "tmap", 4);
if (isToneMappedImage) {
hasIpmaToWrite = AVIF_TRUE;
@@ -2914,7 +2914,7 @@
}
const avifImage * itemMetadata = imageMetadata;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (isToneMappedImage) {
itemMetadata = altImageMetadata;
} else if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
@@ -2943,7 +2943,7 @@
// pixi = pixel information (depth, channel count)
avifBool hasPixi = AVIF_TRUE;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Pixi is optional for the 'tmap' item.
if (isToneMappedImage && imageMetadata->gainMap->altDepth == 0 && imageMetadata->gainMap->altPlaneCount == 0) {
hasPixi = AVIF_FALSE;
@@ -3009,7 +3009,7 @@
AVIF_CHECKRES(avifEncoderWriteColorProperties(s, itemMetadata, &item->ipma, dedup));
AVIF_CHECKRES(avifEncoderWriteHDRProperties(&dedup->s, s, itemMetadata, &item->ipma, dedup));
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
} else if (item->itemCategory == AVIF_ITEM_GAIN_MAP) {
// Gain map specific properties
@@ -3246,7 +3246,7 @@
AVIF_CHECKRES(avifRWStreamWriteChars(&s, "MA1A", 4)); // ... compatible_brands[]
}
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
for (uint32_t itemIndex = 0; itemIndex < encoder->data->items.count; ++itemIndex) {
if (!memcmp(encoder->data->items.item[itemIndex].type, "tmap", 4)) {
// ISO/IEC 23008-12:2024/AMD 1:2024(E)
@@ -3418,7 +3418,7 @@
avifBoxMarker ipco;
AVIF_CHECKRES(avifRWStreamWriteBox(&s, "ipco", AVIF_BOX_SIZE_TBD, &ipco));
avifImage * altImageMetadata = NULL;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
altImageMetadata = encoder->data->altImageMetadata;
#endif
avifResult result = avifRWStreamWriteProperties(dedup, &s, encoder, imageMetadata, altImageMetadata);
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 10deb51..ca34391 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -113,7 +113,7 @@
add_avif_gtest_with_data(avifdimgtest avifincrtest_helpers)
add_avif_gtest_with_data(avifencodetest)
- if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_GAIN_MAP)
add_avif_internal_gtest_with_data(avifgainmaptest avifincrtest_helpers_internal)
if(AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION)
@@ -131,7 +131,7 @@
add_avif_gtest_with_data(aviflosslesstest)
add_avif_gtest_with_data(avifmetadatatest)
- if(AVIF_ENABLE_EXPERIMENTAL_MINI AND AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_EXPERIMENTAL_MINI AND AVIF_ENABLE_GAIN_MAP)
add_avif_gtest(avifminitest)
endif()
@@ -223,7 +223,7 @@
add_avif_fuzztest(avif_fuzztest_read_image)
add_avif_fuzztest(avif_fuzztest_yuvrgb)
- if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_GAIN_MAP)
add_avif_fuzztest(avif_fuzztest_enc_dec_experimental)
add_avif_fuzztest(avif_fuzztest_enc_dec_incr_experimental gtest/avifincrtest_helpers.cc)
endif()
@@ -271,7 +271,7 @@
${CMAKE_CURRENT_SOURCE_DIR}/data
)
- if(AVIF_ENABLE_AVIFGAINMAPUTIL AND AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION)
+ if(AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION)
add_test(NAME test_cmd_avifgainmaputil COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/test_cmd_avifgainmaputil.sh
${CMAKE_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/data
)
@@ -371,10 +371,10 @@
PROPERTIES DISABLED True
)
- if(AVIF_ENABLE_EXPERIMENTAL_MINI AND AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_EXPERIMENTAL_MINI AND AVIF_ENABLE_GAIN_MAP)
set_tests_properties(avifminitest PROPERTIES DISABLED True)
endif()
- if(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+ if(AVIF_ENABLE_GAIN_MAP)
set_tests_properties(avifgainmaptest PROPERTIES DISABLED True)
if(AVIF_ENABLE_EXPERIMENTAL_JPEG_GAIN_MAP_CONVERSION)
diff --git a/tests/data/README.md b/tests/data/README.md
index 0005503..61363af 100644
--- a/tests/data/README.md
+++ b/tests/data/README.md
@@ -643,7 +643,7 @@
License: [same as libavif](https://github.com/AOMediaCodec/libavif/blob/main/LICENSE)
Source : created from `seine_sdr_gainmap_srgb.jpg` converted to avif with avifenc built
-with AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP and AVIF_ENABLE_LIBXML2 then:
+with AVIF_ENABLE_GAIN_MAP and AVIF_LIBXML2 enabled, then:
```
# from libavif/mybuilddir/
diff --git a/tests/gtest/avif_fuzztest_helpers.cc b/tests/gtest/avif_fuzztest_helpers.cc
index 69e3076..b46e85a 100644
--- a/tests/gtest/avif_fuzztest_helpers.cc
+++ b/tests/gtest/avif_fuzztest_helpers.cc
@@ -156,7 +156,7 @@
ImagePtr AvifImageToUniquePtr(avifImage* image) { return ImagePtr(image); }
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
DecoderPtr AddGainMapOptionsToDecoder(
DecoderPtr decoder, avifImageContentTypeFlags image_content_to_decode) {
decoder->imageContentToDecode = image_content_to_decode;
diff --git a/tests/gtest/avif_fuzztest_helpers.h b/tests/gtest/avif_fuzztest_helpers.h
index ee577bd..cfb5750 100644
--- a/tests/gtest/avif_fuzztest_helpers.h
+++ b/tests/gtest/avif_fuzztest_helpers.h
@@ -50,7 +50,7 @@
uint32_t image_dimension_limit,
uint32_t image_count_limit,
avifStrictFlags strict_flags);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
DecoderPtr AddGainMapOptionsToDecoder(
DecoderPtr decoder, avifImageContentTypeFlags image_content_to_decode);
#endif
@@ -169,7 +169,7 @@
return fuzztest::OneOf(ArbitraryAvifAnim8b(), ArbitraryAvifAnim16b());
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// TODO: Try StructOf<Metadata>(StructOf<uint32_t[3]>())?
ImagePtr AddGainMapToImage(
ImagePtr image, ImagePtr gain_map, int32_t gain_map_min_n0,
@@ -278,7 +278,7 @@
AVIF_STRICT_ALPHA_ISPE_REQUIRED}));
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
// Generator for an arbitrary DecoderPtr with base options and gain map
// options fuzzed.
inline auto ArbitraryAvifDecoderWithGainMapOptions() {
@@ -287,7 +287,7 @@
return fuzztest::Map(AddGainMapOptionsToDecoder, ArbitraryBaseAvifDecoder(),
fuzztest::ElementOf<avifImageContentTypeFlags>({
AVIF_IMAGE_CONTENT_COLOR_AND_ALPHA
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
, AVIF_IMAGE_CONTENT_COLOR_AND_ALPHA |
AVIF_IMAGE_CONTENT_GAIN_MAP
#endif
@@ -301,7 +301,7 @@
#else
// Generator for an arbitrary DecoderPtr.
inline auto ArbitraryAvifDecoder() { return ArbitraryBaseAvifDecoder(); }
-#endif // AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
+#endif // AVIF_ENABLE_GAIN_MAP
//------------------------------------------------------------------------------
diff --git a/tests/gtest/avifincrtest_helpers.cc b/tests/gtest/avifincrtest_helpers.cc
index 6c0a8b8..2a766bd 100644
--- a/tests/gtest/avifincrtest_helpers.cc
+++ b/tests/gtest/avifincrtest_helpers.cc
@@ -65,7 +65,7 @@
}
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
if (image1.gainMap != nullptr && image1.gainMap->image != nullptr &&
image2.gainMap != nullptr && image2.gainMap->image != nullptr) {
const uint32_t gain_map_row_count = (uint32_t)roundf(
@@ -365,7 +365,7 @@
AVIF_CHECKERR(false, AVIF_RESULT_INVALID_ARGUMENT);
}
bool has_gain_map = false;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
has_gain_map = (reference.gainMap != nullptr);
#endif
const uint32_t min_decoded_row_count = GetMinDecodedRowCount(
diff --git a/tests/gtest/aviftest_helpers.cc b/tests/gtest/aviftest_helpers.cc
index 7a3a360..47824ee 100644
--- a/tests/gtest/aviftest_helpers.cc
+++ b/tests/gtest/aviftest_helpers.cc
@@ -510,7 +510,7 @@
encoder->speed = speed;
encoder->quality = quality;
encoder->qualityAlpha = quality;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP)
+#if defined(AVIF_ENABLE_GAIN_MAP)
encoder->qualityGainMap = quality;
#endif
testutil::AvifRwData bytes;