带有 EVR 的 MFT 给出的帧数较少

MFT with EVR gives out less number of frames

我有如下拓扑结构,它适用于视频序列的所有帧:

源->视频解码器MFT->自定义视频编辑MFT->视频编码器MFT->自定义接收器MFT

但是如果我在 "Custom Video Edit MFT" 之后插入一个 Tee 节点也连接到增强型视频渲染器 (EVR),那么应用程序不会 运行 视频序列的所有帧。

我试图使用 mftrace 找出原因,但没有太大帮助。如果自定义 MFT 花费的时间太长,是否存在任何节点跳帧的可能性?如果有一些调试此问题或任何疯狂猜测的提示,我将不胜感激。

仅供参考,此问题仅在我尝试使用超高清 (3840x2160) 分辨率视频时出现。它适用于高清 (1920x1080) 分辨率。

您是否尝试在 t 节点上设置 MF_TOPONODE_PRIMARYOUTPUT。

您的输出编码器应该是主要输出,渲染器输出是次要输出。

此外,使用 MF_TOPONODE_RATELESS 作为接收器,因为默认情况下它不是。

不要使用 MF_TOPONODE_DISCARDABLE,因为你不想。

如果您的问题仍然存在,我可以创建一个 T 形节点转换来检查发生了什么。但就目前而言,还不确定是不是 tee 节点的问题。也许是媒体session...

最后通过关闭 MF_SESSION_QUALITY_MANAGER 解决了问题,如下所示,它避免了可能的丢帧:

   CComPtr<IMFAttributes> attrib;
    MFCreateAttributes(&attrib, 1);
    attrib->SetGUID(MF_SESSION_QUALITY_MANAGER, GUID_NULL);
    hr = MFCreateMediaSession(attrib, &_mediaSession);