private void WriteStreamName(IAviStream stream) { if (!string.IsNullOrEmpty(stream.Name)) { var bytes = Encoding.ASCII.GetBytes(stream.Name); var chunk = fileWriter.OpenChunk(KnownFourCCs.Chunks.StreamName); fileWriter.Write(bytes); fileWriter.Write((byte)0); fileWriter.CloseItem(chunk); } }
private void WriteStreamSuperIndex(IAviStream stream) { var superIndex = streamsInfo[stream.Index].SuperIndex; // See AVISUPERINDEX structure var chunk = fileWriter.OpenChunk(KnownFourCCs.Chunks.StreamIndex); fileWriter.Write((ushort)4); // DWORDs per entry fileWriter.Write((byte)0); // index sub-type fileWriter.Write((byte)IndexType.Indexes); // index type fileWriter.Write((uint)superIndex.Count); // entries count fileWriter.Write((uint)((IAviStreamInternal)stream).ChunkId); // chunk ID of the stream fileWriter.SkipBytes(3 * sizeof(uint)); // reserved // entries foreach (var entry in superIndex) { fileWriter.Write((ulong)entry.ChunkOffset); // offset of sub-index chunk fileWriter.Write((uint)entry.ChunkSize); // size of sub-index chunk fileWriter.Write((uint)entry.Duration); // duration of sub-index data (number of frames it refers to) } fileWriter.CloseItem(chunk); }