gpt4 book ai didi

directshow - 在 DirectShow 之外使用 DirectShow 过滤器?

转载 作者:行者123 更新时间:2023-12-05 01:23:42 26 4
gpt4 key购买 nike

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

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

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

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

J.

最佳答案

(免责声明:我从未真正这样做过,但我看不出有任何技术原因无法做到。所以 YMMV)

如果解码器是一个 DMO 过滤器,那么它会容易得多——你可以通过 IMediaObject 与它对话。 .这与 DirectShow 使用 DMO 的方式并没有太大区别;它只是用另一个处理媒体类型协商和样本传递的转换过滤器包装 DMO,但没有什么能真正阻止您在自己的应用程序中执行此操作。

有一个问题:对于 IMediaObject::ProcessInput 和 IMediaObject::ProcessOutput,您需要自己的缓冲区类来实现 IMediaBuffer。 .但它是一个非常基本的界面,所以我认为您在实现它时不会遇到太多麻烦。这是一个 basic implementation .

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

幸运的是,大多数 解码器都倾向于作为 DMO 过滤器实现,因此我认为您很有可能只使用 IMediaObject。

关于directshow - 在 DirectShow 之外使用 DirectShow 过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3458868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com