1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Class for reading (x)or writing to an AVI file. 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Note: the class cannot be used for reading and writing at the same time. 13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_MODULES_MEDIA_FILE_SOURCE_AVI_FILE_H_ 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_MODULES_MEDIA_FILE_SOURCE_AVI_FILE_H_ 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 17083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org#include <list> 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 193eba48c58401b1b8421dd99d10abb47555e2f56cpbos@webrtc.org#include "webrtc/typedefs.h" 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc { 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass CriticalSectionWrapper; 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct AVISTREAMHEADER 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVISTREAMHEADER(); 27283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t fcc; 28283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t cb; 29283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t fccType; 30283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t fccHandler; 31283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwFlags; 32283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t wPriority; 33283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t wLanguage; 34283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwInitialFrames; 35283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwScale; 36283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwRate; 37283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwStart; 38283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwLength; 39283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwSuggestedBufferSize; 40283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwQuality; 41283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwSampleSize; 42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 44283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int16_t left; 45283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int16_t top; 46283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int16_t right; 47283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int16_t bottom; 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } rcFrame; 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct BITMAPINFOHEADER 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BITMAPINFOHEADER(); 54283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biSize; 55283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biWidth; 56283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biHeight; 57283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t biPlanes; 58283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t biBitCount; 59283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biCompression; 60283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biSizeImage; 61283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biXPelsPerMeter; 62283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biYPelsPerMeter; 63283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biClrUsed; 64283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t biClrImportant; 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgstruct WAVEFORMATEX 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WAVEFORMATEX(); 70283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t wFormatTag; 71283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t nChannels; 72283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t nSamplesPerSec; 73283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t nAvgBytesPerSec; 74283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t nBlockAlign; 75283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t wBitsPerSample; 76283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint16_t cbSize; 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgclass AviFile 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgpublic: 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum AVIStreamType 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVI_AUDIO = 0, 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVI_VIDEO = 1 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // Unsigned, for comparison with must-be-unsigned types. 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static const unsigned int CODEC_CONFIG_LENGTH = 64; 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org static const unsigned int STREAM_NAME_LENGTH = 32; 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AviFile(); 93b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org ~AviFile(); 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 95283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t Open(AVIStreamType streamType, const char* fileName, 96283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org bool loop = false); 97b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 98283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t CreateVideoStream(const AVISTREAMHEADER& videoStreamHeader, 99283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org const BITMAPINFOHEADER& bitMapInfoHeader, 100283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org const uint8_t* codecConfigParams, 101283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t codecConfigParamsLength); 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 103283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t CreateAudioStream(const AVISTREAMHEADER& audioStreamHeader, 104283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org const WAVEFORMATEX& waveFormatHeader); 105283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t Create(const char* fileName); 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 107283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAudio(const uint8_t* data, int32_t length); 108283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteVideo(const uint8_t* data, int32_t length); 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 110283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t GetVideoStreamInfo(AVISTREAMHEADER& videoStreamHeader, 111283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org BITMAPINFOHEADER& bitmapInfo, 112283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org char* codecConfigParameters, 113283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t& configLength); 114b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 115283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t GetDuration(int32_t& durationMs); 116b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 117283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t GetAudioStreamInfo(WAVEFORMATEX& waveHeader); 118b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 119283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadAudio(uint8_t* data, int32_t& length); 120283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadVideo(uint8_t* data, int32_t& length); 121b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 122283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t Close(); 123b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 124283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org static uint32_t MakeFourCc(uint8_t ch0, uint8_t ch1, uint8_t ch2, 125283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint8_t ch3); 126b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 127b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 128b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org enum AVIFileMode 129b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 130b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org NotSet, 131b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Read, 132b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org Write 133b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 134b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 135b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct AVIINDEXENTRY 136b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 137283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org AVIINDEXENTRY(uint32_t inckid, uint32_t indwFlags, 138283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t indwChunkOffset, 139283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t indwChunkLength); 140283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t ckid; 141283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwFlags; 142283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwChunkOffset; 143283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwChunkLength; 144b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 145b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 146283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t PrepareDataChunkHeaders(); 147b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 148283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadMoviSubChunk(uint8_t* data, int32_t& length, uint32_t tag1, 149283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t tag2 = 0); 150b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 151283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteRIFF(); 152283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteHeaders(); 153283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIMainHeader(); 154283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIStreamHeaders(); 155283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIVideoStreamHeaders(); 156283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIVideoStreamHeaderChunks(); 157283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIAudioStreamHeaders(); 158283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteAVIAudioStreamHeaderChunks(); 159b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 160283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t WriteMoviStart(); 161b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 162283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t PutByte(uint8_t byte); 163283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t PutLE16(uint16_t word); 164283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t PutLE32(uint32_t word); 165283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t PutBuffer(const uint8_t* str, size_t size); 166b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t PutBufferZ(const char* str); 167b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org long PutLE32LengthFromCurrent(long startPos); 168283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org void PutLE32AtPos(long pos, uint32_t word); 169b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 170283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t GetByte(uint8_t& word); 171283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t GetLE16(uint16_t& word); 172283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t GetLE32(uint32_t& word); 173283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org size_t GetBuffer(uint8_t* str, size_t size); 174b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 175b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void CloseRead(); 176b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void CloseWrite(); 177b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 178b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void ResetMembers(); 179b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void ResetComplexMembers(); 180b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 181283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadRIFF(); 182283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadHeaders(); 183283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadAVIMainHeader(); 184283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadAVIVideoStreamHeader(int32_t endpos); 185283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t ReadAVIAudioStreamHeader(int32_t endpos); 186b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 187283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t StreamAndTwoCharCodeToTag(int32_t streamNum, 188283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org const char* twoCharCode); 189b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 190b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void ClearIndexList(); 191283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org void AddChunkToIndexList(uint32_t inChunkId, uint32_t inFlags, 192283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t inOffset, uint32_t inSize); 193b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 194b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org void WriteIndex(); 195b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 196b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgprivate: 197083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org typedef std::list<AVIINDEXENTRY*> IndexList; 198b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct AVIMAINHEADER 199b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 200b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIMAINHEADER(); 201283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t fcc; 202283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t cb; 203283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwMicroSecPerFrame; 204283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwMaxBytesPerSec; 205283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwPaddingGranularity; 206283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwFlags; 207283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwTotalFrames; 208283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwInitialFrames; 209283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwStreams; 210283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwSuggestedBufferSize; 211283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwWidth; 212283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwHeight; 213283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t dwReserved[4]; 214b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 215b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 216b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct AVIStream 217b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 218b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIStreamType streamType; 219b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org int streamNumber; 220b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org }; 221b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 222b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org CriticalSectionWrapper* _crit; 223b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org FILE* _aviFile; 224b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIMAINHEADER _aviHeader; 225b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVISTREAMHEADER _videoStreamHeader; 226b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVISTREAMHEADER _audioStreamHeader; 227b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org BITMAPINFOHEADER _videoFormatHeader; 228b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org WAVEFORMATEX _audioFormatHeader; 229b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 230283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int8_t _videoConfigParameters[CODEC_CONFIG_LENGTH]; 231283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _videoConfigLength; 232283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int8_t _videoStreamName[STREAM_NAME_LENGTH]; 233283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int8_t _audioConfigParameters[CODEC_CONFIG_LENGTH]; 234283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int8_t _audioStreamName[STREAM_NAME_LENGTH]; 235b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 236b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIStream _videoStream; 237b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIStream _audioStream; 238b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 239283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _nrStreams; 240283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _aviLength; 241283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _dataLength; 242b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _bytesRead; 243b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _dataStartByte; 244283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _framesRead; 245283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _videoFrames; 246283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _audioFrames; 247b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 248b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _reading; 249b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIStreamType _openedAs; 250b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _loop; 251b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _writing; 252b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 253b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _bytesWritten; 254b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 255b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _riffSizeMark; 256b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _moviSizeMark; 257b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _totNumFramesMark; 258b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _videoStreamLengthMark; 259b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org size_t _audioStreamLengthMark; 260283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _moviListOffset; 261b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 262b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _writeAudioStream; 263b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _writeVideoStream; 264b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 265b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org AVIFileMode _aviMode; 266283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint8_t* _videoCodecConfigParams; 267283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org int32_t _videoCodecConfigParamsLength; 268b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 269283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t _videoStreamDataChunkPrefix; 270283c29a5c34c18c5ef6860a32d1b7ce2eeb0ab5epbos@webrtc.org uint32_t _audioStreamDataChunkPrefix; 271b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org bool _created; 272b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 273083049f2945b2924203b25c8428300d40d994f35henrike@webrtc.org IndexList _indexList; 274b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}; 2753b89e10f31160da35b408fd00cb8f89d2b08862dpbos@webrtc.org} // namespace webrtc 276b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 277b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // WEBRTC_MODULES_MEDIA_FILE_SOURCE_AVI_FILE_H_ 278