AVI格式文件读取测试代码:以下代码在VC中测试通过,关键是帮助搞清楚AVI文件的格式。
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
typedef unsigned long DWORD;
typedef struct _avimainheader
{
DWORD dwMicroSecPerFrame; //视频帧间间隔时间(以毫秒为单位)
DWORD dwMaxBytesPerSec; //最大传输速率
DWORD dwPaddingGranularity; //数据填充的粒度
DWORD dwFlags; //全局标记,比如是否含有索引块等
DWORD dwTotalFrames; //总帧数
DWORD dwInitialFrames; //为交互格式指定初始帧数(非交互格式应指定为0)
DWORD dwStreams; //本文件包含的流的个数
DWORD dwSuggestedBufferSize; //建议读取文件的缓冲大小
DWORD dwWidth; //视频图像宽
DWORD dwHeight; //视频图像高
DWORD dwReserved[4]; //保留
}AVIMAINHEADER;
typedef struct _RECT
{
long left;
long top;
long right;
long botton;
}RECT;
typedef unsigned char FOURCC[4];
typedef struct _avistreamheader
{
FOURCC fccType;
FOURCC fccHandler;
DWORD dwFlags;
DWORD dwPriority;
DWORD dwInitialFrames; // 为交互格式指定初始帧数
DWORD dwScale; // 这个流使用的时间尺度
DWORD dwRate;
DWORD dwStart; // 流的开始时间
DWORD dwLength; // 流的长度(单位与dwScale和dwRate的定义有关)
DWORD dwSuggestedBufferSize; // 读取这个流数据建议使用的缓存大小
DWORD dwQuality; // 流数据的质量指标(0 ~ 10,000)
DWORD dwSampleSize; // Sample的大小
RECT rcFrame;
}AVISTREAMHEADER;
typedef struct _aviindexentry
{
DWORD ckid;
DWORD dwFlags;
DWORD dwChunkOffset;
DWORD dwChunkLenght;
}AVIINDEXENTRY;
typedef unsigned long LONG;
typedef unsigned short int WORD;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;