Android 系統(tǒng)中編解碼器的命名方式,軟編解碼器通常是以 OMX.google 開頭,硬編解碼器通常是以 OMX.[hardware_vendor] 開頭的。但是還有一些不遵守這個命名規(guī)范的,不以 OMX. 開頭的情況,它們也會被認(rèn)為是軟編解碼器。
由上可知,如果一個設(shè)備既支持硬件編解碼,也支持軟件編解碼。對于 hevc 解碼器可能就會存在兩個的情況:

hevc_decoder.png
那么在判斷設(shè)備是否支持硬件編解碼的時候,就需要判斷編解碼器是否為硬件編解碼器:
/**
* 是否支持 hevc 硬解
* @return
*/
public static boolean isH265HWDecoderSupport() {
MediaCodecList codecList = new MediaCodecList(REGULAR_CODECS);
// 獲取設(shè)備支持的所有 codec 信息
MediaCodecInfo[] codecInfos = codecList.getCodecInfos();
for (int i = 0; i < codecInfos.length; i++) {
MediaCodecInfo codecInfo = codecInfos[i];
// 解碼codec & 解碼器名稱包含'hevc' & 不是軟件codec
if (!codecInfo.isEncoder() && (codecInfo.getName().contains("hevc")
&& !isSWCodec(codecInfo.getName()))) {
return true;
}
}
return false;
}
/**
* 是否為軟件 codec
* @param codecName
* @return
*/
public static boolean isSWCodec(String codecName) {
if (codecName.startsWith("OMX.google.")) {
return true;
}
if (codecName.startsWith("OMX.")) {
return false;
}
return true;
}
如有問題,可咨詢:georgechmr@gmail.com