MCPcopy Create free account
hub / github.com/AOMediaCodec/libavif / avifDecoderNthImageTiming

Function avifDecoderNthImageTiming

src/read.c:7064–7098  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7062}
7063
7064avifResult avifDecoderNthImageTiming(const avifDecoder * decoder, uint32_t frameIndex, avifImageTiming * outTiming)
7065{
7066 if (!decoder->data) {
7067 // Nothing has been parsed yet
7068 return AVIF_RESULT_NO_CONTENT;
7069 }
7070
7071 if ((frameIndex > INT_MAX) || ((int)frameIndex >= decoder->imageCount)) {
7072 // Impossible index
7073 return AVIF_RESULT_NO_IMAGES_REMAINING;
7074 }
7075
7076 if (!decoder->data->sourceSampleTable) {
7077 // There isn't any real timing associated with this decode, so
7078 // just hand back the defaults chosen in avifDecoderReset().
7079 *outTiming = decoder->imageTiming;
7080 return AVIF_RESULT_OK;
7081 }
7082
7083 outTiming->timescale = decoder->timescale;
7084 outTiming->ptsInTimescales = 0;
7085 for (uint32_t imageIndex = 0; imageIndex < frameIndex; ++imageIndex) {
7086 outTiming->ptsInTimescales += avifSampleTableGetImageDelta(decoder->data->sourceSampleTable, imageIndex);
7087 }
7088 outTiming->durationInTimescales = avifSampleTableGetImageDelta(decoder->data->sourceSampleTable, frameIndex);
7089
7090 if (outTiming->timescale > 0) {
7091 outTiming->pts = (double)outTiming->ptsInTimescales / (double)outTiming->timescale;
7092 outTiming->duration = (double)outTiming->durationInTimescales / (double)outTiming->timescale;
7093 } else {
7094 outTiming->pts = 0.0;
7095 outTiming->duration = 0.0;
7096 }
7097 return AVIF_RESULT_OK;
7098}
7099
7100avifResult avifDecoderNthImage(avifDecoder * decoder, uint32_t frameIndex)
7101{

Callers 2

avifDecoderNextImageFunction · 0.85
FUNCFunction · 0.85

Calls 1

Tested by

no test coverage detected