void SyncWriteFileHeader() { riffChunk = new RiffChunk(this.stream); riffChunk.WriteFourCC(RiffAviFourCCCode.Avi); RiffChunk listHdrl = riffChunk.AddChild(RiffAviFourCCCode.List); listHdrl.WriteFourCC(RiffAviFourCCCode.Hdrl); RiffChunk avihChunk = listHdrl.AddChild(RiffAviFourCCCode.Avih); WriteAvihHeaderStructure(avihChunk); avihChunk.Close(); RiffChunk listStrl = listHdrl.AddChild(RiffAviFourCCCode.List); listStrl.WriteFourCC(RiffAviFourCCCode.Strl); RiffChunk strhChunk = listStrl.AddChild(RiffAviFourCCCode.Strh); WriteStrhHeaderStructure(strhChunk); strhChunk.Close(); RiffChunk strfChunk = listStrl.AddChild(RiffAviFourCCCode.Strf); WriteStrfHeaderStructure(strfChunk); strfChunk.Close(); listStrl.Close(); listHdrl.Close(); listMovi = riffChunk.AddChild(RiffAviFourCCCode.List); listMovi.WriteFourCC(RiffAviFourCCCode.Movi); }
void WriteStrhHeaderStructure(RiffChunk chunk) { chunk.WriteFourCC(RiffAviFourCCCode.Vids); // 'vids' chunk.WriteFourCC(RiffAviFourCCCode.Dib); // 'DIB ' chunk.WriteDWORD(0); // flags chunk.WriteWORD(0); // priority chunk.WriteWORD(0); // language chunk.WriteDWORD(0); // initial frames chunk.WriteDWORD(1); // scale chunk.WriteDWORD(framesPerSecond); // rate chunk.WriteDWORD(0); // start strhFrameCountBookmark = chunk.WriteAndBookmarkDWORD(0); // frameCount chunk.WriteDWORD(width * height * 4); // suggested buffer size chunk.WriteDWORD(0); // quality chunk.WriteDWORD(0); // sample size chunk.WriteDWORD(0); // left chunk.WriteDWORD(0); // top chunk.WriteDWORD((ushort)width); // right chunk.WriteDWORD((ushort)height); // bottom }