如何在配置之前获得MediaCodec的最大分辨率

时间:2017-07-04 09:38:36

标签: android mediacodec encoder-decoder

我的应用创建了几个MediaCodec实例,它们与视频/音频解码器和编码器并行工作。

我知道视频编解码器具有限制缓冲区空间,此限制取决于设备。

例如,在Samsung SM-P600选项卡上,我可以创建四个分辨率为720p的MediaCodec:

  

1280 * 720 * 4 = 3686400

但不是五个:

  

1280 * 720 * 5 = 4608000

因为编解码器在配置期间会返回错误:

E/OMX:  setParam  sum(4608000) > max resolution(4177920)
E/ACodec: [OMX.Exynos.AVC.Encoder] failed to set input port definition parameters.
E/ACodec:  configureCodec multi window instance fail  appPid : 17054
E/ACodec: [OMX.Exynos.AVC.Encoder] configureCodec returning error -1021
E/ACodec: signalError(omxError 0x80001001, internalError -1021)
E/MediaCodec: Codec reported err 0xfffffc03, actionCode 0, while in state 3
E/MediaCodec: configure failed with err 0xfffffc03, resetting...

在配置MediaCodecs以计算我需要的所有MediaCodecs的最大可用分辨率之前,如何获得最大分辨率(4177920)

1 个答案:

答案 0 :(得分:1)

尝试在MediaCodecInfo.CodecCapabilities中使用getMaxSupportedInstances()。 https://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html

或isSizeSupported(int width,                 MediaCodecInfo.VideoCapabilities中的int height)。 https://developer.android.com/reference/android/media/MediaCodecInfo.VideoCapabilities.html