Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        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()));
        }