aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorByoungchan Lee <daniel.l@hpcnt.com>2020-07-02 02:00:25 +0900
committerCommit Bot <commit-bot@chromium.org>2020-07-14 08:57:52 +0000
commit80d2159ff4dd74e33ebd8db42d3401c5243f643e (patch)
treee67469a75a53355828833d81dd75f01508a0d76b
parent84bb634238e817a2a90df8f7558552181d769dee (diff)
downloadwebrtc-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}
-rw-r--r--sdk/android/api/org/webrtc/HardwareVideoDecoderFactory.java11
-rw-r--r--sdk/android/api/org/webrtc/PlatformSoftwareVideoDecoderFactory.java12
-rw-r--r--sdk/android/src/java/org/webrtc/MediaCodecUtils.java34
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.
}