Exemple #1
0
        /// <summary>
        /// Finalize
        /// Open all temp files for reading, then write contents out to final destination file.
        /// </summary>
        public void FinalizeBox()
        {
            if (!fragmented)
            {
                // final stts entry (careful with this: call only for very LAST sample)
                WriteToSttsTempFile();

                SttsCountsStream.Position    = 0L;
                SttsTimeDeltaStream.Position = 0L;
                SampleSizeStream.Position    = 0L;
                SyncSampleMapStream.Position = 0L;

                SttsCountsReader    = new BinaryReader(SttsCountsStream);
                SttsTimeDeltaReader = new BinaryReader(SttsTimeDeltaStream);
                SampleSizeReader    = new BinaryReader(SampleSizeStream);
                SyncSampleMapReader = new BinaryReader(SyncSampleMapStream);

                DecodingTimeToSampleBox.FinalizeBox(SttsCountsReader, SttsTimeDeltaReader, (uint)CurrSttsCount);
                SampleToChunkBox.FinalizeBox(); // calls ChunkOffsetBox.FinalizeBox also ?
                SampleSizeBox.FinalizeBox(SampleSizeReader, SampleIndex - 1);

                SampleToChunkBox.ChunkOffsetWriter.BaseStream.Position = 0L;
                BinaryReader ChunkOffsetReader = new BinaryReader(SampleToChunkBox.ChunkOffsetWriter.BaseStream);
                ChunkOffSetBox.FinalizeBox(ChunkOffsetReader);

                if (SyncSampleMapBox != null)
                {
                    SyncSampleMapBox.FinalizeBox(SyncSampleMapReader, (uint)CurrSyncSampleMapCount);
                }

                if (CompositionTimeToSample != null && CompositionTimeToSample.EntryCount > 0)
                {
                    CompositionTimeToSample.FinalizeBox();
                }
            }

            this.Size += DecodingTimeToSampleBox.Size;
            this.Size += SampleToChunkBox.Size;
            this.Size += SampleSizeBox.Size;
            this.Size += ChunkOffSetBox.Size;
            if (SyncSampleMapBox != null)
            {
                this.Size += SyncSampleMapBox.Size;
            }
            if (CompositionTimeToSample != null && CompositionTimeToSample.EntryCount > 0)
            {
                this.Size += CompositionTimeToSample.Size;
            }
            this.Size += SampleDescriptionsBox.Size;
        }