在某些三星设备上使用MediaCodec以高分辨率解码H264流,dequeueOutputBuffer始终返回-1

时间:2015-07-09 06:19:08

标签: android h.264 mediacodec

我正在尝试使用MediaCodec API来解码使用Android客户端的H264流。 示例代码:

int decoderStatus = decoder.dequeueOutputBuffer(mBufferInfo, TIMEOUT_USEC); 

当远程H264流分辨率大小较大时(例如:1600 * 1200),此函数将始终返回-1(MediaCodec.INFO_TRY_AGAIN_LATER),因此解码将失败但无法捕获任何异常。如果分辨率较低(例如1920 * 1080,1280 * 720),则解码机制正常工作。

这只发生在一些三星设备上:Galaxy S3,Note2和note。

我还检查了支持H264配置文件级别的这些机器,它们都是4级设备,理论上可支持最大分辨率2048 * 1024(https://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels)。

有人遇到这个问题吗?我尝试在queueInputBufferdequeueOutputBuffer时修改参数,但未能修复它。

1 个答案:

答案 0 :(得分:1)

这个原因是由于使用EXYNOS4412 / EXYNOS4210处理器的三星设备。这些类型的处理器使用Mali-400 MP4 GPU。

SoC集成了ARM Mali-400 MP4 GPU(440 MHz时为15.8 GFLOPS)。典型的智能手机游戏(2012)即使在1280 x 720像素等高分辨率下也能流畅运行。视频可以通过多格式视频解码器(1080p AVI,WMV,H.264,H.263,VC1,MPEG2,MPEG4)加速。 (http://www.notebookcheck.net/Samsung-Exynos-4412-Quad-ARM-SoC.86876.0.html

因此,如果视频分辨率超过1080P,解码器将被冻结。