是否有办法查明使用MediaCodec.createDecoderByType(type)接收的解码器是硬件解码器还是软件解码器?
wgx48brx1#
没有真实的的正式标志来指示编解码器是硬件编解码器还是软件编解码器。但实际上,您可以这样做:
MediaCodec codec = MediaCodec.createDecoderByType(type); if (codec.getName().startsWith("OMX.google.")) { // Is a software codec }
(The MediaCodec.getName()方法从API级别18开始可用。对于较低的API级别,您需要迭代MediaCodecList中的条目,然后手动选择适合您需要的正确编解码器。)
MediaCodec.getName()
MediaCodecList
xe55xuns2#
根据libstagefright的代码,任何以OMX.google.或c2.android.开头的编解码器或者不是以(OMX.和c2.)开头的编解码器都是软件编解码器。
OMX.google.
c2.android.
OMX.
c2.
//static bool MediaCodecList::isSoftwareCodec(const AString &componentName) { return componentName.startsWithIgnoreCase("OMX.google.") || componentName.startsWithIgnoreCase("c2.android.") || (!componentName.startsWithIgnoreCase("OMX.") && !componentName.startsWithIgnoreCase("c2.")); }
资料来源:https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/MediaCodecList.cpp#320
2条答案
按热度按时间wgx48brx1#
没有真实的的正式标志来指示编解码器是硬件编解码器还是软件编解码器。但实际上,您可以这样做:
(The
MediaCodec.getName()
方法从API级别18开始可用。对于较低的API级别,您需要迭代MediaCodecList
中的条目,然后手动选择适合您需要的正确编解码器。)xe55xuns2#
根据libstagefright的代码,任何以
OMX.google.
或c2.android.
开头的编解码器或者不是以(OMX.
和c2.
)开头的编解码器都是软件编解码器。资料来源:
https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/MediaCodecList.cpp#320