为什么 MediaFoundation 的 H.264 解码器失败并显示“CopyDecodedFrame failed”?

问题描述 投票:0回答:1

我正在编写一个使用 MediaFoundation 的 H.264 解码器的应用程序。我的代码基于 this 示例。

只要我按照示例并为每个解码帧分配一个新的 IMFMediaBuffer ,一切似乎都可以正常工作。如果我尝试对后续帧重复使用相同的缓冲区,则

IMFTransform::ProcessOutput
内部的解码会失败,并出现异常“CopyDecodedFrame failed”。

函数“CopyDecodedFrame”和错误消息都没有在任何地方公开记录。解码器似乎没有保存对应用程序缓冲区的任何引用(由 AddRef/Release 返回值证明)。将“已用”缓冲区保留在池中并在几帧后重用它们也没有帮助。

ms-media-foundation
1个回答
0
投票

我发现只有当提交的缓冲区为“空”(currentLength = 0)时解码器才能正常工作。调用

buffer->SetCurrentLength(0)
可以安全地重用缓冲区。

此要求似乎没有在任何地方记录。

© www.soinside.com 2019 - 2024. All rights reserved.