struct avi_file //AVI文件的开始
{
char riff[4];//四个字符RIFF
LONG file_size;//文件大小,不包括riff,file_size字段,小字节顺序
char file_type[4];//文件类型,四个字符:AVI
struct header_list //AVI头部信息块的开始
{
char list[4];//四个字符LIST,表示列表
LONG list_size;//列表大小,不包括list,size_list字段,小字节顺序
char list_type[4];//四个字符,列表类型,如hdrl
struct avi_header_list //avi头部列表开始
{
char avih[4];//四个字符avih,表示avi的头部信息
LONG avih_size;//avi的头部信息的大小
struct MainAVIHeader
{
}
}
struct Stream_Header_list(video)//AVI流头部列表
{
char list[4];//"LIST"
LONG list_size;
char list_type[4];//"strl"数据流类型
struct Stream_header//strh块,流头部
{
char block[4];//"strh",表示流头部
LONG list_size;//流头部大小
struct AVIStreamHeader
{
}
}
struct Stream_Format//流格式块
{
char block[4];//"strf"
LONG block_size;
struct bitmapInfo
{
struct bitmapInfoHeader//位图信息头部结构
{
}
RGBQUAD bmiColors[1];//颜色表
}
}
}
struct Stream_Header_list(audio)
{
char list[4];//"LIST"
LONG list_size;
char list_type[4];//"strl"
struct Stream_header
{
char list[4];//"strh"
LONG list_size;
struct aviStreamHeader
{
}
}
struct Stream_Format
{
char list[4];//"strf"
LONG list_size;
struct wavformatex
{
}
}
}
}
struct JUNK //option 可选
{
char list[4];//四个字符LIST,表示列表
LONG list_size;//列表大小,不包括list,size_list字段,小字节顺序
char list_type[4];//四个字符,列表类型,如movi
}
struct movieList //媒体数据整体数据的开始
{
char list[4];//四个字符"LIST"
ULONG list_size;//整个媒体块的大小,字节数
char movi[4];//"movi"表示视频媒体块的开始
struct //一帧媒体数据的开始
{
char flag[4];//"00db"表示视频"00wb"表示音频
ULONG data_size;//一帧视频或音频大小
char data[data_size]
}
}
struct avioldindex
{
FOURCC fcc;//必须为idx1
DWORD cb; //本数据结构的大小,不包括最初的8字节(fcc和cb两个域)
struct avioldindex_enty //表征每一帧的属性
{
DWORD dwChunkId;//表征本数据块的四字符码
DWORD dwFlags;//说明本数据块是不是关键帧,是不是rec列表等信息
DWORD dwOffset;//本数据块在文件中的偏移量
DWORD dwSize;//本数据块的大小
}aIndex[];//只是一个数组,为每个媒体数据块(一帧)定义一个索引值
}AVIOLDINDEX
}
struct MainAVIHeader
{
DWORD dwMicroSecPerFrame;//显示每帧所需的时间ns,定义avi的显示速率
DWORD dwMaxBytesPerSec;//最大的数据传输率
DWORD dwPaddingGranularity;//记录块的长度需为此值的倍数,通常是2048
DWORD dwFlages;//AVI文件的特殊属性,如是否包含索引块,音视频数据是否交叉存储
DWORD dwTotalFrame;//文件中的总帧数
DWORD dwInitialFrames;//说明在开始播放前需要多少帧
DWORD dwStreams;//文件中包含的数据流种类
DWORD dwSuggestedBufferSize;//建议使用的缓冲区大小;通常为存储一帧图像以及同步声音所需要的数据之和
DWORD dwWidth;//图像宽
DWORD dwHeight;//图像高
DWORD dwReserved[4];//保留
}MainAVIHeader
struct AVIStreamHeader
{
FOURCC fccType;//4字节,表示数据流的种类,vids表示视频数据流,auds音频数据流
FOURCC fccHandler;//4字节,表示数据流解压缩的驱动程序代号
DWORD dwFlags;//数据流属性
WORD wPriotity;//此数据流的播放优先级
WORD wLanguage;音频的语言代号
DWORD dwInitalFrames;//说明在开始播放前需要多少帧
DWORD dwScale;//数据量,视频每帧的大小或者音频的采样大小
DWORD dwRate;//dwScale/dwRate=每秒的采样数
DWORD dwStart;//数据流开始播放的位置,以dwScale为单位
DWORD dwLength;//数据流的数据量,以dwScale为单位
DWORD dwSuggestedBufferSize;//建议缓冲区的大小
DWORD dwQuality;//解压缩质量参数,值越大,质量越好
DWORD dwSampleSize;//音频的采样大小
RECT rcFrame;视频图像所占的矩形
}AVIStreamHeader
struct bitmapInfo
{
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];//颜色表
}BITMAPINFO
struct bitmapInfoHeader//位图信息头部结构
{
DWORD bisize;//位图信息头部大小
LONG bitWidth;//图像宽度
LONG biHeight;//图像高度
WORD biPlanes;//目标设备位面熟,设为1
WORD biBitCount;//单位像素的位数,即图像的位深度
DWORD biCompression;//图像的压缩类型
DWORD biSizeImage;//图像的大小,以字节为单位
LONG biXPelsPerMeter;//水平方向每米像素数
LONG biYPelsPerMeter;//垂直方向每米像素数
DWORD biClrUsed;//实际使用的色彩表中的颜色索引数
}BITMAPINFOHEADER
dwlFlags对应:
AVIF_HASINDEX:标明该AVI文件有"idx1"块
AVIF_MUSTUSEINDEX:标明必须根据索引表来指定数据顺序
AVIF_ISINTERLEAVED:标明该AVI文件是interleaved格式的
AVIF_WASCAPTUREFILE:标明该AVI文件是用捕捉实时视频专门分配的文件
AVIF_COPYRIGHTED:标明该AVI文件包含有版权信息
struct RECT
{
short int left;
short int top;
short int right;
short int bottom;
}rcFrame; // 指定这个流(视频流或文字流)在视频主窗口中的显示位置
struct avioldindex
{
FOURCC fcc;//必须为idx1
DWORD cb; //本数据结构的大小,不包括最初的8字节(fcc和cb两个域)
struct avioldindex_enty
{
DWORD dwChunkId;//表征本数据块的四字符码
DWORD dwFlags;//说明本数据块是不是关键帧,是不是rec列表等信息
DWORD dwOffset;//本数据块在文件中的偏移量
DWORD dwSize;//本数据块的大小
}aIndex[];//只是一个数组,为每个媒体数据块定义一个索引值
}AVIOLDINDEX