Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 410c4f18 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge changes Ie08c9241,I5164b528 into main am: b458f13a

parents ab4e3480 b458f13a
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -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) {
+5 −4
Original line number Diff line number Diff line
@@ -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));
                }