我目前正在处理的Windows媒体基金会。然而,由于一些问题与Microsoft H.264解码器和自定义格式缺少某些解码器,我想知道是否有可能实例化一个DirectShow解码器直接使用CLSID,并建立一个代理围绕它暴露IMFTransform以获取媒体基金会的解码器。因此,这里是我的问题:

可以实例化一个DirectShow滤波器(最好是解码器)直接并使用它们用于解码(即把一些压缩帧,并获得未压缩的)来创建一个MFT?

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

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

学家

有帮助吗?

解决方案

(声明:我从来没有真正做到这一点,但我看不出有任何技术原因不能这样做因人而异)

如果解码器是一个DMO过滤器,那么这将是一个容易得多 - 你可以通过的 IMediaObject 。这是不是从DirectShow中是如何使用的DMO真的很大不同;它只是封装与另一个DMO变换滤波器处理该媒体类型的协商和样品合格,但有没有什么阻止你在自己的应用程序这样做。

有一个陷阱:对IMediaObject :: ProcessInput和IMediaObject :: ProcessOutput,就需要您自己的缓冲区类,它实现的 IMediaBuffer 。但是,这是一个非常基本的接口,所以我不认为你必须实现它太麻烦了。这里有一个基本实现

有关定期DirectShow过滤器,它实际上将是一个困难的多,因为大多数的DirectShow过滤器真的取决于有是外部图形可用(案例:所有的DirectShow那种假定的事件处理此图的存在) 。如果你真的想用一个单一的DSHOW过滤器独立的,你可能必须包装整个过滤器图形,然后有一个自定义源过滤器,以饲料中,你可以使用样本采集卡(或自定义渲染过滤),以抽出样品出的曲线图的并暴露给应用程序的其余部分。 (一个排序疯狂的想法,甚至将包装这个图形在DMO过滤器实现,然后用IMediaObject去跟它 - 这可能会非常棘手,不过)

幸运的的解码器往往被实现为DMO过滤器,所以我觉得有一个强大的可能性,你可以只使用IMediaObject。

其他提示

我不能确定,为什么你会想这样做。你不是真的想要一个图的过滤器在外面讨生活。

如果你不想使用传统的文件/网络源过滤器,或传统的渲染器,你可以写缓冲的渲染器和缓冲器源过滤器,您传递指针,并从中获取指针。然后,你可以将全乱成图和运行它,几乎直接将使用解码器没有别的。这不会是很难做到的。解码器可能是期待虽然PES分组流。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top