博客日历
2025年06月 | ||||||
一 | 二 | 三 | 四 | 五 | 六 | 七 |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
存档
2025年03月 2024年
03月 04月 05月 2021年
01月 02月 11月 12月 2020年
02月 03月 04月 05月 06月 07月
09月 2018年
09月 2017年
01月 02月 07月 2016年
01月 04月 07月 08月 11月 12月
2015年
01月 02月 03月 05月 09月 10月
11月 2014年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2013年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2012年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2011年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2010年
01月 02月 03月 04月 05月 06月
07月 08月 09月 10月 11月 12月
2009年
03月 04月 05月 06月 07月 08月
09月 10月 11月 12月
DirectShow.4 枚举Windows Mobile (WinCE) 所有Filter
#include <atlbase.h> #include <DShow.h> #pragma comment(lib,"Strmiids.lib") CComPtr<IFilterMapper> pMapper; HRESULT hr=pMapper.CoCreateInstance(CLSID_FilterMapper); if(FAILED(hr)) { _tprintf(L"创建IFilterMapper接口失败\n"); return 0; } CComPtr<IEnumRegFilters> pEnumRegFilters; DWORD dwMerit=0; hr=pMapper->EnumMatchingFilters(&pEnumRegFilters,dwMerit,FALSE,GUID_NULL,GUID_NULL,FALSE,FALSE,GUID_NULL,GUID_NULL); if(FAILED(hr)) { _tprintf(L"创建IEnumRegFilters接口失败\n"); return 0; } int Nums=0; ULONG cFetched=0; REGFILTER *pRegFilter=NULL; while(pEnumRegFilters->Next(1,&pRegFilter,&cFetched)==S_OK) { for(size_t i=0;i<cFetched;i++) { _tprintf(L"%02d %s\n",++Nums,(pRegFilter+i)->Name); } CoTaskMemFree(pRegFilter); } pEnumRegFilters.Release(); pMapper.Release();
需要注意的是:
自己开发的Filter如果只是简单的通过AMovieDllRegisterServer2(TRUE)注册,将不会被枚举出来。
为了可以被枚举,还需要用IFilterMapper::RegisterFilter将Filter信息写入注册表,代码如下:
HRESULT RegisterFilter(BOOL bRegister) { CComPtr<IFilterMapper> pMapper; HRESULT hr=pMapper.CoCreateInstance(CLSID_FilterMapper); if(FAILED(hr)) { _tprintf(L"创建IFilterMapper接口失败\n"); return hr; } if(bRegister) { hr=pMapper->RegisterFilter(CLSID_RotationFilter,L"Rotation Filter",MERIT_NORMAL); if(FAILED(hr)) { _tprintf(L"RegisterFilter CLSID_RotationFilter失败\n"); return hr; } } else { hr=pMapper->UnregisterFilter(CLSID_RotationFilter); if(FAILED(hr)) { _tprintf(L"UnregisterFilter CLSID_RotationFilter失败\n"); return hr; } } pMapper.Release(); return S_OK; } STDAPI DllRegisterServer() { HRESULT hr= AMovieDllRegisterServer2(TRUE); if (FAILED(hr)) { return hr; } hr=RegisterFilter(TRUE); if (FAILED(hr)) { return hr; } return S_OK; }
上一篇: 让Windows Mobile程序运行时不休眠,不关背光
下一篇: YV12转RGB24(查表法)
分类:嵌入式/电子 查看次数:10269 发布时间:2011/11/21 16:07:46