Remove AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM (#2904)
Always support some Sample Transform schemes as
defined in the version 1.2 of the AVIF specification.
diff --git a/.github/workflows/ci-fuzztest.yml b/.github/workflows/ci-fuzztest.yml
index 6e888c8..acfda4d 100644
--- a/.github/workflows/ci-fuzztest.yml
+++ b/.github/workflows/ci-fuzztest.yml
@@ -46,7 +46,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_FUZZTEST=LOCAL
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
diff --git a/.github/workflows/ci-linux-coverage.yml b/.github/workflows/ci-linux-coverage.yml
index bc34c5d..227b499 100644
--- a/.github/workflows/ci-linux-coverage.yml
+++ b/.github/workflows/ci-linux-coverage.yml
@@ -42,7 +42,6 @@
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON -DAVIF_ENABLE_COVERAGE=ON
-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
diff --git a/.github/workflows/ci-unix-shared-local.yml b/.github/workflows/ci-unix-shared-local.yml
index 15985de..4a00704 100644
--- a/.github/workflows/ci-unix-shared-local.yml
+++ b/.github/workflows/ci-unix-shared-local.yml
@@ -54,7 +54,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON
- name: Build libavif
diff --git a/.github/workflows/ci-unix-static.yml b/.github/workflows/ci-unix-static.yml
index 4758668..9e95c70 100644
--- a/.github/workflows/ci-unix-static.yml
+++ b/.github/workflows/ci-unix-static.yml
@@ -60,7 +60,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON
- name: Build libavif
diff --git a/.github/workflows/ci-windows-installed.yml b/.github/workflows/ci-windows-installed.yml
index f2fea68..8ca2b7c 100644
--- a/.github/workflows/ci-windows-installed.yml
+++ b/.github/workflows/ci-windows-installed.yml
@@ -68,7 +68,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON $env:AVIF_CMAKE_C_COMPILER $env:AVIF_CMAKE_CXX_COMPILER
- name: Build libavif
diff --git a/.github/workflows/ci-windows-shared-local.yml b/.github/workflows/ci-windows-shared-local.yml
index 7499fe0..557de20 100644
--- a/.github/workflows/ci-windows-shared-local.yml
+++ b/.github/workflows/ci-windows-shared-local.yml
@@ -55,7 +55,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON $env:AVIF_CMAKE_C_COMPILER $env:AVIF_CMAKE_CXX_COMPILER
- name: Build libavif
diff --git a/.github/workflows/ci-windows.yml b/.github/workflows/ci-windows.yml
index e6a20a2..6780beb 100644
--- a/.github/workflows/ci-windows.yml
+++ b/.github/workflows/ci-windows.yml
@@ -67,7 +67,6 @@
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON
-DAVIF_ENABLE_WERROR=ON
- name: Build libavif
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6d4e106..f3e5097 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@
### Added since 1.3.0
* Allow avifenc to read png or jpeg files through stdin using --stdin-format.
+* Support some Sample Transform schemes as defined in the version 1.2 of the
+ AVIF specification.
### Changed since 1.3.0
@@ -37,6 +39,7 @@
### Removed since 1.3.0
* Remove ext/avm.cmd.
+* Remove the AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM CMake flag.
## [1.3.0] - 2025-05-09
diff --git a/CMakeLists.txt b/CMakeLists.txt
index af7027f..78bfa7f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -71,7 +71,6 @@
option(AVIF_ENABLE_WERROR "Treat all compiler warnings as errors" OFF)
option(AVIF_ENABLE_EXPERIMENTAL_MINI "Enable experimental reduced header" OFF)
-option(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM "Enable experimental sample transform code" OFF)
option(AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI "Enable experimental PixelInformationProperty syntax from HEIF 3rd Ed. Amd2" OFF)
set(AVIF_PKG_CONFIG_EXTRA_LIBS_PRIVATE "")
@@ -352,10 +351,6 @@
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_MINI)
endif()
-if(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
- add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
-endif()
-
if(AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI)
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI)
endif()
@@ -377,14 +372,12 @@
src/reformat.c
src/reformat_libsharpyuv.c
src/reformat_libyuv.c
+ src/sampletransform.c
src/scale.c
src/stream.c
src/utils.c
src/write.c
)
-if(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
- list(APPEND AVIF_SRCS src/sampletransform.c)
-endif()
if(AVIF_ENABLE_COMPLIANCE_WARDEN)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ext/ComplianceWarden")
diff --git a/include/avif/avif.h b/include/avif/avif.h
index 35764b4..97eea86 100644
--- a/include/avif/avif.h
+++ b/include/avif/avif.h
@@ -196,10 +196,8 @@
AVIF_RESULT_ENCODE_GAIN_MAP_FAILED = 30,
AVIF_RESULT_DECODE_GAIN_MAP_FAILED = 31,
AVIF_RESULT_INVALID_TONE_MAPPED_IMAGE = 32,
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
AVIF_RESULT_ENCODE_SAMPLE_TRANSFORM_FAILED = 33,
AVIF_RESULT_DECODE_SAMPLE_TRANSFORM_FAILED = 34,
-#endif
// Kept for backward compatibility; please use the symbols above instead.
AVIF_RESULT_NO_AV1_ITEMS_FOUND = AVIF_RESULT_MISSING_IMAGE_ITEM
@@ -721,13 +719,12 @@
// ---------------------------------------------------------------------------
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
-// Sample Transforms are a HIGHLY EXPERIMENTAL FEATURE. The format might still
-// change and images containing a sample transform item encoded with the current
-// version of libavif might not decode with a future version of libavif.
-// Use at your own risk.
-// This is based on a proposal from the Alliance for Open Media.
-
+// Sample Transforms are a mechanism introduced in the version 1.2.0 of the
+// AVIF specification. They enable the creation of derived images that are
+// constructed from multiple input images according to a mathematical formula.
+// This can for example be used to enable higher bit depths even when the
+// underlying codec does not natively support 16-bit or higher precision.
+// See https://aomediacodec.github.io/av1-avif/v1.2.0.html#sample-transform.
typedef enum avifSampleTransformRecipe
{
AVIF_SAMPLE_TRANSFORM_NONE,
@@ -758,7 +755,6 @@
// truncation and/or compression.
AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_8B_OVERLAP_4B
} avifSampleTransformRecipe;
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// ---------------------------------------------------------------------------
// Opaque image item properties
@@ -1612,10 +1608,8 @@
// time to the current time.
uint64_t modificationTime;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Perform extra steps at encoding and decoding to extend AV1 features using bundled additional image items.
avifSampleTransformRecipe sampleTransformRecipe; // Changeable encoder setting.
-#endif
} avifEncoder;
// Creates an encoder initialized with default settings values.
diff --git a/include/avif/internal.h b/include/avif/internal.h
index 4b4c341..c559381 100644
--- a/include/avif/internal.h
+++ b/include/avif/internal.h
@@ -163,7 +163,6 @@
// ---------------------------------------------------------------------------
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Mapping used in the coding of Sample Transform metadata.
typedef enum avifSampleTransformBitDepth
{
@@ -241,8 +240,6 @@
const avifImage * inputImageItems[],
avifPlanesFlags planes);
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
-
// ---------------------------------------------------------------------------
// Alpha
@@ -405,20 +402,17 @@
AVIF_ITEM_COLOR,
AVIF_ITEM_ALPHA,
AVIF_ITEM_GAIN_MAP,
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
AVIF_ITEM_SAMPLE_TRANSFORM, // Sample Transform derived image item 'sato'.
// Extra input image items for AVIF_ITEM_SAMPLE_TRANSFORM. "Extra" because AVIF_ITEM_COLOR could be one too.
AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_COLOR,
AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_1_COLOR,
AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_ALPHA,
AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_1_ALPHA,
-#endif
AVIF_ITEM_CATEGORY_COUNT
} avifItemCategory;
avifBool avifIsAlpha(avifItemCategory itemCategory);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// AVIF allows up to 32 inputs for sample transforms but we only support a smaller number.
#define AVIF_SAMPLE_TRANSFORM_MAX_NUM_EXTRA_INPUT_IMAGE_ITEMS \
(AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_ALPHA - AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_COLOR)
@@ -428,7 +422,6 @@
#define AVIF_SAMPLE_TRANSFORM_MIN_CATEGORY AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_COLOR
#define AVIF_SAMPLE_TRANSFORM_MAX_CATEGORY \
(AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_ALPHA + AVIF_SAMPLE_TRANSFORM_MAX_NUM_EXTRA_INPUT_IMAGE_ITEMS - 1)
-#endif
// ---------------------------------------------------------------------------
// Grid AVIF images
diff --git a/src/avif.c b/src/avif.c
index a87710b..93bd1b1 100644
--- a/src/avif.c
+++ b/src/avif.c
@@ -75,42 +75,40 @@
{
// clang-format off
switch (result) {
- case AVIF_RESULT_OK: return "OK";
- case AVIF_RESULT_INVALID_FTYP: return "Invalid ftyp";
- case AVIF_RESULT_NO_CONTENT: return "No content";
- case AVIF_RESULT_NO_YUV_FORMAT_SELECTED: return "No YUV format selected";
- case AVIF_RESULT_REFORMAT_FAILED: return "Reformat failed";
- case AVIF_RESULT_UNSUPPORTED_DEPTH: return "Unsupported depth";
- case AVIF_RESULT_ENCODE_COLOR_FAILED: return "Encoding of color planes failed";
- case AVIF_RESULT_ENCODE_ALPHA_FAILED: return "Encoding of alpha plane failed";
- case AVIF_RESULT_BMFF_PARSE_FAILED: return "BMFF parsing failed";
- case AVIF_RESULT_MISSING_IMAGE_ITEM: return "Missing or empty image item";
- case AVIF_RESULT_DECODE_COLOR_FAILED: return "Decoding of color planes failed";
- case AVIF_RESULT_DECODE_ALPHA_FAILED: return "Decoding of alpha plane failed";
- case AVIF_RESULT_COLOR_ALPHA_SIZE_MISMATCH: return "Color and alpha planes size mismatch";
- case AVIF_RESULT_ISPE_SIZE_MISMATCH: return "Plane sizes don't match ispe values";
- case AVIF_RESULT_NO_CODEC_AVAILABLE: return "No codec available";
- case AVIF_RESULT_NO_IMAGES_REMAINING: return "No images remaining";
- case AVIF_RESULT_INVALID_EXIF_PAYLOAD: return "Invalid Exif payload";
- case AVIF_RESULT_INVALID_IMAGE_GRID: return "Invalid image grid";
- case AVIF_RESULT_INVALID_CODEC_SPECIFIC_OPTION: return "Invalid codec-specific option";
- case AVIF_RESULT_TRUNCATED_DATA: return "Truncated data";
- case AVIF_RESULT_IO_NOT_SET: return "IO not set";
- case AVIF_RESULT_IO_ERROR: return "IO Error";
- case AVIF_RESULT_WAITING_ON_IO: return "Waiting on IO";
- case AVIF_RESULT_INVALID_ARGUMENT: return "Invalid argument";
- case AVIF_RESULT_NOT_IMPLEMENTED: return "Not implemented";
- case AVIF_RESULT_OUT_OF_MEMORY: return "Out of memory";
- 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";
- 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";
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
+ case AVIF_RESULT_OK: return "OK";
+ case AVIF_RESULT_INVALID_FTYP: return "Invalid ftyp";
+ case AVIF_RESULT_NO_CONTENT: return "No content";
+ case AVIF_RESULT_NO_YUV_FORMAT_SELECTED: return "No YUV format selected";
+ case AVIF_RESULT_REFORMAT_FAILED: return "Reformat failed";
+ case AVIF_RESULT_UNSUPPORTED_DEPTH: return "Unsupported depth";
+ case AVIF_RESULT_ENCODE_COLOR_FAILED: return "Encoding of color planes failed";
+ case AVIF_RESULT_ENCODE_ALPHA_FAILED: return "Encoding of alpha plane failed";
+ case AVIF_RESULT_BMFF_PARSE_FAILED: return "BMFF parsing failed";
+ case AVIF_RESULT_MISSING_IMAGE_ITEM: return "Missing or empty image item";
+ case AVIF_RESULT_DECODE_COLOR_FAILED: return "Decoding of color planes failed";
+ case AVIF_RESULT_DECODE_ALPHA_FAILED: return "Decoding of alpha plane failed";
+ case AVIF_RESULT_COLOR_ALPHA_SIZE_MISMATCH: return "Color and alpha planes size mismatch";
+ case AVIF_RESULT_ISPE_SIZE_MISMATCH: return "Plane sizes don't match ispe values";
+ case AVIF_RESULT_NO_CODEC_AVAILABLE: return "No codec available";
+ case AVIF_RESULT_NO_IMAGES_REMAINING: return "No images remaining";
+ case AVIF_RESULT_INVALID_EXIF_PAYLOAD: return "Invalid Exif payload";
+ case AVIF_RESULT_INVALID_IMAGE_GRID: return "Invalid image grid";
+ case AVIF_RESULT_INVALID_CODEC_SPECIFIC_OPTION: return "Invalid codec-specific option";
+ case AVIF_RESULT_TRUNCATED_DATA: return "Truncated data";
+ case AVIF_RESULT_IO_NOT_SET: return "IO not set";
+ case AVIF_RESULT_IO_ERROR: return "IO Error";
+ case AVIF_RESULT_WAITING_ON_IO: return "Waiting on IO";
+ case AVIF_RESULT_INVALID_ARGUMENT: return "Invalid argument";
+ case AVIF_RESULT_NOT_IMPLEMENTED: return "Not implemented";
+ case AVIF_RESULT_OUT_OF_MEMORY: return "Out of memory";
+ 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";
+ 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";
case AVIF_RESULT_ENCODE_SAMPLE_TRANSFORM_FAILED: return "Encoding of sample transformed image failed";
case AVIF_RESULT_DECODE_SAMPLE_TRANSFORM_FAILED: return "Decoding of sample transformed image failed";
-#endif
case AVIF_RESULT_UNKNOWN_ERROR:
default:
break;
@@ -1017,12 +1015,10 @@
if (itemCategory == AVIF_ITEM_ALPHA) {
return AVIF_TRUE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (itemCategory >= AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_ALPHA &&
itemCategory < AVIF_ITEM_SAMPLE_TRANSFORM_INPUT_0_ALPHA + AVIF_SAMPLE_TRANSFORM_MAX_NUM_EXTRA_INPUT_IMAGE_ITEMS) {
return AVIF_TRUE;
}
-#endif
return AVIF_FALSE;
}
diff --git a/src/read.c b/src/read.c
index 8a3ed82..fdbbc10 100644
--- a/src/read.c
+++ b/src/read.c
@@ -832,16 +832,14 @@
// Contents of grpl box, which signal groups of entities (items or tracks).
avifEntityToGroups entityToGroups;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI)
- // If true, the fields above were extracted from a MinimizedImageBox.
- avifBool fromMiniBox;
-#endif
-
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Parsed from Sample Transform metadata if present, otherwise empty.
avifSampleTransformExpression sampleTransformExpression;
// Bit depth extracted from the pixi property of the Sample Transform derived image item, if any.
uint32_t sampleTransformDepth;
+
+#if defined(AVIF_ENABLE_EXPERIMENTAL_MINI)
+ // If true, the fields above were extracted from a MinimizedImageBox.
+ avifBool fromMiniBox;
#endif
} avifMeta;
@@ -876,9 +874,7 @@
avifArrayDestroy(&meta->items);
avifPropertyArrayDestroy(&meta->properties);
avifRWDataFree(&meta->idat);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
avifArrayDestroy(&meta->sampleTransformExpression);
-#endif
for (uint32_t i = 0; i < meta->entityToGroups.count; ++i) {
avifArrayDestroy(&meta->entityToGroups.groups[i].entityIDs);
}
@@ -984,12 +980,10 @@
// in the image bitstream, i.e. if the property is present, colour information in
// the bitstream shall be ignored.
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Remember the dimg association order to the Sample Transform derived image item.
// Colour items only. The alpha items are implicit.
uint8_t sampleTransformNumInputImageItems; // At most AVIF_SAMPLE_TRANSFORM_MAX_NUM_INPUT_IMAGE_ITEMS.
avifItemCategory sampleTransformInputImageItems[AVIF_SAMPLE_TRANSFORM_MAX_NUM_INPUT_IMAGE_ITEMS];
-#endif
} avifDecoderData;
static void avifDecoderDataDestroy(avifDecoderData * data);
@@ -2222,7 +2216,6 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// bit_depth is assumed to be 2 (32-bit).
static avifResult avifParseSampleTransformTokens(avifROStream * s, avifSampleTransformExpression * expression)
{
@@ -2335,7 +2328,6 @@
AVIF_CHECKERR(avifPropertyArrayFind(&item->properties, "clap") == NULL, AVIF_RESULT_NOT_IMPLEMENTED);
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// Extracts the codecType from the item type or from its children.
// Also parses and outputs grid information if the item is a grid.
@@ -2376,9 +2368,8 @@
*codecType = avifGetCodecType(item->type);
AVIF_ASSERT_OR_RETURN(*codecType != AVIF_CODEC_TYPE_UNKNOWN);
}
- // TODO(yguyon): If AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM is defined, backward-incompatible
- // files with a primary 'sato' Sample Transform derived image item could be
- // handled here (compared to backward-compatible files with a 'sato' item in the
+ // TODO(yguyon): Backward-incompatible files with a primary 'sato' Sample Transform derived image item
+ // could be handled here (compared to backward-compatible files with a 'sato' item in the
// same 'altr' group as the primary regular color item which are handled in
// avifDecoderDataFindSampleTransformImageItem() below).
return AVIF_RESULT_OK;
@@ -5302,13 +5293,11 @@
if (data->tileInfos[c].tileCount > 0) {
++numImageBuffers;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// The sample operations require multiple buffers for compositing so no plane is stolen
// when there is a 'sato' Sample Transform derived image item.
if (c >= AVIF_SAMPLE_TRANSFORM_MIN_CATEGORY && c <= AVIF_SAMPLE_TRANSFORM_MAX_CATEGORY && data->tileInfos[c].tileCount > 0) {
continue;
}
-#endif
if (data->tileInfos[c].tileCount == 1) {
++numStolenImageBuffers;
}
@@ -5880,7 +5869,6 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Finds a 'sato' Sample Transform derived image item box.
// If found, fills 'sampleTransformItem'. Otherwise, sets 'sampleTransformItem' to NULL.
// Returns AVIF_RESULT_OK on success (whether or not a 'sato' box was found).
@@ -5903,7 +5891,6 @@
*sampleTransformItem = NULL;
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
static avifResult avifDecoderGenerateImageTiles(avifDecoder * decoder, avifTileInfo * info, avifDecoderItem * item, avifItemCategory itemCategory)
{
@@ -6218,7 +6205,6 @@
}
}
-#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)).
avifDecoderItem * sampleTransformItem = NULL;
AVIF_CHECKRES(avifDecoderDataFindSampleTransformImageItem(data, &sampleTransformItem));
@@ -6317,7 +6303,6 @@
AVIF_ASSERT_OR_RETURN(pixiProp != NULL);
data->meta->sampleTransformDepth = pixiProp->u.pixi.planeDepths[0];
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// Find Exif and/or XMP metadata, if any
AVIF_CHECKRES(avifDecoderFindMetadata(decoder, data->meta, decoder->image, mainItems[AVIF_ITEM_COLOR]->id));
@@ -6497,12 +6482,10 @@
}
AVIF_CHECKRES(avifReadCodecConfigProperty(decoder->image, colorProperties, colorCodecType));
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (decoder->data->meta->sampleTransformExpression.count > 0) {
AVIF_ASSERT_OR_RETURN(decoder->data->meta->sampleTransformDepth != 0);
decoder->image->depth = decoder->data->meta->sampleTransformDepth;
}
-#endif
// Expose as raw bytes all other properties that libavif does not care about.
for (size_t i = 0; i < colorProperties->count; ++i) {
@@ -6596,11 +6579,9 @@
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return AVIF_RESULT_DECODE_GAIN_MAP_FAILED;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (itemCategory >= AVIF_SAMPLE_TRANSFORM_MIN_CATEGORY && itemCategory <= AVIF_SAMPLE_TRANSFORM_MAX_CATEGORY) {
return AVIF_RESULT_DECODE_SAMPLE_TRANSFORM_FAILED;
}
-#endif
return avifIsAlpha(itemCategory) ? AVIF_RESULT_DECODE_ALPHA_FAILED : AVIF_RESULT_DECODE_COLOR_FAILED;
}
@@ -6673,7 +6654,6 @@
const avifBool isGrid = (info->grid.rows > 0) && (info->grid.columns > 0);
avifBool stealPlanes = !isGrid;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (decoder->data->meta->sampleTransformExpression.count > 0) {
// Keep everything as a copy for now.
stealPlanes = AVIF_FALSE;
@@ -6684,7 +6664,6 @@
// The expression will be applied in avifDecoderNextImage() below instead, once all the tiles are available.
continue;
}
-#endif
if (!stealPlanes) {
avifImage * dstImage = decoder->image;
@@ -6746,7 +6725,6 @@
return AVIF_TRUE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
static avifResult avifDecoderApplySampleTransform(const avifDecoder * decoder, avifImage * dstImage)
{
if (dstImage->depth != decoder->data->meta->sampleTransformDepth) {
@@ -6802,7 +6780,6 @@
}
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
avifResult avifDecoderNextImage(avifDecoder * decoder)
{
@@ -6872,12 +6849,10 @@
AVIF_ASSERT_OR_RETURN(prepareTileResult[c] == AVIF_RESULT_OK);
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (decoder->data->meta->sampleTransformExpression.count > 0) {
// TODO(yguyon): Add a field in avifDecoder and only perform sample transformations upon request.
AVIF_CHECKRES(avifDecoderApplySampleTransform(decoder, decoder->image));
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// Only advance decoder->imageIndex once the image is completely decoded, so that
// avifDecoderNthImage(decoder, decoder->imageIndex + 1) is equivalent to avifDecoderNextImage(decoder)
@@ -7030,12 +7005,10 @@
return 0;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (decoder->data->meta->sampleTransformExpression.count > 0) {
// TODO(yguyon): Support incremental Sample Transforms
return 0;
}
-#endif
if ((info->grid.rows > 0) && (info->grid.columns > 0)) {
// Grid of AVIF tiles (not to be confused with AV1 tiles).
diff --git a/src/write.c b/src/write.c
index 1720bc7..28eefa3 100644
--- a/src/write.c
+++ b/src/write.c
@@ -496,9 +496,7 @@
encoder->headerFormat = AVIF_HEADER_DEFAULT;
encoder->creationTime = 0;
encoder->modificationTime = 0;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
encoder->sampleTransformRecipe = AVIF_SAMPLE_TRANSFORM_NONE;
-#endif
return encoder;
}
@@ -541,9 +539,7 @@
encoder->data->lastTileRowsLog2 = encoder->data->tileRowsLog2;
encoder->data->lastTileColsLog2 = encoder->data->tileColsLog2;
lastEncoder->scalingMode = encoder->scalingMode;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
lastEncoder->sampleTransformRecipe = encoder->sampleTransformRecipe;
-#endif
}
// This function detects changes made on avifEncoder. It returns true on success (i.e., if every
@@ -597,11 +593,9 @@
*encoderChanges |= AVIF_ENCODER_CHANGE_CODEC_SPECIFIC;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (lastEncoder->sampleTransformRecipe != encoder->sampleTransformRecipe) {
return AVIF_FALSE;
}
-#endif
return AVIF_TRUE;
}
@@ -1067,7 +1061,6 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
static avifResult avifEncoderWriteSampleTransformTokens(avifRWStream * s, const avifSampleTransformExpression * expression)
{
AVIF_ASSERT_OR_RETURN(expression->count <= 255);
@@ -1112,7 +1105,6 @@
avifRWStreamFinishWrite(&s);
return AVIF_RESULT_OK;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
static avifResult avifEncoderDataCreateExifItem(avifEncoderData * data, const avifRWData * exif)
{
@@ -1230,9 +1222,7 @@
static const char infeNameColor[] = "Color";
static const char infeNameAlpha[] = "Alpha";
static const char infeNameGainMap[] = "GMap";
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
static const char infeNameSampleTransform[] = "SampleTransform";
-#endif
static const char * getInfeName(avifItemCategory itemCategory)
{
@@ -1242,11 +1232,9 @@
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return infeNameGainMap;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (itemCategory >= AVIF_SAMPLE_TRANSFORM_MIN_CATEGORY && itemCategory <= AVIF_SAMPLE_TRANSFORM_MAX_CATEGORY) {
return infeNameSampleTransform;
}
-#endif
return infeNameColor;
}
@@ -1297,7 +1285,6 @@
return AVIF_RESULT_OK;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
static avifResult avifEncoderCreateBitDepthExtensionItems(avifEncoder * encoder,
uint32_t gridCols,
uint32_t gridRows,
@@ -1546,7 +1533,6 @@
}
return result;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
static avifCodecType avifEncoderGetCodecType(const avifEncoder * encoder)
{
@@ -1590,12 +1576,10 @@
if (itemCategory == AVIF_ITEM_GAIN_MAP) {
return AVIF_RESULT_ENCODE_GAIN_MAP_FAILED;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (itemCategory == AVIF_ITEM_SAMPLE_TRANSFORM ||
(itemCategory >= AVIF_SAMPLE_TRANSFORM_MIN_CATEGORY && itemCategory <= AVIF_SAMPLE_TRANSFORM_MAX_CATEGORY)) {
return AVIF_RESULT_ENCODE_SAMPLE_TRANSFORM_FAILED;
}
-#endif
return avifIsAlpha(itemCategory) ? AVIF_RESULT_ENCODE_ALPHA_FAILED : AVIF_RESULT_ENCODE_COLOR_FAILED;
}
@@ -1724,13 +1708,9 @@
const avifImage * firstCell = cellImages[0];
const avifImage * bottomRightCell = cellImages[cellCount - 1];
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
AVIF_CHECKERR(firstCell->depth == 8 || firstCell->depth == 10 || firstCell->depth == 12 ||
(firstCell->depth == 16 && encoder->sampleTransformRecipe != AVIF_SAMPLE_TRANSFORM_NONE),
AVIF_RESULT_UNSUPPORTED_DEPTH);
-#else
- AVIF_CHECKERR(firstCell->depth == 8 || firstCell->depth == 10 || firstCell->depth == 12, AVIF_RESULT_UNSUPPORTED_DEPTH);
-#endif
AVIF_CHECKERR(firstCell->yuvFormat != AVIF_PIXEL_FORMAT_NONE, AVIF_RESULT_NO_YUV_FORMAT_SELECTED);
if (!firstCell->width || !firstCell->height || !bottomRightCell->width || !bottomRightCell->height) {
return AVIF_RESULT_NO_CONTENT;
@@ -1961,7 +1941,6 @@
gainMapItem->dimgFromID = toneMappedItemID;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_8B_8B ||
encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_4B ||
encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_8B_OVERLAP_4B) {
@@ -1972,7 +1951,6 @@
} else {
AVIF_CHECKERR(encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_NONE, AVIF_RESULT_NOT_IMPLEMENTED);
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// -----------------------------------------------------------------------
// Create metadata items (Exif, XMP)
@@ -2066,7 +2044,6 @@
: (item->itemCategory == AVIF_ITEM_GAIN_MAP) ? encoder->data->quantizerGainMap
: encoder->data->quantizer;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Remember original quantizer values in case they change, to reset them afterwards.
int * encoderMinQuantizer = isAlpha ? &encoder->minQuantizerAlpha : &encoder->minQuantizer;
int * encoderMaxQuantizer = isAlpha ? &encoder->maxQuantizerAlpha : &encoder->maxQuantizer;
@@ -2099,7 +2076,6 @@
cellImagePlaceholder = sampleTransformedImage; // Transfer ownership.
cellImage = cellImagePlaceholder;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// If alpha channel is present, set disableLaggedOutput to AVIF_TRUE. If the encoder supports it, this enables
// avifEncoderDataShouldForceKeyframeForAlpha to force a keyframe in the alpha channel whenever a keyframe has been
@@ -2115,14 +2091,12 @@
/*disableLaggedOutput=*/encoder->data->alphaPresent,
addImageFlags,
item->encodeOutput);
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Revert quality settings if they changed.
if (*encoderMinQuantizer != originalMinQuantizer || *encoderMaxQuantizer != originalMaxQuantizer) {
avifEncoderBackupSettings(encoder); // Remember last encoding settings for next avifEncoderDetectChanges().
*encoderMinQuantizer = originalMinQuantizer;
*encoderMaxQuantizer = originalMaxQuantizer;
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
if (cellImagePlaceholder) {
avifImageDestroy(cellImagePlaceholder);
}
@@ -2366,11 +2340,9 @@
return AVIF_FALSE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (encoder->sampleTransformRecipe != AVIF_SAMPLE_TRANSFORM_NONE) {
return AVIF_FALSE;
}
-#endif
// Check for maximum field values and maximum chunk sizes.
@@ -2881,12 +2853,10 @@
if (isToneMappedImage) {
hasIpmaToWrite = AVIF_TRUE;
}
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
const avifBool isSampleTransformImage = !memcmp(item->type, "sato", 4);
if (isSampleTransformImage) {
hasIpmaToWrite = AVIF_TRUE;
}
-#endif
item->associations.count = 0;
if (!hasIpmaToWrite) {
continue;
@@ -2959,7 +2929,6 @@
}
const avifBool isAlpha = avifIsAlpha(item->itemCategory);
uint8_t depth = (uint8_t)itemMetadata->depth;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
if (encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_8B_8B ||
encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_4B ||
encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_BIT_DEPTH_EXTENSION_12B_8B_OVERLAP_4B) {
@@ -2981,7 +2950,7 @@
AVIF_CHECKERR(encoder->sampleTransformRecipe == AVIF_SAMPLE_TRANSFORM_NONE, AVIF_RESULT_NOT_IMPLEMENTED);
}
assert(isSampleTransformImage == (item->itemCategory == AVIF_ITEM_SAMPLE_TRANSFORM));
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
+
if (hasPixi) {
avifItemPropertyDedupStart(dedup);
uint8_t channelCount = (isAlpha || (itemMetadata->yuvFormat == AVIF_PIXEL_FORMAT_YUV400)) ? 1 : 3;
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 329af41..dab2c74 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -75,11 +75,7 @@
endif()
if(AVIF_GTEST)
- if(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
- add_avif_gtest_with_data(avif16bittest)
- add_avif_gtest(avifsampletransformtest)
- endif()
-
+ add_avif_gtest_with_data(avif16bittest)
add_avif_gtest(avifallocationtest)
add_avif_gtest_with_data(avifalphanoispetest)
add_avif_gtest(avifalphapremtest)
@@ -132,6 +128,7 @@
add_avif_gtest(avifrgbtest)
add_avif_gtest(avifrgbtoyuvtest)
add_avif_gtest(avifrgbtoyuvthreadingtest)
+ add_avif_gtest(avifsampletransformtest)
add_avif_gtest_with_data(avifscaletest)
add_avif_gtest_with_data(avifsize0test)
add_avif_gtest(avifstreamtest)
@@ -146,12 +143,21 @@
add_avif_gtest(avify4mtest)
if(NOT AVIF_CODEC_AOM OR NOT AVIF_CODEC_AOM_ENCODE)
- # These tests are supported with aom being the encoder. If the aom encoder is unavailable,
- # these tests are disabled because other codecs may not implement all the necessary features.
- # For example, SVT-AV1 requires 4:2:0 images with even dimensions of at least 64x64 px.
set_tests_properties(
- avifallocationtest avifgridapitest avifincrtest aviflosslesstest avifmetadatatest avifpixitest PROPERTIES DISABLED
- True
+ # These tests are supported with aom being the encoder. If the aom encoder is unavailable,
+ # these tests are disabled because other codecs may not implement all the necessary features.
+ # For example, SVT-AV1 requires 4:2:0 images with even dimensions of at least 64x64 px.
+ avifallocationtest
+ avifgridapitest
+ avifincrtest
+ aviflosslesstest
+ avifmetadatatest
+ avifpixitest
+ # rav1e and svt do not support encoder changes (potentially different bit depth between
+ # primary item and bit depth extension).
+ avif16bittest
+ avifaltrtest
+ PROPERTIES DISABLED True
)
message(STATUS "Some tests are disabled because aom is unavailable for encoding.")
@@ -328,6 +334,7 @@
set_tests_properties(aviftest PROPERTIES DISABLED True)
if(AVIF_GTEST)
set_tests_properties(
+ avif16bittest
avifallocationtest
avifaltrtest
avifbasictest
@@ -356,9 +363,6 @@
if(AVIF_ENABLE_JPEG_GAIN_MAP_CONVERSION)
set_tests_properties(avifjpeggainmaptest PROPERTIES DISABLED True)
endif()
- if(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
- set_tests_properties(avif16bittest PROPERTIES DISABLED True)
- endif()
endif()
if(AVIF_BUILD_APPS)
diff --git a/tests/gtest/avifaltrtest.cc b/tests/gtest/avifaltrtest.cc
index cd40b5e..2889504 100644
--- a/tests/gtest/avifaltrtest.cc
+++ b/tests/gtest/avifaltrtest.cc
@@ -11,12 +11,6 @@
#include "aviftest_helpers.h"
#include "gtest/gtest.h"
-#if !defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
-// Make sure this test is compiled with
-// AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM enabled when libavif is.
-enum avifSampleTransformRecipe {}; // Redefinition error otherwise.
-#endif
-
namespace avif {
namespace {
@@ -25,7 +19,6 @@
//------------------------------------------------------------------------------
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
// Verifies that avifDecoderParse() takes the 'sato' image item from the same
// 'atlr' group as the primary item into account.
TEST(AltrTest, SampleTransformDepthEqualToInput) {
@@ -57,7 +50,6 @@
// std::ofstream("weld_sato_12B_8B_q0.avif", std::ios::binary)
// .write(reinterpret_cast<char*>(encoded.data), encoded.size);
}
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
// Verifies that avifDecoderNextImage() returns the same sample bit depth as
// avifDecoderParse().
@@ -72,11 +64,7 @@
ASSERT_EQ(avifDecoderParse(decoder.get()), AVIF_RESULT_OK);
const uint32_t depth = decoder->image->depth;
-#if defined(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM)
EXPECT_EQ(depth, 16);
-#else
- EXPECT_EQ(depth, 12);
-#endif // AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM
ASSERT_EQ(avifDecoderNextImage(decoder.get()), AVIF_RESULT_OK);
EXPECT_EQ(decoder->image->depth, depth);
diff --git a/tests/test_all_configurations.sh b/tests/test_all_configurations.sh
index e9a95ec..14d479d 100755
--- a/tests/test_all_configurations.sh
+++ b/tests/test_all_configurations.sh
@@ -33,7 +33,6 @@
-DAVIF_ENABLE_NODISCARD=ON \
-DAVIF_ENABLE_WERROR=ON \
-DAVIF_ENABLE_EXPERIMENTAL_MINI=${EXPERIMENTAL} \
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=${EXPERIMENTAL} \
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=${EXPERIMENTAL} \
-DAVIF_BUILD_APPS=ON -DAVIF_BUILD_EXAMPLES=ON \
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL \
@@ -55,7 +54,6 @@
-DAVIF_ENABLE_NODISCARD=ON \
-DAVIF_ENABLE_WERROR=ON \
-DAVIF_ENABLE_EXPERIMENTAL_MINI=${EXPERIMENTAL} \
- -DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=${EXPERIMENTAL} \
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=${EXPERIMENTAL} \
-DAVIF_BUILD_APPS=ON -DAVIF_BUILD_EXAMPLES=ON \
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL \