WEB开发网
开发学院软件开发VC VC+DirectShow对视频进行图片处理之二 阅读

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类中函数的具体实现。

上一页  1 2 3 4  下一页

Tags:VC DirectShow 视频

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接