首页 文章

从Surface编码时,编码器在Adreno GPU上崩溃

提问于
浏览
66

我已经在这个问题上苦苦挣扎了一个多星期,而且很可能是_1090910中的一个错误 . 由于我们被迫发布应用程序,他们的开发者论坛没有提供任何反馈,我也在这里发布,希望有人能够提供一些线索,甚至更好的解决方法,以便编码器中的错误是没有触发 .

应用程序从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上复制它,只需在Record GL app中替换两个几何形状的绘图,绘制一个有问题的图像,全屏,横向模式,并将比特率更改为更高的值(7Mbps) . 对于更大的比特率,编码器的崩溃更快地发生 .

这里有一个image似乎很容易打破它,这里有RecordFBOActivity.java所需的更改 .

有了Grafika,我进行了测试,编码器在三星S4,国际版和原版Nexus 4上崩溃 . 我们的软件比渲染普通图像稍微复杂一点,它仍然会崩溃 . 没有测试任何其他Adreno设备 . 在三星S3上,使用Mali 400 GPU,它可以正常工作 .

在4Mbps时,我们的应用程序中的编码器仍然在S4和N4上崩溃,但稍后 . 格拉菲卡在同一个地方的N4上坠毁,但在S4没有 .

编辑:根据下面的评论,它也可以在从缓冲区编码相同的图像时再现 . 各种测试似乎缩小了在以下条件下重现它的条件:高通设备上的h264 hw编码器,为许多帧编码静止图像(由于相似的帧,这确定编码器中的比特率非常低),编码关键帧时出现错误(只有在编码某些图像时才会出现错误,这些图像似乎有更多细节,即需要很多位用于帧内编码) .

1 回答

  • 1

    它似乎是如上所述的错误 .

相关问题