如何知道Android解码器MediaCodec.createDecoderByType(类型)是硬件还是软件解码器?

js81xvg6  于 2022-12-02  发布在  Android
关注(0)|答案(2)|浏览(199)

是否有办法查明使用MediaCodec.createDecoderByType(type)接收的解码器是硬件解码器还是软件解码器?

wgx48brx

wgx48brx1#

没有真实的的正式标志来指示编解码器是硬件编解码器还是软件编解码器。但实际上,您可以这样做:

MediaCodec codec = MediaCodec.createDecoderByType(type);
if (codec.getName().startsWith("OMX.google.")) {
    // Is a software codec
}

(The MediaCodec.getName()方法从API级别18开始可用。对于较低的API级别,您需要迭代MediaCodecList中的条目,然后手动选择适合您需要的正确编解码器。)

xe55xuns

xe55xuns2#

根据libstagefright的代码,任何以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

相关问题