public override void Shutdown() { var bw = writer.binaryWriter; long pos = bw.Seek(0, SeekOrigin.Current); bw.Seek(offsets.avih + 4 * 4, SeekOrigin.Begin); bw.Write(totalFramesOld); // avih.dwTotalFrames bw.Seek(offsets.videoStrh + 8 * 4, SeekOrigin.Begin); bw.Write(totalFrames); // strh[vids].dwLength bw.Seek(offsets.dmlh, SeekOrigin.Begin); bw.Write(totalFrames); // dmlh.dwTotalFrames if (hasAudioStream) { bw.Seek(offsets.audioStrh + 8 * 4, SeekOrigin.Begin); bw.Write(totalSamples); // strh[auds].dwLength } bw.BaseStream.Seek(pos, SeekOrigin.Begin); if (videoIndex.entries.Count > 0) { WriteChunkIndex(writer, videoIndex, offsets.videoIndx, ref videoSuperIndexEntryCount, offsets.indexBase, maxSuperindexEntries); } if (hasAudioStream && audioIndex.entries.Count > 0) { WriteChunkIndex(writer, audioIndex, offsets.audioIndx, ref audioSuperIndexEntryCount, offsets.indexBase, maxSuperindexEntries); } writer.EndList(); // end of movi writer.EndRiff(); writer.Close(); }