InfTee过滤器不适用于VMR

时间:2014-02-13 06:49:22

标签: c++ render directshow multimedia

我有一个类似Source的过滤器图表 - > InfTee - > VMR7 / VMR9

当我连接像Source这样的图形时,图形工作正常 - > VMR7 / VMR9但是一旦我插入InfTee 在源和VMR之间进行滤波,然后我遇到了InfTee滤波器的o / p引脚和VMR的i / p引脚之间的引脚连接问题。 我不想添加任何其他过滤器,如AVIdecompressor或颜色空间转换器过滤器b / w InfTee和VMR。

连接继续进行 直到InfTee输出引脚的DecideAllocator()函数为止 调用。此函数具有以下代码:

hr = pPin-> NotifyAllocator(pTee-> m_pAllocator,TRUE);

NotifyAllocator返回E_FAIL。

这里pPin是接收引脚(VMR的输入引脚)和pTee-> m_pAllocator 存储InfTee从输入引脚接收的分配器 NotifyAllocator()实现。

我在网上查了一下,问题是InfTee过滤器因为它的愚蠢本性。但是无法得到任何正确的解决方案。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

VMR-7,VMR-9,EVR - 所有渲染器都“坚持”在他们自己的内存分配器上,由视频表面的内存支持。这些分配器有特定要求。你无法改变这种行为。

另一方面,另一方面,InfTee“坚持”自己的输出引脚内存分配器,并在输出引脚之间共享它,这样在发送馈送时就不会发生数据复制(这就是你所说的“哑巴”)性质“)。

你无法让它一起工作,你需要一个额外的过滤器,从tee到视频渲染器的内存复制数据。在性能方面是理想的是自定义转换过滤器,其考虑了扩展的步幅来复制数据。没有它,你有一个最接近的股票/注册过滤器,以达到同样的目的。