在 DirectShow 之外使用 DirectShow 过滤器?

2024-02-19

我目前正在处理 Windows Media Foundation。但是,由于 Microsoft H.264 解码器存在一些问题,并且缺少一些自定义格式的解码器,我想知道是否可以直接使用 CLSID 实例化 DirectShow 解码器,并围绕它构建一个公开 IMFTransform 的代理获取媒体基金会的解码器。所以这是我的问题:

我可以直接实例化 Directshow 过滤器(最好是解码器)并使用它们进行解码(即放置一些压缩帧并获取未压缩帧)以创建 MFT?

我知道如何使用过滤器的 CLSID 实例化过滤器本身。但是,我不知道如何使用实际的解码功能。

任何想法、提示、链接都将不胜感激。谢谢,

J.


(免责声明:我从未真正这样做过,但我认为没有技术原因无法做到这一点。所以 YMMV)

如果解码器是 DMO 过滤器,那么就会容易得多——你可以通过它与它对话IMedia对象 http://msdn.microsoft.com/en-us/library/dd406926%28v=VS.85%29.aspx。这与 DirectShow 使用 DMO 的方式没有太大区别;它只是用另一个处理媒体类型协商和样本传递的转换过滤器包装 DMO,但没有什么真正阻止您在自己的应用程序中执行此操作。

有一个问题:对于 IMediaObject::ProcessInput 和 IMediaObject::ProcessOutput,您需要自己的缓冲区类来实现IMedia缓冲区 http://msdn.microsoft.com/en-us/library/dd390166%28v=VS.85%29.aspx。但它是一个非常基本的界面,所以我认为您在实现它时不会遇到太多麻烦。这是一个基本实现 http://msdn.microsoft.com/en-us/library/dd376684%28v=VS.85%29.aspx.

对于常规的 directshow 过滤器,这实际上要困难得多,因为大多数 DirectShow 过滤器实际上依赖于可用的外部图(举个例子:所有的 directshow 事件都假定该图的存在)。如果您确实想独立使用单个 DShow 过滤器,您可能必须包装整个过滤器图表,然后使用自定义源过滤器来输入样本。您可以使用样本采集器(或自定义渲染过滤器)来从图表中提取样本并暴露给应用程序的其余部分。 (一种疯狂的想法甚至是将这个图包装在 DMO 过滤器实现中,然后使用 IMediaObject 与之对话 - 然而,这可能很棘手)

Luckily most解码器往往被实现为 DMO 过滤器,因此我认为您很有可能只使用 IMediaObject。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 DirectShow 之外使用 DirectShow 过滤器? 的相关文章

随机推荐