获取Filter的三种途径 收藏
来源:互联网 发布:mac合盖设置方法 编辑:程序博客网 时间:2024/05/02 16:15
获取Filter的三种途径 收藏
一、通过CLSID
- IBaseFilter *pF = 0;
- HRESULT hr = CoCreateInstance(clsid, 0, CLSCTX_INPROC_SERVER,
- IID_IBaseFilter, reinterpret_cast<void**>(&pF));
二、通过系统枚举器
- ICreateDevEnum *pSysDevEnum = NULL;
- hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
- IID_ICreateDevEnum, (void **)&pSysDevEnum);
- if (FAILED(hr))
- {
- return hr;
- }
- IEnumMoniker *pEnumCat = NULL;
- hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoCompressorCategory, &pEnumCat, 0);
- if (hr == S_OK)
- {
- IMoniker *pMoniker = NULL;
- ULONG cFetched;
- while(pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK)
- {
- IPropertyBag *pPropBag;
- hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
- (void **)&pPropBag);
- if (SUCCEEDED(hr))
- {
- VARIANT varName;
- VariantInit(&varName);
- hr = pPropBag->Read(L"FriendlyName", &varName, 0);
- IBaseFilter *pFilter;
- hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter,
- (void**)&pFilter);
- pPropBag->Release();
- }
- pMoniker->Release();
- }
- pEnumCat->Release();
- }
- pSysDevEnum->Release();
三、通过Filter Mapper
- IFilterMapper2 *pMapper = NULL;
- IEnumMoniker *pEnum = NULL;
- hr = CoCreateInstance(CLSID_FilterMapper2,
- NULL, CLSCTX_INPROC, IID_IFilterMapper2,
- (void **) &pMapper);
- GUID arrayInTypes[2];
- arrayInTypes[0] = MEDIATYPE_Video;
- arrayInTypes[1] = MEDIASUBTYPE_dvsd;
- hr = pMapper->EnumMatchingFilters(
- &pEnum,
- 0, // Reserved.
- TRUE, // Use exact match?
- MERIT_DO_NOT_USE+1, // Minimum merit.
- TRUE, // At least one input pin?
- 1, // Number of major type/subtype pairs for input.
- arrayInTypes, // Array of major type/subtype pairs for input.
- NULL, // Input medium.
- NULL, // Input pin category.
- FALSE, // Must be a renderer?
- TRUE, // At least one output pin?
- 0, // Number of major type/subtype pairs for output.
- NULL, // Array of major type/subtype pairs for output.
- NULL, // Output medium.
- NULL); // Output pin category.
- IMoniker *pMoniker;
- ULONG cFetched;
- while (pEnum->Next(1, &pMoniker, &cFetched) == S_OK)
- {
- IPropertyBag *pPropBag = NULL;
- hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag,
- (void **)&pPropBag);
- if (SUCCEEDED(hr))
- {
- VARIANT varName;
- VariantInit(&varName);
- hr = pPropBag->Read(L"FriendlyName", &varName, 0);
- VariantClear(&varName);
- IBaseFilter *pFilter;
- hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter);
- pPropBag->Release();
- }
- pMoniker->Release();
- }
- pMapper->Release();
- pEnum->Release();
第一种方法是最直接的,也最简单,不过当不清楚CLSID的时候,就不得不用后面两种方法。
第二种方法和第三中方法都是使用枚举器枚举Filter,通过匹配Filter的属性来得到Filter,它们不同之处在于:第二种通过确定的种类获得枚举器,第三种通过媒体类型获得枚举器。获得枚举器以后的步骤是相同的。
这三种方法最常用的是第二种。
- 获取Filter的三种途径 收藏
- 获取Filter的三种途径
- 获取Filter的三种途径
- Android 获取dip数据的三种途径
- 做职场牛人的三种途径
- Android音乐播放器的获取数据的三种途径
- 操作数据库的三种途径
- 操作数据库的三种途径
- 三种操作数据库的途径
- 积累编程经验的三种途径
- C#生成XML的三种途径
- 增加编程经验的三种途径
- C#生成XML的三种途径
- C#生成XML的三种途径
- C#生成XML的三种途径
- C#生成XML的三种途径
- C#生成XML的三种途径
- 三种验证码的识别途径
- 领养子女的生父母脸上的痛苦表情在Facebook出现
- DOM读取远程文件的操作
- SDRAM工作原理及S3C2410 SDRAM控制器配置方法
- myecplise8.0集成svn
- 一些简单的SQL语句总计
- 获取Filter的三种途径 收藏
- 标准C++类型转换符
- 利用LVS+Keepalived 实现高性能高可用负载均衡服务器 (转自linuxtone.org)
- SQL语句中的top参数
- 完美周末
- jdk1.6对webservice的支持示例
- 详解struts2中struts.properties
- PHP常见缓存技术分析[转载]
- 纹理过滤模式中的Bilinear、Trilinear以及Anistropic Filtering