예제 #1
0
 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);
     }
 }
예제 #2
0
        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);
        }