MediaCodec到底是硬解码还是软解码?
MediaCodec 调用的是在系统中register的解码器,硬件厂商会把自己的硬解码器register进来,就是硬解,如果他register一个软解码器,则是软解。
MediaCodec并不是真正的codec,真正codec是在openMax,要保证是硬解,在MediaCodec里有接口可以枚举所有解码器,每种编码可能都有多个解码器,
区分哪个是软解哪个是硬解就行。
在framework中创建MediaCodec 解码器对象。
mLooper = new ALooper;
mLooper->setName("my_avc_decoder_looper");
mLooper->start();
// 参数一,传入一个循环线程,参数二,创建的解码器类型,参数三,false 创建解码器。
mCodec = MediaCodec::CreateByType(mLooper, "video/avc", false);
可以看到我选的”video/avc” - H.264/AVC video是一种H264的解码方式,但并不能证明我使用的就一定是硬解码
我们先来看一下Android系统中解码器的命名,软解码器通常是以OMX.google开头的。硬解码器通常是以OMX.[hardware_vendor]开头的,比如TI的解码器是以
OMX.TI开头的。当然还有一些不遵守这个命名规范的,不以OMX.开头的,那也会被认为是软解码器。
判断规则见frameworks/av/media/libstagefright/OMXCodec.cpp:
static
bool IsSoftwareCodec(
const
char
*componentName) {