Skip to content

Commit 906a8a5

Browse files
authored
Allow YCgCoRe and YCgCoRo decoding. (#2078)
Now that the https://www.itu.int/rec/T-REC-H.273 update is out published, we can allow for decoding by default. Encoding will come once decoding is sufficiently deployed.
1 parent b2b97a4 commit 906a8a5

17 files changed

+53
-126
lines changed

.github/workflows/ci-fuzztest.yml

-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ jobs:
4545
-DAVIF_LIBYUV=${{ matrix.libyuv }}
4646
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
4747
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
48-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
4948
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
5049
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
5150
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

.github/workflows/ci-unix-shared-local.yml

-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ jobs:
5454
-DAVIF_LIBYUV=${{ matrix.libyuv }}
5555
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
5656
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
57-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
5857
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
5958
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
6059
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

.github/workflows/ci-unix-static.yml

-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ jobs:
5959
-DAVIF_LIBSHARPYUV=LOCAL -DAVIF_LIBXML2=LOCAL -DAVIF_LIBYUV=LOCAL
6060
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
6161
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
62-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
6362
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
6463
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
6564
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

.github/workflows/ci-windows-installed.yml

-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ jobs:
7373
-DAVIF_LIBYUV=SYSTEM -DAVIF_ZLIBPNG=SYSTEM
7474
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
7575
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
76-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
7776
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
7877
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
7978
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

.github/workflows/ci-windows-shared-local.yml

-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ jobs:
5454
-DAVIF_LIBYUV=LOCAL -DAVIF_ZLIBPNG=LOCAL
5555
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
5656
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
57-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
5857
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
5958
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
6059
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

.github/workflows/ci-windows.yml

-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ jobs:
6767
-DAVIF_LIBYUV=LOCAL -DAVIF_ZLIBPNG=LOCAL
6868
-DAVIF_BUILD_EXAMPLES=ON -DAVIF_BUILD_APPS=ON
6969
-DAVIF_BUILD_TESTS=ON -DAVIF_GTEST=LOCAL
70-
-DAVIF_ENABLE_EXPERIMENTAL_YCGCO_R=ON
7170
-DAVIF_ENABLE_EXPERIMENTAL_MINI=ON
7271
-DAVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM=ON
7372
-DAVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI=ON

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ The changes are relative to the previous release, unless the baseline is specifi
5858
avifCropRectFromCleanApertureBox() and avifCleanApertureBoxFromCropRect().
5959
* Reject non-essential transformative properties.
6060
* Treat avifenc --stdin as a regular positional file path argument.
61+
* Allow YCgCo_Re and YCgCo_Ro encoding/decoding.
6162

6263
## [1.1.1] - 2024-07-30
6364

CMakeLists.txt

-5
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ option(BUILD_SHARED_LIBS "Build shared avif library" ON)
6464

6565
option(AVIF_ENABLE_WERROR "Treat all compiler warnings as errors" OFF)
6666

67-
option(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R "Enable experimental YCgCo-R matrix code" OFF)
6867
option(AVIF_ENABLE_EXPERIMENTAL_MINI "Enable experimental reduced header" OFF)
6968
option(AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM "Enable experimental sample transform code" OFF)
7069
option(AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI "Enable experimental PixelInformationProperty syntax from HEIF 3rd Ed. Amd2" OFF)
@@ -340,10 +339,6 @@ if(AVIF_ENABLE_COVERAGE)
340339
endif()
341340
endif()
342341

343-
if(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
344-
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
345-
endif()
346-
347342
if(AVIF_ENABLE_EXPERIMENTAL_MINI)
348343
add_compile_definitions(AVIF_ENABLE_EXPERIMENTAL_MINI)
349344
endif()

apps/avifenc.c

+6-19
Original file line numberDiff line numberDiff line change
@@ -2019,17 +2019,10 @@ int main(int argc, char * argv[])
20192019
}
20202020
// Matrix coefficients.
20212021
if (settings.cicpExplicitlySet) {
2022-
avifBool incompatibleMC = (settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_IDENTITY);
2023-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
2024-
incompatibleMC &= (settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_YCGCO_RE &&
2025-
settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_YCGCO_RO);
2026-
#endif
2027-
if (incompatibleMC) {
2028-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
2022+
if (settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_IDENTITY &&
2023+
settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_YCGCO_RE &&
2024+
settings.matrixCoefficients != AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) {
20292025
fprintf(stderr, "Matrix coefficients have to be identity, YCgCo-Re, or YCgCo-Ro in lossless mode.\n");
2030-
#else
2031-
fprintf(stderr, "Matrix coefficients have to be identity in lossless mode.\n");
2032-
#endif
20332026
goto cleanup;
20342027
}
20352028
} else {
@@ -2480,17 +2473,11 @@ int main(int argc, char * argv[])
24802473
lossless = AVIF_FALSE;
24812474
}
24822475

2483-
avifBool matrixCoefficientsAreLosslessCompatible = usingIdentityMatrix;
2484-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
2485-
matrixCoefficientsAreLosslessCompatible |= (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE ||
2486-
image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO);
2487-
#endif
2476+
avifBool matrixCoefficientsAreLosslessCompatible = usingIdentityMatrix ||
2477+
image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE ||
2478+
image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO;
24882479
if (!matrixCoefficientsAreLosslessCompatible && !using400) {
2489-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
24902480
fprintf(stderr, "WARNING: [--lossless] Input data was RGB and matrixCoefficients isn't set to identity (--cicp x/x/0) or YCgCo-Re/Ro (--cicp x/x/16 or x/x/17); Output might not be lossless.\n");
2491-
#else
2492-
fprintf(stderr, "WARNING: [--lossless] Input data was RGB and matrixCoefficients isn't set to identity (--cicp x/x/0); Output might not be lossless.\n");
2493-
#endif
24942481
lossless = AVIF_FALSE;
24952482
}
24962483
}

apps/shared/avifjpeg.c

+7-16
Original file line numberDiff line numberDiff line change
@@ -938,34 +938,25 @@ static avifBool avifJPEGReadInternal(FILE * f,
938938

939939
avif->width = cinfo.output_width;
940940
avif->height = cinfo.output_height;
941-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
942-
const avifBool useYCgCoR = (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE ||
943-
avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO);
944-
#endif
941+
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) {
942+
fprintf(stderr, "AVIF_MATRIX_COEFFICIENTS_YCGCO_RO cannot be used with JPEG because it has an even bit depth.\n");
943+
goto cleanup;
944+
}
945945
if (avif->yuvFormat == AVIF_PIXEL_FORMAT_NONE) {
946946
// Identity and YCgCo-R are only valid with YUV444.
947-
avif->yuvFormat = (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_IDENTITY
948-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
949-
|| useYCgCoR
950-
#endif
951-
)
947+
avif->yuvFormat = (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_IDENTITY ||
948+
avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE)
952949
? AVIF_PIXEL_FORMAT_YUV444
953950
: AVIF_APP_DEFAULT_PIXEL_FORMAT;
954951
}
955952
avif->depth = requestedDepth ? requestedDepth : 8;
956-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
957-
if (useYCgCoR) {
958-
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) {
959-
fprintf(stderr, "AVIF_MATRIX_COEFFICIENTS_YCGCO_RO cannot be used with JPEG because it has an even bit depth.\n");
960-
goto cleanup;
961-
}
953+
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE) {
962954
if (requestedDepth && requestedDepth != 10) {
963955
fprintf(stderr, "Cannot request %u bits for YCgCo-Re as it uses 2 extra bits.\n", requestedDepth);
964956
goto cleanup;
965957
}
966958
avif->depth = 10;
967959
}
968-
#endif
969960
avifRGBImageSetDefaults(&rgb, avif);
970961
rgb.format = AVIF_RGB_FORMAT_RGB;
971962
rgb.chromaDownsampling = chromaDownsampling;

apps/shared/avifpng.c

+3-13
Original file line numberDiff line numberDiff line change
@@ -317,21 +317,15 @@ avifBool avifPNGRead(const char * inputFilename,
317317
avif->width = rawWidth;
318318
avif->height = rawHeight;
319319
avif->yuvFormat = requestedFormat;
320-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
321320
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) {
322321
fprintf(stderr, "AVIF_MATRIX_COEFFICIENTS_YCGCO_RO cannot be used with PNG because it has an even bit depth.\n");
323322
goto cleanup;
324323
}
325-
const avifBool useYCgCoR = (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE);
326-
#endif
327324
if (avif->yuvFormat == AVIF_PIXEL_FORMAT_NONE) {
328325
if ((rawColorType == PNG_COLOR_TYPE_GRAY) || (rawColorType == PNG_COLOR_TYPE_GRAY_ALPHA)) {
329326
avif->yuvFormat = AVIF_PIXEL_FORMAT_YUV400;
330-
} else if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_IDENTITY
331-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
332-
|| useYCgCoR
333-
#endif
334-
) {
327+
} else if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_IDENTITY ||
328+
avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE) {
335329
// Identity and YCgCo-R are only valid with YUV444.
336330
avif->yuvFormat = AVIF_PIXEL_FORMAT_YUV444;
337331
} else {
@@ -346,8 +340,7 @@ avifBool avifPNGRead(const char * inputFilename,
346340
avif->depth = 12;
347341
}
348342
}
349-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
350-
if (useYCgCoR) {
343+
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE) {
351344
if (imgBitDepth != 8) {
352345
fprintf(stderr, "AVIF_MATRIX_COEFFICIENTS_YCGCO_RE cannot be used on 16 bit input because it adds two bits.\n");
353346
goto cleanup;
@@ -358,7 +351,6 @@ avifBool avifPNGRead(const char * inputFilename,
358351
}
359352
avif->depth = 10;
360353
}
361-
#endif
362354

363355
if (!ignoreColorProfile) {
364356
char * iccpProfileName = NULL;
@@ -541,7 +533,6 @@ avifBool avifPNGWrite(const char * outputFilename, const avifImage * avif, uint3
541533
if (rgbDepth == 0) {
542534
rgbDepth = (avif->depth > 8) ? 16 : 8;
543535
}
544-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
545536
if (avif->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) {
546537
fprintf(stderr, "AVIF_MATRIX_COEFFICIENTS_YCGCO_RO cannot be used with PNG because it has an even bit depth.\n");
547538
goto cleanup;
@@ -558,7 +549,6 @@ avifBool avifPNGWrite(const char * outputFilename, const avifImage * avif, uint3
558549

559550
rgbDepth = 8;
560551
}
561-
#endif
562552

563553
volatile avifBool monochrome8bit = (avif->yuvFormat == AVIF_PIXEL_FORMAT_YUV400) && !avif->alphaPlane && (avif->depth == 8) &&
564554
(rgbDepth == 8);

include/avif/avif.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,8 @@ enum
402402
AVIF_MATRIX_COEFFICIENTS_CHROMA_DERIVED_NCL = 12,
403403
AVIF_MATRIX_COEFFICIENTS_CHROMA_DERIVED_CL = 13,
404404
AVIF_MATRIX_COEFFICIENTS_ICTCP = 14,
405-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
406-
AVIF_MATRIX_COEFFICIENTS_YCGCO_RE = 16,
407-
AVIF_MATRIX_COEFFICIENTS_YCGCO_RO = 17,
408-
#endif
405+
AVIF_MATRIX_COEFFICIENTS_YCGCO_RE = 16, // Added to libavif in Feb 2025
406+
AVIF_MATRIX_COEFFICIENTS_YCGCO_RO = 17, // Added to libavif in Feb 2025
409407
AVIF_MATRIX_COEFFICIENTS_LAST
410408
};
411409
typedef uint16_t avifMatrixCoefficients; // AVIF_MATRIX_COEFFICIENTS_*

include/avif/internal.h

+2-4
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,8 @@ typedef enum avifReformatMode
273273
AVIF_REFORMAT_MODE_YUV_COEFFICIENTS = 0, // Normal YUV conversion using coefficients
274274
AVIF_REFORMAT_MODE_IDENTITY, // Pack GBR directly into YUV planes (AVIF_MATRIX_COEFFICIENTS_IDENTITY)
275275
AVIF_REFORMAT_MODE_YCGCO, // YUV conversion using AVIF_MATRIX_COEFFICIENTS_YCGCO
276-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
277-
AVIF_REFORMAT_MODE_YCGCO_RE, // YUV conversion using AVIF_MATRIX_COEFFICIENTS_YCGCO_RE
278-
AVIF_REFORMAT_MODE_YCGCO_RO, // YUV conversion using AVIF_MATRIX_COEFFICIENTS_YCGCO_RO
279-
#endif
276+
AVIF_REFORMAT_MODE_YCGCO_RE, // YUV conversion using AVIF_MATRIX_COEFFICIENTS_YCGCO_RE
277+
AVIF_REFORMAT_MODE_YCGCO_RO, // YUV conversion using AVIF_MATRIX_COEFFICIENTS_YCGCO_RO
280278
} avifReformatMode;
281279

282280
typedef enum avifAlphaMultiplyMode

src/reformat.c

+2-22
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,6 @@ avifBool avifGetRGBColorSpaceInfo(const avifRGBImage * rgb, avifRGBColorSpaceInf
9696

9797
avifBool avifGetYUVColorSpaceInfo(const avifImage * image, avifYUVColorSpaceInfo * info)
9898
{
99-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
100-
const avifBool useYCgCo = (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE) ||
101-
(image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO);
102-
#endif
103-
10499
AVIF_CHECK(image->depth == 8 || image->depth == 10 || image->depth == 12 || image->depth == 16);
105100
AVIF_CHECK(image->yuvFormat >= AVIF_PIXEL_FORMAT_YUV444 && image->yuvFormat < AVIF_PIXEL_FORMAT_COUNT);
106101
AVIF_CHECK(image->yuvRange == AVIF_RANGE_LIMITED || image->yuvRange == AVIF_RANGE_FULL);
@@ -110,11 +105,8 @@ avifBool avifGetYUVColorSpaceInfo(const avifImage * image, avifYUVColorSpaceInfo
110105
// YCgCo performs limited-full range adjustment on R,G,B but the current implementation performs range adjustment
111106
// on Y,U,V. So YCgCo with limited range is unsupported.
112107
if ((image->matrixCoefficients == 3 /* CICP reserved */) ||
113-
((image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO
114-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
115-
|| useYCgCo
116-
#endif
117-
) &&
108+
((image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO || image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE ||
109+
image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO) &&
118110
(image->yuvRange == AVIF_RANGE_LIMITED)) ||
119111
(image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_BT2020_CL) ||
120112
(image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_SMPTE2085) ||
@@ -146,7 +138,6 @@ avifBool avifGetYUVColorSpaceInfo(const avifImage * image, avifYUVColorSpaceInfo
146138

147139
static avifBool avifPrepareReformatState(const avifImage * image, const avifRGBImage * rgb, avifReformatState * state)
148140
{
149-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
150141
const avifBool useYCgCoRe = (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RE);
151142
const avifBool useYCgCoRo = (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO_RO);
152143
if (useYCgCoRe || useYCgCoRo) {
@@ -155,7 +146,6 @@ static avifBool avifPrepareReformatState(const avifImage * image, const avifRGBI
155146
return AVIF_FALSE;
156147
}
157148
}
158-
#endif
159149

160150
AVIF_CHECK(avifGetRGBColorSpaceInfo(rgb, &state->rgb));
161151
AVIF_CHECK(avifGetYUVColorSpaceInfo(image, &state->yuv));
@@ -166,12 +156,10 @@ static avifBool avifPrepareReformatState(const avifImage * image, const avifRGBI
166156
state->yuv.mode = AVIF_REFORMAT_MODE_IDENTITY;
167157
} else if (image->matrixCoefficients == AVIF_MATRIX_COEFFICIENTS_YCGCO) {
168158
state->yuv.mode = AVIF_REFORMAT_MODE_YCGCO;
169-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
170159
} else if (useYCgCoRe) {
171160
state->yuv.mode = AVIF_REFORMAT_MODE_YCGCO_RE;
172161
} else if (useYCgCoRo) {
173162
state->yuv.mode = AVIF_REFORMAT_MODE_YCGCO_RO;
174-
#endif
175163
}
176164

177165
if (state->yuv.mode != AVIF_REFORMAT_MODE_YUV_COEFFICIENTS) {
@@ -196,12 +184,8 @@ static int avifYUVColorSpaceInfoUVToUNorm(avifYUVColorSpaceInfo * info, float v)
196184

197185
// YCgCo performs limited-full range adjustment on R,G,B but the current implementation performs range adjustment
198186
// on Y,U,V. So YCgCo with limited range is unsupported.
199-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
200187
assert((info->mode != AVIF_REFORMAT_MODE_YCGCO && info->mode != AVIF_REFORMAT_MODE_YCGCO_RE && info->mode != AVIF_REFORMAT_MODE_YCGCO_RO) ||
201188
(info->range == AVIF_RANGE_FULL));
202-
#else
203-
assert((info->mode != AVIF_REFORMAT_MODE_YCGCO) || (info->range == AVIF_RANGE_FULL));
204-
#endif
205189

206190
if (info->mode == AVIF_REFORMAT_MODE_IDENTITY) {
207191
unorm = (int)avifRoundf(v * info->rangeY + info->biasY);
@@ -359,7 +343,6 @@ avifResult avifImageRGBToYUV(avifImage * image, const avifRGBImage * rgb)
359343
yuvBlock[bI][bJ].y = 0.5f * rgbPixel[1] + 0.25f * (rgbPixel[0] + rgbPixel[2]);
360344
yuvBlock[bI][bJ].u = 0.5f * rgbPixel[1] - 0.25f * (rgbPixel[0] + rgbPixel[2]);
361345
yuvBlock[bI][bJ].v = 0.5f * (rgbPixel[0] - rgbPixel[2]);
362-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
363346
} else if (state.yuv.mode == AVIF_REFORMAT_MODE_YCGCO_RE || state.yuv.mode == AVIF_REFORMAT_MODE_YCGCO_RO) {
364347
// Formulas 58,59,60,61 from https://www.itu.int/rec/T-REC-H.273-202407-P
365348
const int R = (int)avifRoundf(AVIF_CLAMP(rgbPixel[0] * rgbMaxChannelF, 0.0f, rgbMaxChannelF));
@@ -371,7 +354,6 @@ avifResult avifImageRGBToYUV(avifImage * image, const avifRGBImage * rgb)
371354
yuvBlock[bI][bJ].y = (t + (Cg >> 1)) / state.yuv.rangeY;
372355
yuvBlock[bI][bJ].u = Cg / state.yuv.rangeUV;
373356
yuvBlock[bI][bJ].v = Co / state.yuv.rangeUV;
374-
#endif
375357
} else {
376358
float Y = (kr * rgbPixel[0]) + (kg * rgbPixel[1]) + (kb * rgbPixel[2]);
377359
yuvBlock[bI][bJ].y = Y;
@@ -769,7 +751,6 @@ static avifResult avifImageYUVAnyToRGBAnySlow(const avifImage * image,
769751
G = Y + Cb;
770752
B = t - Cr;
771753
R = t + Cr;
772-
#if defined(AVIF_ENABLE_EXPERIMENTAL_YCGCO_R)
773754
} else if (state->yuv.mode == AVIF_REFORMAT_MODE_YCGCO_RE || state->yuv.mode == AVIF_REFORMAT_MODE_YCGCO_RO) {
774755
// YCgCoRe/YCgCoRo: Formulas 62,63,64,65 from https://www.itu.int/rec/T-REC-H.273-202407-P
775756
const int YY = unormY;
@@ -782,7 +763,6 @@ static avifResult avifImageYUVAnyToRGBAnySlow(const avifImage * image,
782763
G /= rgbMaxChannelF;
783764
B /= rgbMaxChannelF;
784765
R /= rgbMaxChannelF;
785-
#endif
786766
} else {
787767
// Normal YUV
788768
R = Y + (2 * (1 - kr)) * Cr;

0 commit comments

Comments
 (0)