c语言结构体bmi,AVI结构解析 结构体

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值