VC+DirectShow对视频进行图片处理之二
2007-03-15 21:48:41 来源:WEB开发网核心提示: #include <streams.h>// 回调类定义class FunCLS{public: virtual void procFun(BITMAPINFO* pBmpInfo, BYTE* pb){return;};};// 回调函数指针定义typedef void (C
#include <streams.h>
// 回调类定义
class FunCLS
{public: virtual void procFun(BITMAPINFO* pBmpInfo, BYTE* pb){return;};
};
// 回调函数指针定义
typedef void (CALLBACK* pProcFun)(BITMAPINFO* pBmpInfo,BYTE* pb);
// {F81331DB-2E46-43e7-8709-BE57205D8914} Filter的全局标识符
static const GUID CLSID_lwVideoRenderer =
{ 0xf81331db, 0x2e46, 0x43e7, { 0x87, 0x9, 0xbe, 0x57, 0x20, 0x5d, 0x89, 0x14 } };
// Filter 类定义
class CVideoRenderer : public CBaseVideoRenderer
{
public:
// 创建进程。
static CUnknown * WINAPI CreateInstance(LPUNKNOWN, HRESULT *);
// 构造、释构函数
CVideoRenderer(LPUNKNOWN pUnk,HRESULT* phr);
~CVideoRenderer();
public:
// 检查是否有可以接受格式的数据
HRESULT CheckMediaType(const CMediaType* pmt);
// 设置具体的数据格式,如视频图像的宽、高等
HRESULT SetMediaType(const CMediaType* pmt);
// 递交数据,即显示、呈现数据
HRESULT DoRenderSample(IMediaSample* pMediaSample);
private:
BITMAPINFO m_bmpInfo; // 图片信息
BYTE* m_pCopyBuffer; // 复制缓冲区
UINT m_pixelNum; // 像素点的数目
FunCLS* m_pFunCLS; // 回调类指针
pProcFun m_pPF; // 回调函数指针
};
我在上面曾提过在Filter中要在接受到新数据时调用外部函数进行处理,因此我定义了一个回调类(我自己称呼的)和一个回调函数指针。这样可以把回调类作为MFC视图类的一个基类,以方便地使用MFC视图类中的成员变量。而同时提供回调函数指针就可以满足同时播放多个视频文件、使用多个摄像头的需要。这是我在使用中感到有必要而后来修改得来的,使Filter的使用具有足够的灵活性。下面看看以上Filter类中函数的具体实现。
Tags:VC DirectShow 视频
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接