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

Posted

技术标签:

【中文标题】如何在配置前获得 MediaCodec 的最大分辨率【英文标题】:How to get max resolution of MediaCodec before configuring 【发布时间】:2017-12-07 17:05:11 【问题描述】:

我的应用创建了多个 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...

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

【问题讨论】:

你能解决这个问题吗?我也找不到 MediaCodec 接口来获得这个最大分辨率总和。 【参考方案1】:

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

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

【讨论】:

“使用 getMaxSupportedInstances ()”是一个很好的解决方案,但并非所有设计都返回此信息,例如三星 p600 没有。 getMaxSupportedInstances () 与分辨率无关 getMaxSupportedInstances() 返回可以并行运行的编解码器数量

以上是关于如何在配置前获得 MediaCodec 的最大分辨率的主要内容,如果未能解决你的问题,请参考以下文章

视频解码器 使用 MediaCodec 配置

Android MediaCodec 配置错误,崩溃

如何在java中获得屏幕分辨率?

让USB Type-C接口显示器从适配器获得最大功率以满足便携显示器用电需求的方案

CENTOS7显示的分辨率,最大只有1024*768?如何设置成更高的分辨率?

我如何在 c 中获得屏幕分辨率(操作系统 QNX 或 Linux)