【问题标题】:Handling MF_E_TRANSFORM_STREAM_CHANGE from video decoder MFT处理来自视频解码器 MFT 的 MF_E_TRANSFORM_STREAM_CHANGE
【发布时间】:2022-02-03 08:25:11
【问题描述】:

我正在尝试使用 H264 Decoder MFT 解码单个 H264 帧,但我遇到了 ProcessOutput() 的问题。我已经尽我所能减少了不好的HRESULT,但我目前坚持处理MF_E_TRANSFORM_STREAM_CHANGE。这发生在我将 pSample 设置为我分配的output_sample 并调用ProcessOutput() 之后,因为此解码器需要您分配自己的样本。我尝试使用SetOutputType() 将输出类型重置为我在configure_decoder() 函数中的输出类型,但是我得到了一个糟糕的HRESULT。不知道下一步该做什么。

【问题讨论】:

    标签: c++ winapi video ms-media-foundation


    【解决方案1】:

    你只需要关注this at Handling Stream Changes:

    1. 客户端调用IMFTransform::GetOutputAvailableType。此方法返回一组更新的输出类型。
    2. 客户端调用SetOutputType设置新的输出类型。
    3. 客户端恢复调用ProcessInput/ProcessOutput。

    在上面的问题正文中,您尝试执行 3 而不执行 2。很可能您的媒体类型与 MFT 的有所不同,因此它可能会拒绝它并阻止处理,直到解决此问题。

    【讨论】:

    • 谢谢你,解决了这个错误。我更新了原始问题,以便其他用户可以看到我做了什么。现在,在查看输出的 NV12 时,我注意到颜色混乱了。它们几乎似乎被调低了——知道为什么会发生这种情况吗? i.imgur.com/zzdCZIV.png我也在查看器中使用这些设置来查看 NV12 文件,如果这很重要i.imgur.com/Q5Uf95d.png
    • 我想说你只需继续循环并使用ProcessOutput 重试,而不是创建单独的调用,但没关系。我很确定您总体上会获得有效的输出,但是您这样做的方式尚不清楚。首先,您需要确保将类型更改为 NV12 而不是其他格式。您对此没有任何检查。其次,你得到的数据到底是什么?或者至少观众究竟向你展示了什么,涉及太多猜测。
    • 我编辑了原始帖子,因此它按照您的建议继续循环并将输出类型设置为 NV12。 imgur.com/a/WErqANl
    • 1 - 现在代码不正确,您不应该在更改格式处理程序中设置 NV12,您应该从可用的媒体类型中选择 NV12,以防有一些可供您选择; 2 - 我仍然不明白框架本身有什么问题
    • 好吧,我也不知道。根据您的程序,NV12 的索引无论如何都是零,所以我怀疑它与 GetAvailableOutputs() 相关。我会继续尽力修复它,但如果我无法解决,我最终可能会在这里提出另一个问题
    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多