【问题标题】:InfTee filter doesn't work with VMRInfTee 过滤器不适用于 VMR
【发布时间】:2014-03-11 21:53:42
【问题描述】:

我有一个过滤器图,例如 Source --> InfTee --> VMR7/VMR9

当我连接像 Source --> VMR7/VMR9 这样的图表时,图表工作正常,但是一旦我插入 InfTee 在 Source 和 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 过滤器上,因为它很笨。但是找不到任何合适的解决方案。

有人可以帮帮我吗?

【问题讨论】:

    标签: c++ render directshow multimedia


    【解决方案1】:

    VMR-7、VMR-9、EVR - 所有渲染器都“坚持”使用自己的内存分配器,由视频表面的内存支持。这些分配器有特定的要求。您无法更改此行为。

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

    你不能让它一起工作,你需要一个额外的过滤器,将数据从 tee 复制到视频渲染器的内存。就性能而言,理想的选择是自定义转换过滤器,该过滤器复制数据时考虑了扩展步幅。没有它,您将拥有一个最接近的库存/注册过滤器来实现相同的目的。

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多