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

Commit 8b010d24 authored by Kevin Rocard's avatar Kevin Rocard
Browse files

Audio V4: Add new Audio HAL API



Add new device to the device factory to allow vendors to split
their HAL implementations more.

AudioDevice bitfield is now 64bit to allow more devices to be added.

Add a new AudioDevice to support playing music to distant during voice
call.

A HAL can now declare if its MMAP buffer can be securely accessed
directly by untrusted apps.

Add AAC_XHE format.

Add BLE input source.

Bug: 38184704
Test: none
Change-Id: Ic2fbec4db71c7f688c8847ba39c72f51480c0727
Signed-off-by: default avatarKevin Rocard <krocard@google.com>
parent 71afcf1f
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -22,12 +22,26 @@ import IDevice;
interface IDevicesFactory {
    typedef android.hardware.audio@4.0::Result Result;

    /** Allows a HAL implementation to be split in multiple independent
     *  devices (called module in the pre-treble API).
     *  Note that this division is arbitrary and implementation are free
     *  to only have a Primary.
     *  The framework will query the devices according to audio_policy_configuration.xml
     *
     *  Each Device value is interchangeable with any other and the framework
     *  does not differentiate between values with the following exceptions:
     *  - the Primary device must always be present
     *  - the R_SUBMIX that is used to forward audio of REMOTE_SUBMIX DEVICES
     */
    enum Device : int32_t {
        PRIMARY,
        A2DP,
        USB,
        R_SUBMIX,
        STUB
        STUB,
        CODEC_OFFLOAD,
        SECONDARY,
        AUXILIARY
    };

    /**
+20 −3
Original line number Diff line number Diff line
@@ -73,14 +73,31 @@ struct DeviceAddress {
    string rSubmixAddress;  // used for REMOTE_SUBMIX
};

enum MmapBufferFlag : uint32_t {
    NONE    = 0x0,
    /**
     * If the buffer can be securely shared to untrusted applications
     * through the AAudio exclusive mode.
     * Only set this flag if applications are restricted from accessing the
     * memory surrounding the audio data buffer by a kernel mechanism.
     * See Linux kernel's dma_buf.
     */
    APPLICATION_SHAREABLE    = 0x1,
};

/**
 * Mmap buffer descriptor returned by IStream.createMmapBuffer().
 * Used by streams opened in mmap mode.
 */
struct MmapBufferInfo {
    memory  sharedMemory;         // mmap memory buffer
    int32_t bufferSizeFrames;     // total buffer size in frames
    int32_t burstSizeFrames;      // transfer size granularity in frames
    /** Mmap memory buffer */
    memory  sharedMemory;
    /** Total buffer size in frames */
    int32_t bufferSizeFrames;
    /** Transfer size granularity in frames */
    int32_t burstSizeFrames;
    /** Attributes describing the buffer. */
    bitfield<MmapBufferFlag> flags;
};

/**
+8 −2
Original line number Diff line number Diff line
@@ -248,6 +248,7 @@ enum AudioFormat : uint32_t {
    AAC_SUB_LD            = 0x80,
    AAC_SUB_HE_V2         = 0x100,
    AAC_SUB_ELD           = 0x200,
    AAC_SUB_XHE           = 0x300,

    VORBIS_SUB_NONE       = 0x0,

@@ -270,6 +271,7 @@ enum AudioFormat : uint32_t {
    AAC_LD              = (AAC | AAC_SUB_LD),
    AAC_HE_V2           = (AAC | AAC_SUB_HE_V2),
    AAC_ELD             = (AAC | AAC_SUB_ELD),
    AAC_XHE             = (AAC | AAC_SUB_XHE),
    AAC_ADTS_MAIN       = (AAC_ADTS | AAC_SUB_MAIN),
    AAC_ADTS_LC         = (AAC_ADTS | AAC_SUB_LC),
    AAC_ADTS_SSR        = (AAC_ADTS | AAC_SUB_SSR),
@@ -279,7 +281,8 @@ enum AudioFormat : uint32_t {
    AAC_ADTS_ERLC       = (AAC_ADTS | AAC_SUB_ERLC),
    AAC_ADTS_LD         = (AAC_ADTS | AAC_SUB_LD),
    AAC_ADTS_HE_V2      = (AAC_ADTS | AAC_SUB_HE_V2),
    AAC_ADTS_ELD        = (AAC_ADTS | AAC_SUB_ELD)
    AAC_ADTS_ELD        = (AAC_ADTS | AAC_SUB_ELD),
    AAC_ADTS_XHE        = (AAC_ADTS | AAC_SUB_XHE),
};

/**
@@ -466,7 +469,7 @@ enum AudioMode : int32_t {
};

@export(name="", value_prefix="AUDIO_DEVICE_")
enum AudioDevice : uint32_t {
enum AudioDevice : uint64_t {
    NONE                          = 0x0,
    /** reserved bits */
    BIT_IN                        = 0x80000000,
@@ -546,6 +549,7 @@ enum AudioDevice : uint32_t {
    IN_BUS                   = BIT_IN | 0x100000,
    IN_PROXY                 = BIT_IN | 0x1000000,
    IN_USB_HEADSET           = BIT_IN | 0x2000000,
    IN_BLUETOOTH_BLE         = BIT_IN | 0x4000000,
    IN_DEFAULT               = BIT_IN | BIT_DEFAULT,

    // Note that the 2.0 IN_ALL* have been moved to helper functions
@@ -590,6 +594,8 @@ enum AudioOutputFlag : int32_t {
                             // to pass through compress path for DSP post proc.
    MMAP_NOIRQ = 0x4000, // output operates in MMAP no IRQ mode.
    VOIP_RX = 0x8000,    // preferred output for VoIP calls.
    /** preferred output for call music */
    INCALL_MUSIC = 0x10000,
};

/**