Directshow中Filter开发基础[9]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 aoosang 的 blog

hr = pfm2->registerfilter(
clsid_somefilter, // filter clsid.
g_wszname, // filter name.
null, // device moniker.
&clsid_videocompressorcategory, // video compressor category.
g_wszname, // instance data.
&rf2filterreg // pointer to filter information.
);
pfm2->release();
return hr;
}
4filter注册指南
filter的注册信息决定了,在filter graph管理器中如何intelligent connect.。因此,你必须要遵从下列的规则,使得你的filter能够正常运行。
1 你是否需要在注册表中保存你的filter数据,对于许多filter来说,没有必要让filter mapper和system device enumerator来发现你的filter,只要你注册了你的filter,你的应用程序通过
concreateinstance方法来创建你的filter,此时,忽略了类厂模板中的amoviesetup_filter结构,缺点是,在graphedit中看不到你的filter。
2选择正确的filter 种类,缺省的directshow filters可能适用于大多数的filter,但是如果你的filter有特殊的用处,你要选择一个恰当的种类
3避免在pin的amoviesetup_mediatype结构中使用mediatype_none, mediasubtype_none, or guid_null,ifiltermapper2会将这些视做通配符。
4下面是一些建议的最小******不明白
type of filter recommended merit
default renderer merit_preferred. for standard media types, however, a custom renderer should never be the default.
non-default renderer merit_do_not_use or merit_unlikely
mux merit_do_not_use
decoder merit_normal
spitter, parser merit_normal or lower
special purpose filter; any filter that is created directly by the application merit_do_not_use
capture merit_do_not_use
"fallback" filter; for example, the color space converter filter
merit_unlikely

5不要将接受24位rgb的filter注册到directshow filter,你的filter将会干扰color space converter filter.工作
5 反注册
为了反注册filter,
要提供一个dllunregisterserver方法,在这个方法中,调用amoviedllregisterserver2,注意传递参数,fasle,如果你是使用ifiltermapper2::registerfilter注册的你的filter,那么你必须要用ifiltermapper2::unregisterfilter方法来反注册你的filter。如下
stdapi dllunregisterserver()
{
hresult hr;
ifiltermapper2 *pfm2 = null;

hr = amoviedllregisterserver2(false);
if (failed(hr))
return hr;

hr = cocreateinstance(clsid_filtermapper2, null, clsctx_inproc_server,
iid_ifiltermapper2, (void **)&pfm2);

if (failed(hr))
return hr;

hr = pfm2->unregisterfilter(&clsid_videocompressorcategory,
g_wszname, clsid_somefilter);

pfm2->release();
return hr;
}

本文关键:Directshow中Filter开发基础
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top