Joa*_*mer 2 directshow instantiation decoder clsid ms-media-foundation
我目前正在处理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.但它是一个非常基本的界面,所以我认为你不会在实现它时遇到太多麻烦.这是一个基本的实现.
对于常规的directshow过滤器,它实际上会变得更加困难,因为大多数DirectShow过滤器实际上都依赖于可用的外部图形(例如:所有directshow事件都假设存在此图形).如果你真的想单独使用一个DShow过滤器,你可能需要包装整个过滤器图形,然后有一个自定义源过滤器来输入样本.你可以使用样本采集器(或自定义渲染过滤器)来从图表中抽出样本并暴露给应用程序的其余部分.(一种疯狂的想法甚至是将这个图形包装在DMO过滤器实现中,然后使用IMediaObject与它对话 - 但这可能很棘手)
幸运的是,大多数解码器往往被实现为DMO过滤器,所以我认为你很有可能只使用IMediaObject.
| 归档时间: |
|
| 查看次数: |
1416 次 |
| 最近记录: |