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

Commit d6c0a357 authored by Andy Hung's avatar Andy Hung Committed by Automerger Merge Worker
Browse files

Merge changes from topics "360RA channel mask", "audio channels" am: b1060eb9

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1669510

Change-Id: Ia821a6b7b843569acc9797d1806beed84a615071
parents 865efafc b1060eb9
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -378,6 +378,18 @@ public final class AudioFormat implements Parcelable {
    public static final int CHANNEL_OUT_TOP_BACK_CENTER = 0x40000;
    /** @hide */
    public static final int CHANNEL_OUT_TOP_BACK_RIGHT =  0x80000;
    /** @hide */
    public static final int CHANNEL_OUT_TOP_SIDE_LEFT = 0x100000;
    /** @hide */
    public static final int CHANNEL_OUT_TOP_SIDE_RIGHT = 0x200000;
    /** @hide */
    public static final int CHANNEL_OUT_BOTTOM_FRONT_LEFT = 0x400000;
    /** @hide */
    public static final int CHANNEL_OUT_BOTTOM_FRONT_CENTER = 0x800000;
    /** @hide */
    public static final int CHANNEL_OUT_BOTTOM_FRONT_RIGHT = 0x1000000;
    /** @hide */
    public static final int CHANNEL_OUT_LOW_FREQUENCY_2 = 0x2000000;

    public static final int CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT;
    public static final int CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT);
@@ -407,6 +419,38 @@ public final class AudioFormat implements Parcelable {
            CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
            CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
            CHANNEL_OUT_LOW_FREQUENCY);
    /** @hide */
    public static final int CHANNEL_OUT_5POINT1POINT2 = (CHANNEL_OUT_5POINT1 |
            CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT);
    /** @hide */
    public static final int CHANNEL_OUT_5POINT1POINT4 = (CHANNEL_OUT_5POINT1 |
            CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_RIGHT |
            CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT);
    /** @hide */
    public static final int CHANNEL_OUT_7POINT1POINT2 = (CHANNEL_OUT_7POINT1_SURROUND |
            CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT);
    /** @hide */
    public static final int CHANNEL_OUT_7POINT1POINT4 = (CHANNEL_OUT_7POINT1_SURROUND |
            CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_RIGHT |
            CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT);
    /** @hide */
    public static final int CHANNEL_OUT_13POINT_360RA = (
            CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_FRONT_RIGHT |
            CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
            CHANNEL_OUT_TOP_FRONT_LEFT | CHANNEL_OUT_TOP_FRONT_CENTER |
            CHANNEL_OUT_TOP_FRONT_RIGHT |
            CHANNEL_OUT_TOP_BACK_LEFT | CHANNEL_OUT_TOP_BACK_RIGHT |
            CHANNEL_OUT_BOTTOM_FRONT_LEFT | CHANNEL_OUT_BOTTOM_FRONT_CENTER |
            CHANNEL_OUT_BOTTOM_FRONT_RIGHT);
    /** @hide */
    public static final int CHANNEL_OUT_22POINT2 = (CHANNEL_OUT_7POINT1POINT4 |
            CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER |
            CHANNEL_OUT_BACK_CENTER | CHANNEL_OUT_TOP_CENTER |
            CHANNEL_OUT_TOP_FRONT_CENTER | CHANNEL_OUT_TOP_BACK_CENTER |
            CHANNEL_OUT_TOP_SIDE_LEFT | CHANNEL_OUT_TOP_SIDE_RIGHT |
            CHANNEL_OUT_BOTTOM_FRONT_LEFT | CHANNEL_OUT_BOTTOM_FRONT_RIGHT |
            CHANNEL_OUT_BOTTOM_FRONT_CENTER |
            CHANNEL_OUT_LOW_FREQUENCY_2);
    // CHANNEL_OUT_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_OUT_ALL

    /** Minimum value for sample rate,
+43 −13
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import java.lang.ref.WeakReference;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.NioUtils;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.concurrent.Executor;

@@ -1585,9 +1586,24 @@ public class AudioTrack extends PlayerBase
            AudioFormat.CHANNEL_OUT_LOW_FREQUENCY |
            AudioFormat.CHANNEL_OUT_BACK_LEFT |
            AudioFormat.CHANNEL_OUT_BACK_RIGHT |
            AudioFormat.CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
            AudioFormat.CHANNEL_OUT_FRONT_RIGHT_OF_CENTER |
            AudioFormat.CHANNEL_OUT_BACK_CENTER |
            AudioFormat.CHANNEL_OUT_SIDE_LEFT |
            AudioFormat.CHANNEL_OUT_SIDE_RIGHT;
            AudioFormat.CHANNEL_OUT_SIDE_RIGHT |
            AudioFormat.CHANNEL_OUT_TOP_CENTER |
            AudioFormat.CHANNEL_OUT_TOP_FRONT_LEFT |
            AudioFormat.CHANNEL_OUT_TOP_FRONT_CENTER |
            AudioFormat.CHANNEL_OUT_TOP_FRONT_RIGHT |
            AudioFormat.CHANNEL_OUT_TOP_BACK_LEFT |
            AudioFormat.CHANNEL_OUT_TOP_BACK_CENTER |
            AudioFormat.CHANNEL_OUT_TOP_BACK_RIGHT |
            AudioFormat.CHANNEL_OUT_TOP_SIDE_LEFT |
            AudioFormat.CHANNEL_OUT_TOP_SIDE_RIGHT |
            AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_LEFT |
            AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_CENTER |
            AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_RIGHT |
            AudioFormat.CHANNEL_OUT_LOW_FREQUENCY_2;

    // Returns a boolean whether the attributes, format, bufferSizeInBytes, mode allow
    // power saving to be automatically enabled for an AudioTrack. Returns false if
@@ -1740,6 +1756,26 @@ public class AudioTrack extends PlayerBase
        mDataLoadMode = mode;
    }

    // General pair map
    private static final HashMap<String, Integer> CHANNEL_PAIR_MAP = new HashMap<>() {{
        put("front", AudioFormat.CHANNEL_OUT_FRONT_LEFT
                | AudioFormat.CHANNEL_OUT_FRONT_RIGHT);
        put("back", AudioFormat.CHANNEL_OUT_BACK_LEFT
                | AudioFormat.CHANNEL_OUT_BACK_RIGHT);
        put("front of center", AudioFormat.CHANNEL_OUT_FRONT_LEFT_OF_CENTER
                | AudioFormat.CHANNEL_OUT_FRONT_RIGHT_OF_CENTER);
        put("side", AudioFormat.CHANNEL_OUT_SIDE_LEFT
                | AudioFormat.CHANNEL_OUT_SIDE_RIGHT);
        put("top front", AudioFormat.CHANNEL_OUT_TOP_FRONT_LEFT
                | AudioFormat.CHANNEL_OUT_TOP_FRONT_RIGHT);
        put("top back", AudioFormat.CHANNEL_OUT_TOP_BACK_LEFT
                | AudioFormat.CHANNEL_OUT_TOP_BACK_RIGHT);
        put("top side", AudioFormat.CHANNEL_OUT_TOP_SIDE_LEFT
                | AudioFormat.CHANNEL_OUT_TOP_SIDE_RIGHT);
        put("bottom front", AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_LEFT
                | AudioFormat.CHANNEL_OUT_BOTTOM_FRONT_RIGHT);
    }};

    /**
     * Convenience method to check that the channel configuration (a.k.a channel mask) is supported
     * @param channelConfig the mask to validate
@@ -1766,21 +1802,15 @@ public class AudioTrack extends PlayerBase
                loge("Front channels must be present in multichannel configurations");
                return false;
        }
        final int backPair =
                AudioFormat.CHANNEL_OUT_BACK_LEFT | AudioFormat.CHANNEL_OUT_BACK_RIGHT;
        if ((channelConfig & backPair) != 0) {
            if ((channelConfig & backPair) != backPair) {
                loge("Rear channels can't be used independently");
        // Check all pairs to see that they are matched (front duplicated here).
        for (HashMap.Entry<String, Integer> e : CHANNEL_PAIR_MAP.entrySet()) {
            final int positionPair = e.getValue();
            if ((channelConfig & positionPair) != 0
                    && (channelConfig & positionPair) != positionPair) {
                loge("Channel pair (" + e.getKey() + ") cannot be used independently");
                return false;
            }
        }
        final int sidePair =
                AudioFormat.CHANNEL_OUT_SIDE_LEFT | AudioFormat.CHANNEL_OUT_SIDE_RIGHT;
        if ((channelConfig & sidePair) != 0
                && (channelConfig & sidePair) != sidePair) {
            loge("Side channels can't be used independently");
            return false;
        }
        return true;
    }