internal SampleTable(Mp4Reader reader) { Debug.Assert(reader.currentBox == eBoxType.stbl); entries = null; timeToSample = null; sampleToChunk = null; sampleSize = null; chunkOffset = null; compositionToSample = null; syncSampleTable = null; foreach (eBoxType boxType in reader.readChildren()) { switch (boxType) { case eBoxType.stsd: entries = parseSampleTable(reader); break; case eBoxType.stts: timeToSample = TimingTables.readTimeToSample(reader); break; case eBoxType.ctts: compositionToSample = CompositionTimeDeltas.read(reader); break; case eBoxType.stsc: sampleToChunk = TimingTables.readSampleToChunk(reader); break; case eBoxType.stsz: sampleSize = TimingTables.readSampleSize(reader); break; case eBoxType.stz2: sampleSize = TimingTables.readSampleSizeCompact(reader); break; case eBoxType.stco: chunkOffset = TimingTables.readOffsets32(reader); break; case eBoxType.co64: chunkOffset = TimingTables.readOffsets64(reader); break; case eBoxType.stss: syncSampleTable = TimingTables.readSyncSample(reader); break; default: reader.skipCurrentBox(); break; } } }
public static SampleSizeTable readSampleSize(Mp4Reader reader) { Debug.Assert(reader.currentBox == eBoxType.stsz); sSampleSizeBox box = reader.readStructure <sSampleSizeBox>(); if (box.sample_size != 0) { return(new SampleSizeFixed(box.sample_size.endian(), box.sample_count.endian())); } return(SampleSizeTable.createVariable(reader, box.sample_count.endian())); }