由于AVI格式是微软推出的,所以在Windows下操作比较容易,这里我们DirectShow读写AVI视频文件,并把所有操作封装成一个类:AVICodec。下面是类的的定义:
class AVICodec
{
public:
AVICodec(){size = -1;}
AVICodec(LPCWSTR avifile);
void release();
int init_getframe();
char* getframe(unsigned int index);
int getFrame(unsigned int index);
int getFrameEnd();
void play();
private:
IGraphBuilder *pGraph;
IMediaControl *pControl;
IMediaEvent *pEvent;
IMediaDet *pDet;
AM_MEDIA_TYPE amMediaType;
public:
BITMAPINFOHEADER *pbih;
double fps, length;
unsigned int nFrame;
long size;
bool is_begin;
char * pBuffer;
private:
char * buf;
};
这个类目前实现两个功能:
1.播放AVI文件 play()
2.获取指定帧的数据,返回数据是RGB24格式 GetFrame()
下面是完整的代码:
AVICodec::AVICodec(LPCWSTR avifile)//类初始化,avifile是文件名
{
pGraph = NULL;
pControl = NULL;
pEvent = NULL;
size = -1;