graphedt里面的filter怎么才能得到CLSID?

vcbacker 2004-07-06 05:58:22
我在graphedt里面找到了一个XviD mpeg4 codec的filter,
在graphedt里面是可用的,
可是我从它的displayname里面却找不到正确的clsid,
在注册表里搜索也找不到,怎么才能得到这个filter的clsid?
或者有没有这样的ax文件?
...全文
196 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vcbacker 2004-07-06
  • 打赏
  • 举报
回复
我刚才仔细看了一下注册表,发现陆老师讲的确实很有道理,真是见多识广啊~~~佩服佩服~~~
vcbacker 2004-07-06
  • 打赏
  • 举报
回复
多谢陆老师,
xvid官方只发布了directshow decode filter,没有 encode的filter,
在他们的论坛上许多外国人也在找这个,
你有没有兴趣写一个出来?应该有很多人都会需要的~~~
happydeer 2004-07-06
  • 打赏
  • 举报
回复
给点例子代码给你!(以下代码摘自《DirectShow实务精选》)

IBaseFilter* pFlt = UDsUtils::CreateCompressor(TRUE, "DivX 5.0.2 Codec");

IBaseFilter * UDsUtils::CreateCompressor(BOOL inIsVideo, const char * inName)
{
GUID guid = inIsVideo ? CLSID_VideoCompressorCategory : CLSID_AudioCompressorCategory;
return CreateHardwareFilter(guid, inName);
}

IBaseFilter * UDsUtils::CreateHardwareFilter(GUID inCategory, const char * inFriendlyName)
{
ICreateDevEnum * enumHardware = NULL;
HRESULT hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_ALL,
IID_ICreateDevEnum, (void**)&enumHardware);
if (FAILED(hr))
{
return NULL;
}

IBaseFilter * hardwareFilter = NULL;
IEnumMoniker * enumMoniker = NULL;
hr = enumHardware->CreateClassEnumerator(inCategory, &enumMoniker, 0);
if (enumMoniker)
{
enumMoniker->Reset();

ULONG fetched = 0;
IMoniker * moniker = NULL;
char friendlyName[256];

while (!hardwareFilter && SUCCEEDED(enumMoniker->Next(1, &moniker, &fetched)) && fetched)
{
if (moniker)
{
IPropertyBag * propertyBag = NULL;
VARIANT name;
friendlyName[0] = 0;
hr = moniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&propertyBag);
if (SUCCEEDED(hr))
{
name.vt = VT_BSTR;
hr = propertyBag->Read(L"FriendlyName", &name, NULL);
}
if (SUCCEEDED(hr))
{
WideCharToMultiByte(CP_ACP, 0, name.bstrVal, -1,
friendlyName, 256, NULL, NULL);
if (strcmp(friendlyName, inFriendlyName) == 0)
{
moniker->BindToObject(0, 0, IID_IBaseFilter, (void**)&hardwareFilter);
}
}

// Release interfaces
if (propertyBag)
{
propertyBag->Release();
propertyBag = NULL;
}
moniker->Release();
}
}
enumMoniker->Release();
}
enumHardware->Release();

return hardwareFilter;
}
happydeer 2004-07-06
  • 打赏
  • 举报
回复
哦,那就是XviD mpeg4 codec使用了CLSID_AVI Compressor进行包装,这种filter你不能直接通过clsid去创建;而要枚举Video Compressors目录,然后通过名字匹配找到XviD mpeg4 codec,再将它绑定成一个filter的形式。
vcbacker 2004-07-06
  • 打赏
  • 举报
回复
另外,用你的filter tracer查到的clsid我在注册表里面也曾经找到过,
用它产生的却是CLSID_AVI Compressor,这是为什么?
vcbacker 2004-07-06
  • 打赏
  • 举报
回复
陆老师,我刚才去了xvid的官方网站,发现有很多人在找 xvid 的 directshow encode filter,
xvid自己没有发布这个,据说是因为某些法律问题~~
你有没有做过这个filter?
happydeer 2004-07-06
  • 打赏
  • 举报
回复
用我的filter tracer可以看到。

可以从http://hqtech.nease.net/Software.htm下载“Filter Tracer V1.88版”,然后注册,然后在Graphedit中插入这个filter。打开filter tracer的属性页,就可以察看filter graph中的所有filter了。
它通过读取 Excel 表格中的业务数据,结合 Word 模板,自动生成多个独立的合同文件,并自动处理了表格中“合计”行的合并与中文大写金额转换。 资源名称:合同文档自动化生成脚本 (1.py) 名字真是乱起 核心功能:Excel 数据读取 → Word 模板渲染 → 表格单元格合并与金额处理 → 批量导出 Word 文档。 适用场景:财务、销售或行政部门需要根据订单或业务明细,批量制作格式统一的合同、报价单或结算单。 1. 自动把“钱”变成“大写” 它干了啥:它内置了一个翻译功能,专门把阿拉伯数字(比如 100.50)自动转换成财务专用的中文大写(比如 壹佰元伍角)。 为什么有用:写合同最怕手滑写错金额,或者大写格式不对。这个功能全自动搞定,既标准又不会出错。 2. 自动“装修”表格底部 它干了啥:生成文档后,它会自动找到表格的最后一行,把前几列合并成一个大格子,写上“合计:XXX(大写金额)”,并在最右边填上具体的数字总额。 为什么有用:平时我们做完表格,还得手动去合并单元格、算总数、填大写,非常繁琐。这个脚本直接一步到位,把表格收尾工作做得漂漂亮亮。 3. 像“发传单”一样批量做合同 它干了啥:它会看你的 Excel 表格,按照“编号”把数据归类。 如果是同一个编号的货物,它会把它们塞进同一个合同里(比如一个客户买了三样东西,会自动列三行)。 如果是不同的编号,它就生成不同的合同文件。 为什么有用:不管你有一百个还是一千个订单,它都能自动拆分,给每个客户生成一份独立的、内容准确的合同,完全不用人工去复制粘贴。

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧