由于某种原因,我无法解码 H.264。输入/输出配置进展顺利,就像输入/输出缓冲区创建一样。
我正在手动为解码器提供从实时流中解复用的 H.264。因此,我使用 MFVideoFormat_H264_ES 作为媒体子类型。解码速度很慢,解码后的帧完全是垃圾。其他解码器正在正确解码相同的流。
奇怪的是,一旦 ProcessInput() 返回 MF_E_NOTACCEPTING,下面的 ProcessOutput() 就会返回 MF_E_TRANSFORM_NEED_MORE_INPUT。根据 MSDN,这绝不应该发生。
任何人都可以提供一些关于如何做到这一点的具体信息吗?(假设 MF H.264 可以正常工作,我对此表示严重怀疑)。
我愿意提供额外的信息,但我不知道有人可能需要什么来提供帮助。
编辑:我应该什么时候将输入缓冲区中的字节数重置为零?顺便说一句,当 ProcessOutput() 提供一些东西(垃圾)时,我正在重置输出缓冲区。
Edit2:在不将输入缓冲区上的当前缓冲区大小重置为 0 的情况下,我设法获得了一些半有效的输出。半有效是指在每个成功的 ProcessOutput() 上,我都会收到一个 YUV 图像,其中当前图像包含比前一帧更多的解码宏块。框架的其余部分是黑色的。因为我没有重置大小,所以这会在一段时间后停止。所以,我想重置缓冲区大小存在问题,我想我应该在整个帧完成(或不完成)时收到一些通知。
Edit3:在创建输入缓冲区时,GetInputStreamInfo() 返回 4096 作为输入缓冲区大小。对齐0。但是,4k是不够的。增加到 4MB 有助于逐帧解压缩帧片段。仍然必须弄清楚是否有办法判断整个帧何时解码。