Delay failures of AV1 codecs not existing to frame decoding, to allow libavif to perform AVIF parsing without any AV1 codecs
diff --git a/src/read.c b/src/read.c
index 7a95690..080a459 100644
--- a/src/read.c
+++ b/src/read.c
@@ -3112,12 +3112,11 @@
for (unsigned int i = 0; i < decoder->data->tiles.count; ++i) {
avifTile * tile = &decoder->data->tiles.tile[i];
tile->codec = avifCodecCreateInternal(decoder->codecChoice);
- if (!tile->codec) {
- return AVIF_RESULT_NO_CODEC_AVAILABLE;
+ if (tile->codec) {
+ tile->codec->diag = &decoder->diag;
+ tile->codec->operatingPoint = tile->operatingPoint;
+ tile->codec->allLayers = tile->input->allLayers;
}
- tile->codec->diag = &decoder->diag;
- tile->codec->operatingPoint = tile->operatingPoint;
- tile->codec->allLayers = tile->input->allLayers;
}
return AVIF_RESULT_OK;
}
@@ -3614,6 +3613,12 @@
// with AVIF_RESULT_WAITING_ON_IO harmlessly / idempotently.
for (unsigned int tileIndex = 0; tileIndex < decoder->data->tiles.count; ++tileIndex) {
avifTile * tile = &decoder->data->tiles.tile[tileIndex];
+
+ // Ensure there's an AV1 codec available before doing anything else
+ if (!tile->codec) {
+ return AVIF_RESULT_NO_CODEC_AVAILABLE;
+ }
+
if (nextImageIndex >= tile->input->samples.count) {
return AVIF_RESULT_NO_IMAGES_REMAINING;
}