diff options
| author | 2024-03-28 02:37:49 +0000 | |
|---|---|---|
| committer | 2024-03-28 02:37:49 +0000 | |
| commit | 410c4f18cb2f0eb9de752b8d12cf99e29d6e84c6 (patch) | |
| tree | 59d2d3644526746125acfb080f241ba44827eef3 | |
| parent | ab4e34802106db701694f9667ebfe83152ad19b2 (diff) | |
| parent | b458f13a2f8071215e63426a13dac96ee409e162 (diff) | |
Merge changes Ie08c9241,I5164b528 into main am: b458f13a2f
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3016535
Change-Id: I485e8ab6b6f5d9c877e8d2fd7b43863e18d92548
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | media/java/android/media/MediaCodec.java | 20 | ||||
| -rw-r--r-- | media/java/android/media/MediaCodecInfo.java | 9 |
2 files changed, 24 insertions, 5 deletions
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java index 45bf5c415a7e..2018a39f4e3d 100644 --- a/media/java/android/media/MediaCodec.java +++ b/media/java/android/media/MediaCodec.java @@ -65,6 +65,7 @@ import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Supplier; /** MediaCodec class can be used to access low-level media codecs, i.e. encoder/decoder components. @@ -2014,6 +2015,23 @@ final public class MediaCodec { } } + // HACKY(b/325389296): aconfig flag accessors may not work in all contexts where MediaCodec API + // is used, so allow accessors to fail. In those contexts use a default value, normally false. + + /* package private */ + static boolean GetFlag(Supplier<Boolean> flagValueSupplier) { + return GetFlag(flagValueSupplier, false /* defaultValue */); + } + + /* package private */ + static boolean GetFlag(Supplier<Boolean> flagValueSupplier, boolean defaultValue) { + try { + return flagValueSupplier.get(); + } catch (java.lang.RuntimeException e) { + return defaultValue; + } + } + private boolean mHasSurface = false; /** @@ -2346,7 +2364,7 @@ final public class MediaCodec { } // at the moment no codecs support detachable surface - if (android.media.codec.Flags.nullOutputSurface()) { + if (GetFlag(() -> android.media.codec.Flags.nullOutputSurface())) { // Detached surface flag is only meaningful if surface is null. Otherwise, it is // ignored. if (surface == null && (flags & CONFIGURE_FLAG_DETACHED_SURFACE) != 0) { diff --git a/media/java/android/media/MediaCodecInfo.java b/media/java/android/media/MediaCodecInfo.java index abad46046890..8ff4305a9817 100644 --- a/media/java/android/media/MediaCodecInfo.java +++ b/media/java/android/media/MediaCodecInfo.java @@ -23,6 +23,7 @@ import static android.media.codec.Flags.FLAG_HLG_EDITING; import static android.media.codec.Flags.FLAG_IN_PROCESS_SW_AUDIO_CODEC; import static android.media.codec.Flags.FLAG_NULL_OUTPUT_SURFACE; import static android.media.codec.Flags.FLAG_REGION_OF_INTEREST; +import static android.media.MediaCodec.GetFlag; import android.annotation.FlaggedApi; import android.annotation.IntDef; @@ -827,10 +828,10 @@ public final class MediaCodecInfo { features.add(new Feature(FEATURE_MultipleFrames, (1 << 5), false)); features.add(new Feature(FEATURE_DynamicTimestamp, (1 << 6), false)); features.add(new Feature(FEATURE_LowLatency, (1 << 7), true)); - if (android.media.codec.Flags.dynamicColorAspects()) { + if (GetFlag(() -> android.media.codec.Flags.dynamicColorAspects())) { features.add(new Feature(FEATURE_DynamicColorAspects, (1 << 8), true)); } - if (android.media.codec.Flags.nullOutputSurface()) { + if (GetFlag(() -> android.media.codec.Flags.nullOutputSurface())) { features.add(new Feature(FEATURE_DetachedSurface, (1 << 9), true)); } @@ -851,10 +852,10 @@ public final class MediaCodecInfo { features.add(new Feature(FEATURE_QpBounds, (1 << 3), false)); features.add(new Feature(FEATURE_EncodingStatistics, (1 << 4), false)); features.add(new Feature(FEATURE_HdrEditing, (1 << 5), false)); - if (android.media.codec.Flags.hlgEditing()) { + if (GetFlag(() -> android.media.codec.Flags.hlgEditing())) { features.add(new Feature(FEATURE_HlgEditing, (1 << 6), true)); } - if (android.media.codec.Flags.regionOfInterest()) { + if (GetFlag(() -> android.media.codec.Flags.regionOfInterest())) { features.add(new Feature(FEATURE_Roi, (1 << 7), true)); } |