繁体   English   中英

如何获取Android 4.1和4.2上MediaCodec支持的colorFormats?

[英]How to get the colorFormats supported by MediaCodec on android 4.1 and 4.2?

在android 4.1及更高版本上,我打算获取特定MediaCodec支持的colorFormats列表。

Android 4.3以上提供(一个API 公共MediaCodecInfo getCodecInfo() ),以获得MediaCodecInfo用的特定实例相关联的MediaCodec 此外,我能够在此MediaCodecInfo对象上调用getCapabilitiesForType ,它将获取与我关联的MediaCodecInfo.CodecCapabilities对象,在该对象上我调用API colorFormats以获取我的MediaCodec对象的颜色格式列表。

现在,我无法在android 4.1和4.2上执行上述调用序列,仅仅是因为MediaCodec API getCodecInfo()已添加到API级别18中。

谁能建议我如何实现相同或任何其他方法来获取android 4.1和4.2上的颜色格式列表。

对于Android 4.1和4.2,您需要使用MediaCodecList类来遍历可用的编解码器-在此您将获得MediaCodecInfo ,它将提供与getCodecInfo()相同的信息。

如果您使用createEncoderByType (或createDecoderByType )创建了编解码器,则只有在需要getCodecInfo() (或getName() )的情况下,才知道您实际上在处理哪个编解码器。 至少在AOSP中,这两个函数仅返回MediaCodecList中与提供的MIME类型匹配的第一个编解码器。 (当然,有些制造商可能已对此进行了定制,但我认为这样做的理由不多。)

因此-在4.1和4.2上-代替使用createEncoderByType ,手动遍历MediaCodecList的编解码器,并选择与您的MIME类型匹配的第一个,并在那里获取信息和功能。

因此,简单地说-如果您当前有以下代码:

MediaCodec codec = MediaCodec.createEncoderByType(mimeType);
MediaCodecInfo info = codec.getCodecInfo();

然后,同样支持4.1和4.2的等效版本是:

MediaCodecInfo info = null;
for (int i = 0; i < MediaCodecList.getCodecCount() && info == null; i++) {
    MediaCodecInfo curInfo = MediaCodecList.getCodecInfoAt(i);
    if (!curInfo.isEncoder())
        continue;
    String[] types = curInfo.getSupportedTypes();
    for (int j = 0; j < types.length; j++)
        if (types[j].equals(mimeType))
            info = curInfo;
}
MediaCodec codec = MediaCodec.createByCodecName(info.getName());

事实证明,有一种优雅的方法来获取所使用的特定MediaCodec实例所支持的颜色格式,该方法可在android 4.1及更高版本上使用。 相同的解释如下:

在执行dequeueOutputBuffer查找错误代码: MediaCodec.INFO_OUTPUT_FORMAT_CHANGED 在收到此错误代码,调用getOutputFormat编码解码器,并随后致电getInteger在收到MediaFormat对象与字符串KEY_COLOR_FORMAT ,使色彩格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM