[英]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.