扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:longway 来源:天极开发 2007年10月16日
关键字: VC DirectShow 视频 图片处理
#include "stdafx.h" #include "VR.h" #pragma comment(lib,"strmbase.lib") #pragma comment(lib,"winmm.lib") // Setup data const AMOVIESETUP_MEDIATYPE sudIpPinTypes = { &MEDIATYPE_Video, // MajorType &MEDIASUBTYPE_NULL // MinorType }; const AMOVIESETUP_PIN sudIpPin = { L"Input", // The Pins name FALSE, // Is rendered FALSE, // Is an output pin FALSE, // Allowed none FALSE, // Allowed many &CLSID_NULL, // Connects to filter NULL, // Connects to pin 1, // Number of types &sudIpPinTypes // Pin details }; const AMOVIESETUP_FILTER sudVRAx = { &CLSID_lwVideoRenderer, // Filter CLSID /**/ L"lwVideoRenderer", // String name /**/ MERIT_NORMAL, // Filter merit 1, // Number of pins &sudIpPin // Pin details }; // List of class IDs and creator functions for the class factory. This // provides the link between the OLE entry point in the DLL and an object // being created. The class factory will call the static CreateInstance // function when it is asked to create a CLSID_VideoRenderer object CFactoryTemplate g_Templates[] = { { L"lwVideoRenderer" /**/ , &CLSID_lwVideoRenderer /**/ , CVideoRenderer::CreateInstance , NULL , &sudVRAx }, }; int g_cTemplates = sizeof(g_Templates) / sizeof(g_Templates[0]); // DllRegisterServer // Used to register and unregister the filter STDAPI DllRegisterServer() { return AMovieDllRegisterServer2( TRUE ); } // DllRegisterServer // DllUnregisterServer STDAPI DllUnregisterServer() { return AMovieDllRegisterServer2( FALSE ); } // DllUnregisterServer extern "C" BOOL WINAPI DllEntryPoint(HINSTANCE, ULONG, LPVOID); // DllMain BOOL APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return DllEntryPoint((HINSTANCE)(hModule), dwReason, lpReserved); }// DllMain |
#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; // 回调函数指针 }; |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者