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

Function avifParseSampleTableBox

src/read.c:3768–3807  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3766}
3767
3768static avifResult avifParseSampleTableBox(avifTrack * track, uint64_t rawOffset, const uint8_t * raw, size_t rawLen, avifDiagnostics * diag)
3769{
3770 if (track->sampleTable) {
3771 // A TrackBox may only have one SampleTable
3772 avifDiagnosticsPrintf(diag, "Duplicate Box[stbl] for a single track detected");
3773 return AVIF_RESULT_BMFF_PARSE_FAILED;
3774 }
3775 track->sampleTable = avifSampleTableCreate();
3776 AVIF_CHECKERR(track->sampleTable != NULL, AVIF_RESULT_OUT_OF_MEMORY);
3777
3778 BEGIN_STREAM(s, raw, rawLen, diag, "Box[stbl]");
3779
3780 while (avifROStreamHasBytesLeft(&s, 1)) {
3781 avifBoxHeader header;
3782 AVIF_CHECKERR(avifROStreamReadBoxHeader(&s, &header), AVIF_RESULT_BMFF_PARSE_FAILED);
3783
3784 if (!memcmp(header.type, "stco", 4)) {
3785 AVIF_CHECKRES(avifParseChunkOffsetBox(track->sampleTable, AVIF_FALSE, avifROStreamCurrent(&s), header.size, diag));
3786 } else if (!memcmp(header.type, "co64", 4)) {
3787 AVIF_CHECKRES(avifParseChunkOffsetBox(track->sampleTable, AVIF_TRUE, avifROStreamCurrent(&s), header.size, diag));
3788 } else if (!memcmp(header.type, "stsc", 4)) {
3789 AVIF_CHECKRES(avifParseSampleToChunkBox(track->sampleTable, avifROStreamCurrent(&s), header.size, diag));
3790 } else if (!memcmp(header.type, "stsz", 4)) {
3791 AVIF_CHECKRES(avifParseSampleSizeBox(track->sampleTable, avifROStreamCurrent(&s), header.size, diag));
3792 } else if (!memcmp(header.type, "stss", 4)) {
3793 AVIF_CHECKRES(avifParseSyncSampleBox(track->sampleTable, avifROStreamCurrent(&s), header.size, diag));
3794 } else if (!memcmp(header.type, "stts", 4)) {
3795 AVIF_CHECKRES(avifParseTimeToSampleBox(track->sampleTable, avifROStreamCurrent(&s), header.size, diag));
3796 } else if (!memcmp(header.type, "stsd", 4)) {
3797 AVIF_CHECKRES(avifParseSampleDescriptionBox(track->sampleTable,
3798 rawOffset + avifROStreamOffset(&s),
3799 avifROStreamCurrent(&s),
3800 header.size,
3801 diag));
3802 }
3803
3804 AVIF_CHECKERR(avifROStreamSkip(&s, header.size), AVIF_RESULT_BMFF_PARSE_FAILED);
3805 }
3806 return AVIF_RESULT_OK;
3807}
3808
3809static avifResult avifParseMediaInformationBox(avifTrack * track, uint64_t rawOffset, const uint8_t * raw, size_t rawLen, avifDiagnostics * diag)
3810{

Callers 1

Calls 13

avifDiagnosticsPrintfFunction · 0.85
avifSampleTableCreateFunction · 0.85
avifROStreamHasBytesLeftFunction · 0.85
avifParseChunkOffsetBoxFunction · 0.85
avifROStreamCurrentFunction · 0.85
avifParseSampleSizeBoxFunction · 0.85
avifParseSyncSampleBoxFunction · 0.85
avifParseTimeToSampleBoxFunction · 0.85
avifROStreamOffsetFunction · 0.85

Tested by

no test coverage detected