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

Commit ddea818e authored by yucliu's avatar yucliu
Browse files

Add audio device type MULTICHANNEL_GROUP

Add audio device type MULTICHANNEL_GROUP for wireless speaker group
supporting multichannel content.

Flag: android.media.audio.enable_multichannel_group_device
Bug: 344031109
Test: atest CtsMediaAudioTestCases
Change-Id: Id345ccea262d23c96b2319ac040b4c15a71ba9eb
parent 98ecea72
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -21371,6 +21371,7 @@ package android.media {
    field public static final int TYPE_IP = 20; // 0x14
    field public static final int TYPE_LINE_ANALOG = 5; // 0x5
    field public static final int TYPE_LINE_DIGITAL = 6; // 0x6
    field @FlaggedApi("android.media.audio.enable_multichannel_group_device") public static final int TYPE_MULTICHANNEL_GROUP = 32; // 0x20
    field public static final int TYPE_REMOTE_SUBMIX = 25; // 0x19
    field public static final int TYPE_TELEPHONY = 18; // 0x12
    field public static final int TYPE_TV_TUNER = 17; // 0x11
+31 −2
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

package android.media;

import static android.media.audio.Flags.FLAG_ENABLE_MULTICHANNEL_GROUP_DEVICE;

import android.Manifest;
import android.annotation.FlaggedApi;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.annotation.TestApi;
import android.media.audio.Flags;
import android.util.SparseIntArray;

import com.android.internal.annotations.VisibleForTesting;
@@ -192,6 +196,15 @@ public final class AudioDeviceInfo {
     */
    public static final int TYPE_DOCK_ANALOG = 31;

    /**
     * A device type describing a speaker group that supports multichannel contents. The speakers in
     * the group are connected together using local network based protocols. The speaker group
     * requires additional input of the physical positions of each individual speaker to provide a
     * better experience on multichannel contents.
     */
    @FlaggedApi(FLAG_ENABLE_MULTICHANNEL_GROUP_DEVICE)
    public static final int TYPE_MULTICHANNEL_GROUP = 32;

    /** @hide */
    @IntDef(flag = false, prefix = "TYPE", value = {
            TYPE_BUILTIN_EARPIECE,
@@ -224,7 +237,8 @@ public final class AudioDeviceInfo {
            TYPE_BLE_SPEAKER,
            TYPE_ECHO_REFERENCE,
            TYPE_BLE_BROADCAST,
            TYPE_DOCK_ANALOG}
            TYPE_DOCK_ANALOG,
            TYPE_MULTICHANNEL_GROUP}
    )
    @Retention(RetentionPolicy.SOURCE)
    public @interface AudioDeviceType {}
@@ -285,7 +299,8 @@ public final class AudioDeviceInfo {
            TYPE_BLE_HEADSET,
            TYPE_BLE_SPEAKER,
            TYPE_BLE_BROADCAST,
            TYPE_DOCK_ANALOG}
            TYPE_DOCK_ANALOG,
            TYPE_MULTICHANNEL_GROUP}
    )
    @Retention(RetentionPolicy.SOURCE)
    public @interface AudioDeviceTypeOut {}
@@ -321,7 +336,13 @@ public final class AudioDeviceInfo {
            case TYPE_BLE_BROADCAST:
            case TYPE_DOCK_ANALOG:
                return true;

            default:
                if (Flags.enableMultichannelGroupDevice()) {
                    if (type == TYPE_MULTICHANNEL_GROUP) {
                        return true;
                    }
                }
                return false;
        }
    }
@@ -665,6 +686,10 @@ public final class AudioDeviceInfo {
        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_BLE_HEADSET, TYPE_BLE_HEADSET);
        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_BLE_SPEAKER, TYPE_BLE_SPEAKER);
        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_BLE_BROADCAST, TYPE_BLE_BROADCAST);
        if (Flags.enableMultichannelGroupDevice()) {
            INT_TO_EXT_DEVICE_MAPPING.put(
                    AudioSystem.DEVICE_OUT_MULTICHANNEL_GROUP, TYPE_MULTICHANNEL_GROUP);
        }

        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BUILTIN_MIC, TYPE_BUILTIN_MIC);
        INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BLUETOOTH_SCO_HEADSET, TYPE_BLUETOOTH_SCO);
@@ -721,6 +746,10 @@ public final class AudioDeviceInfo {
        EXT_TO_INT_DEVICE_MAPPING.put(TYPE_BLE_HEADSET, AudioSystem.DEVICE_OUT_BLE_HEADSET);
        EXT_TO_INT_DEVICE_MAPPING.put(TYPE_BLE_SPEAKER, AudioSystem.DEVICE_OUT_BLE_SPEAKER);
        EXT_TO_INT_DEVICE_MAPPING.put(TYPE_BLE_BROADCAST, AudioSystem.DEVICE_OUT_BLE_BROADCAST);
        if (Flags.enableMultichannelGroupDevice()) {
            EXT_TO_INT_DEVICE_MAPPING.put(
                    TYPE_MULTICHANNEL_GROUP, AudioSystem.DEVICE_OUT_MULTICHANNEL_GROUP);
        }

        // privileges mapping to input device
        EXT_TO_INT_INPUT_DEVICE_MAPPING = new SparseIntArray();
+5 −0
Original line number Diff line number Diff line
@@ -6155,6 +6155,11 @@ public class AudioManager {
     * The audio output device code for a BLE audio brodcast group.
     */
    public static final int DEVICE_OUT_BLE_BROADCAST = AudioSystem.DEVICE_OUT_BLE_BROADCAST;
    /** @hide
     * The audio output device code for a wireless speaker group supporting multichannel content.
     */
    public static final int DEVICE_OUT_MULTICHANNEL_GROUP =
            AudioSystem.DEVICE_OUT_MULTICHANNEL_GROUP;
    /** @hide
     * This is not used as a returned value from {@link #getDevicesForStream}, but could be
     *  used in the future in a set method to select whatever default device is chosen by the
+7 −0
Original line number Diff line number Diff line
@@ -1066,6 +1066,8 @@ public class AudioSystem
    /** @hide */
    public static final int DEVICE_OUT_IP = 0x800000;
    /** @hide */
    public static final int DEVICE_OUT_MULTICHANNEL_GROUP = 0x800001;
    /** @hide */
    public static final int DEVICE_OUT_BUS = 0x1000000;
    /** @hide */
    public static final int DEVICE_OUT_PROXY = 0x2000000;
@@ -1134,6 +1136,7 @@ public class AudioSystem
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_AUX_LINE);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_SPEAKER_SAFE);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_IP);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_MULTICHANNEL_GROUP);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_BUS);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_PROXY);
        DEVICE_OUT_ALL_SET.add(DEVICE_OUT_USB_HEADSET);
@@ -1422,6 +1425,8 @@ public class AudioSystem
    /** @hide */ public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line";
    /** @hide */ public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe";
    /** @hide */ public static final String DEVICE_OUT_IP_NAME = "ip";
    /** @hide */
    public static final String DEVICE_OUT_MULTICHANNEL_GROUP_NAME = "multichannel_group";
    /** @hide */ public static final String DEVICE_OUT_BUS_NAME = "bus";
    /** @hide */ public static final String DEVICE_OUT_PROXY_NAME = "proxy";
    /** @hide */ public static final String DEVICE_OUT_USB_HEADSET_NAME = "usb_headset";
@@ -1515,6 +1520,8 @@ public class AudioSystem
            return DEVICE_OUT_SPEAKER_SAFE_NAME;
        case DEVICE_OUT_IP:
            return DEVICE_OUT_IP_NAME;
        case DEVICE_OUT_MULTICHANNEL_GROUP:
            return DEVICE_OUT_MULTICHANNEL_GROUP_NAME;
        case DEVICE_OUT_BUS:
            return DEVICE_OUT_BUS_NAME;
        case DEVICE_OUT_PROXY: