Replace containerChromaSubsamplingX, containerChromaSubsamplingY, and containerMonochrome with containerYUVFormat
diff --git a/src/avif.c b/src/avif.c
index 6d98729..e7fe4c9 100644
--- a/src/avif.c
+++ b/src/avif.c
@@ -59,6 +59,7 @@
case AVIF_PIXEL_FORMAT_YUV400:
info->chromaShiftX = 1; // ignored, but some codecs might use 420 for mono
info->chromaShiftY = 1; // ignored, but some codecs might use 420 for mono
+ info->monochrome = AVIF_TRUE;
break;
case AVIF_PIXEL_FORMAT_YV12:
diff --git a/src/read.c b/src/read.c
index 4308db4..98eae1b 100644
--- a/src/read.c
+++ b/src/read.c
@@ -2319,19 +2319,25 @@
if (configBox) {
decoder->containerDepth = avifCodecConfigurationBoxGetDepth(configBox);
- decoder->containerChromaSubsamplingX = configBox->chromaSubsamplingX;
- decoder->containerChromaSubsamplingY = configBox->chromaSubsamplingY;
- decoder->containerMonochrome = (configBox->monochrome != 0);
+ if (configBox->monochrome) {
+ decoder->containerYUVFormat = AVIF_PIXEL_FORMAT_YUV400;
+ } else {
+ if (configBox->chromaSubsamplingX && configBox->chromaSubsamplingY) {
+ decoder->containerYUVFormat = AVIF_PIXEL_FORMAT_YUV420;
+ } else if (configBox->chromaSubsamplingX) {
+ decoder->containerYUVFormat = AVIF_PIXEL_FORMAT_YUV422;
+
+ } else {
+ decoder->containerYUVFormat = AVIF_PIXEL_FORMAT_YUV444;
+ }
+ }
decoder->containerChromaSamplePosition = (avifChromaSamplePosition)configBox->chromaSamplePosition;
} else {
// I believe this path is very, very unlikely. An av1C box should be mandatory
// in all valid AVIF configurations.
decoder->containerDepth = 0;
- decoder->containerChromaSubsamplingX = 0; // TODO: use sentinel value here?
- decoder->containerChromaSubsamplingY = 0; // TODO: use sentinel value here?
+ decoder->containerYUVFormat = AVIF_PIXEL_FORMAT_YUV444;
decoder->containerChromaSamplePosition = AVIF_CHROMA_SAMPLE_POSITION_UNKNOWN;
-
- decoder->containerMonochrome = AVIF_FALSE;
}
return avifDecoderFlush(decoder);