diff options
author | Byoungchan Lee <daniel.l@hpcnt.com> | 2020-07-02 02:00:25 +0900 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-07-14 08:57:52 +0000 |
commit | 80d2159ff4dd74e33ebd8db42d3401c5243f643e (patch) | |
tree | e67469a75a53355828833d81dd75f01508a0d76b | |
parent | 84bb634238e817a2a90df8f7558552181d769dee (diff) | |
download | webrtc-80d2159ff4dd74e33ebd8db42d3401c5243f643e.tar.gz |
Use Android Q API to test if MediaCodecInfo is HW Accelerated
Also, add the prefix of SW Codecs in Codec2.0.
Bug: None
Change-Id: Ifc7a079a68506975cd9e52ddaf6da69744ac0614
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177800
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Sami Kalliomäki <sakal@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#31723}
3 files changed, 35 insertions, 22 deletions
diff --git a/sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java b/sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java index 4a648c8cd7..2876df028e 100644 --- a/sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java +++ b/sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java @@ -18,18 +18,9 @@ import java.util.Arrays; public class HardwareVideoDecoderFactory extends MediaCodecVideoDecoderFactory { private final static Predicate<MediaCodecInfo> defaultAllowedPredicate = new Predicate<MediaCodecInfo>() { - private String[] prefixBlocklist = - Arrays.copyOf(MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES, - MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES.length); @Override public boolean test(MediaCodecInfo arg) { - final String name = arg.getName(); - for (String prefix : prefixBlocklist) { - if (name.startsWith(prefix)) { - return false; - } - } - return true; + return MediaCodecUtils.isHardwareAccelerated(arg); } }; diff --git a/sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java b/sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java index 31b6e59e3b..d334dfab4e 100644 --- a/sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java +++ b/sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java @@ -21,19 +21,9 @@ public class PlatformSoftwareVideoDecoderFactory extends MediaCodecVideoDecoderF */ private static final Predicate<MediaCodecInfo> defaultAllowedPredicate = new Predicate<MediaCodecInfo>() { - private String[] prefixAllowlist = - Arrays.copyOf(MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES, - MediaCodecUtils.SOFTWARE_IMPLEMENTATION_PREFIXES.length); - @Override public boolean test(MediaCodecInfo arg) { - final String name = arg.getName(); - for (String prefix : prefixAllowlist) { - if (name.startsWith(prefix)) { - return true; - } - } - return false; + return MediaCodecUtils.isSoftwareOnly(arg); } }; diff --git a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java index 9028cc3ae4..cd43098015 100644 --- a/sdk/android/src/java/org/webrtc/MediaCodecUtils.java +++ b/sdk/android/src/java/org/webrtc/MediaCodecUtils.java @@ -10,6 +10,7 @@ package org.webrtc; +import android.annotation.TargetApi; import android.media.MediaCodecInfo; import android.media.MediaCodecInfo.CodecCapabilities; import android.os.Build; @@ -28,7 +29,8 @@ class MediaCodecUtils { static final String INTEL_PREFIX = "OMX.Intel."; static final String NVIDIA_PREFIX = "OMX.Nvidia."; static final String QCOM_PREFIX = "OMX.qcom."; - static final String[] SOFTWARE_IMPLEMENTATION_PREFIXES = {"OMX.google.", "OMX.SEC."}; + static final String[] SOFTWARE_IMPLEMENTATION_PREFIXES = { + "OMX.google.", "OMX.SEC.", "c2.android"}; // NV12 color format supported by QCOM codec, but not declared in MediaCodec - // see /hardware/qcom/media/mm-core/inc/OMX_QCOMExtns.h @@ -97,6 +99,36 @@ class MediaCodecUtils { } } + static boolean isHardwareAccelerated(MediaCodecInfo info) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + return isHardwareAcceleratedQOrHigher(info); + } + return !isSoftwareOnly(info); + } + + @TargetApi(29) + private static boolean isHardwareAcceleratedQOrHigher(android.media.MediaCodecInfo codecInfo) { + return codecInfo.isHardwareAccelerated(); + } + + static boolean isSoftwareOnly(android.media.MediaCodecInfo codecInfo) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + return isSoftwareOnlyQOrHigher(codecInfo); + } + String name = codecInfo.getName(); + for (String prefix : SOFTWARE_IMPLEMENTATION_PREFIXES) { + if (name.startsWith(prefix)) { + return true; + } + } + return false; + } + + @TargetApi(29) + private static boolean isSoftwareOnlyQOrHigher(android.media.MediaCodecInfo codecInfo) { + return codecInfo.isSoftwareOnly(); + } + private MediaCodecUtils() { // This class should not be instantiated. } |