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

4
我的应用程序创建了多个MediaCodec实例,它们作为视频/音频解码器和编码器并行工作。
我知道视频编解码器具有有限的缓冲空间,这个限制取决于设备。
例如,在三星SM-P600平板电脑上,我可以创建四个分辨率为720p的MediaCodecs:

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...

在配置媒体编解码器以计算所有所需的媒体编解码器的最大可用分辨率之前,如何获取最大分辨率(4177920)?

你能解决这个问题吗?我也找不到MediaCodec接口来获取最大分辨率总和。 - Dustin Kerstein
1个回答

1

使用“getMaxSupportedInstances()”是一个不错的解决方案,但并非所有设备都返回此信息,例如三星P600就没有。 - Oleg Sokolov
getMaxSupportedInstances()与分辨率无关。 - user924
getMaxSupportedInstances() 返回可以并行运行的编解码器数量。 - Tomer Nuni

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接