Revert "Add avifDecoderNthImageReady() avifIO helper function" This reverts commit 19c914a4a9eb0e087677c1d529f817bdacfebe86.
diff --git a/src/read.c b/src/read.c index 6fcf7f1..306f16e 100644 --- a/src/read.c +++ b/src/read.c
@@ -2758,49 +2758,30 @@ return avifDecoderFlush(decoder); } -avifResult avifDecoderNthImageReady(avifDecoder * decoder, uint32_t frameIndex) +avifResult avifDecoderNextImage(avifDecoder * decoder) { - if (!decoder->data) { - // Nothing has been parsed yet - return AVIF_RESULT_NO_CONTENT; - } - if (!decoder->io || !decoder->io->read) { return AVIF_RESULT_IO_NOT_SET; } - if ((frameIndex > INT_MAX) || ((int)frameIndex >= decoder->imageCount)) { - // Impossible index - return AVIF_RESULT_NO_IMAGES_REMAINING; - } + uint32_t nextImageIndex = (uint32_t)(decoder->imageIndex + 1); // Acquire all sample data for the current image first, allowing for any read call to bail out // 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]; - if (frameIndex >= tile->input->samples.count) { + if (nextImageIndex >= tile->input->samples.count) { return AVIF_RESULT_NO_IMAGES_REMAINING; } - avifDecodeSample * sample = &tile->input->samples.sample[frameIndex]; + avifDecodeSample * sample = &tile->input->samples.sample[nextImageIndex]; avifResult prepareResult = avifDecoderPrepareSample(decoder, sample, 0); if (prepareResult != AVIF_RESULT_OK) { return prepareResult; } } - return AVIF_RESULT_OK; -} -avifResult avifDecoderNextImage(avifDecoder * decoder) -{ - const uint32_t nextImageIndex = (uint32_t)(decoder->imageIndex + 1); - - avifResult readyResult = avifDecoderNthImageReady(decoder, nextImageIndex); - if (readyResult != AVIF_RESULT_OK) { - return readyResult; - } - - // Decode all tiles now that the sample data is ready. + // Decode all frames now that the sample data is ready. for (unsigned int tileIndex = 0; tileIndex < decoder->data->tiles.count; ++tileIndex) { avifTile * tile = &decoder->data->tiles.tile[tileIndex]; @@ -2978,11 +2959,6 @@ avifBool avifDecoderIsKeyframe(const avifDecoder * decoder, uint32_t frameIndex) { - if (!decoder->data) { - // Nothing has been parsed yet - return AVIF_FALSE; - } - if ((decoder->data->tiles.count > 0) && decoder->data->tiles.tile[0].input) { if (frameIndex < decoder->data->tiles.tile[0].input->samples.count) { return decoder->data->tiles.tile[0].input->samples.sample[frameIndex].sync; @@ -2993,11 +2969,6 @@ uint32_t avifDecoderNearestKeyframe(const avifDecoder * decoder, uint32_t frameIndex) { - if (!decoder->data) { - // Nothing has been parsed yet - return 0; - } - for (; frameIndex != 0; --frameIndex) { if (avifDecoderIsKeyframe(decoder, frameIndex)) { break;