我已经在这个问题上苦苦挣扎了一个多星期,而且很可能是 Qualcomm GPU /硬件视频编码器中的一个错误。由于我们被迫发布应用程序,他们的开发者论坛没有提供任何反馈,我也在这里发布,希望有人能够提供一些线索,甚至更好的解决方法,以便编码器中的错误是没有触发。
应用程序从Surface编码。当某些图像渲染到表面时,编码器在同一位置失败(100%)(当前编码的帧是关键帧时)。崩溃时编码器的Logcat输出是(最后一行以非常高的速率重复):
11-26 11:41:33.312: E/OMX-VENC-720p(25949): ERROR: async_msg_process() - Error statuscode = 1
11-26 11:41:33.312: E/ACodec(29317): [OMX.qcom.video.encoder.avc] ERROR(0x80001009)
11-26 11:41:33.312: E/MediaCodec(29317): Codec reported an error. (omx error 0x80001009, internalError -2147483648)
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: venc_use_buf:set input buffer failed
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: in dev_use_buf
11-26 11:41:33.362: E/OMX-VENC-720p(25949): ERROR: empty_buffer_done() failed!
11-26 11:41:33.372: E/OMX-VENC-720p(25949): m_fbd_count at o/p flush = 306
11-26 11:41:33.372: E/OMX-VENC-720p(25949): m_etb_count at i/p flush = 313
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: ioctl VEN_IOCTL_CMD_FILL_OUTPUT_BUFFER failed
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: dev_fill_buf() Failed
11-26 11:41:33.372: E/OMX-VENC-720p(25949): ERROR: FTBProxy() failed!
我也可以在Grafika上复制它,只需在记录GL应用程序中替换两个几何形式的绘图,并在横向模式下绘制一个有问题的图像,全屏,并将比特率更改为更高的值(7Mbps)。 对于更大的比特率,编码器的崩溃会更快发生。
这是一个image似乎很容易打破它,这里是RecordFBOActivity.java所需的更改。
有了Grafika,我进行了测试,编码器在三星S4,国际版和原版Nexus 4上都崩溃了。使用我们的软件,它比渲染普通图像要复杂一点,它仍然会崩溃。没有测试任何其他Adreno设备。在三星S3上,使用Mali 400 GPU,它可以正常工作。
在4Mbps时,我们应用程序中的编码器仍会在S4和N4上崩溃,但稍后会崩溃。格拉菲卡在N4的同一个地方坠毁,但在S4没有。
编辑:根据下面的评论,当从缓冲区编码相同的图像时,它也可以被再现。各种测试似乎缩小了在以下条件下重现它的条件:高通设备上的h264 hw编码器,为许多帧编码静止图像(由于相似的帧,这确定编码器中的比特率非常低),编码关键帧时出现错误(只有在编码某些图像时才会出现错误,这些图像似乎有更多细节,即内部编码需要很多位。)
答案 0 :(得分:1)
这似乎是如上所述的错误。