OSDN Git Service

Audio V4: Update audio.h to V4.0
authorKevin Rocard <krocard@google.com>
Fri, 23 Feb 2018 18:01:56 +0000 (10:01 -0800)
committerKevin Rocard <krocard@google.com>
Tue, 6 Mar 2018 22:16:22 +0000 (14:16 -0800)
Exported the audio/common/4.0/types.h to audio-base.h.

As all system only values are removed in 4.0 but the headers
are still shared between vendor and system,
add those values back protected by the macro
AUDIO_NO_SYSTEM_DECLARATIONS.

This macro is defined for vendor libraries.

audio.h used to have *_CNT and *_MAX values in its enum
mostly for enum iteration.

This was not compatible with Treble as it denied any enum
inheritance.

*_CNT and *_MAX are now implemented with constants that can
be updated and are not part of the HIDL API.

Bug: 38184704
Test: compile
Change-Id: I5f99ccc9ce262b3addb15cd5034a885c9ab4cedf
Merged-In: I5f99ccc9ce262b3addb15cd5034a885c9ab4cedf
Cherry-picked from master
Signed-off-by: Kevin Rocard <krocard@google.com>
audio/Android.bp
audio/include/system/audio-base-utils.h [new file with mode: 0644]
audio/include/system/audio-base.h
audio/include/system/audio.h
audio/include/system/audio_effect-base.h
audio/include/system/audio_effect.h

index 1e9e569..68043da 100644 (file)
@@ -15,5 +15,8 @@ cc_library_headers {
         windows: {
             enabled: true,
         },
+        vendor: {
+            cflags: ["AUDIO_NO_SYSTEM_DECLARATIONS"],
+        },
     }
 }
diff --git a/audio/include/system/audio-base-utils.h b/audio/include/system/audio-base-utils.h
new file mode 100644 (file)
index 0000000..bd3e763
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef ANDROID_AUDIO_BASE_UTILS_H
+#define ANDROID_AUDIO_BASE_UTILS_H
+
+#include "audio-base.h"
+
+/** Define helper values to iterate over enum, extend them or checking value validity.
+ *  Those values are compatible with the O corresponding enum values.
+ *  They are not macro like similar values in audio.h to avoid conflicting
+ *  with the libhardware_legacy audio.h.
+ */
+enum {
+    /** Number of audio stream available to vendors. */
+    AUDIO_STREAM_PUBLIC_CNT = AUDIO_STREAM_ACCESSIBILITY + 1,
+
+#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
+    /** Total number of stream handled by the policy*/
+    AUDIO_STREAM_FOR_POLICY_CNT= AUDIO_STREAM_REROUTING + 1,
+#endif
+
+   /** Total number of stream. */
+    AUDIO_STREAM_CNT          = AUDIO_STREAM_PATCH + 1,
+
+    AUDIO_SOURCE_MAX          = AUDIO_SOURCE_UNPROCESSED,
+    AUDIO_SOURCE_CNT          = AUDIO_SOURCE_MAX + 1,
+
+    AUDIO_MODE_MAX            = AUDIO_MODE_IN_COMMUNICATION,
+    AUDIO_MODE_CNT            = AUDIO_MODE_MAX + 1,
+
+    /** For retrocompatibility AUDIO_MODE_* and AUDIO_STREAM_* must be signed. */
+    AUDIO_DETAIL_NEGATIVE_VALUE = -1,
+};
+
+enum {
+    AUDIO_CHANNEL_OUT_ALL     = AUDIO_CHANNEL_OUT_FRONT_LEFT |
+                                AUDIO_CHANNEL_OUT_FRONT_RIGHT |
+                                AUDIO_CHANNEL_OUT_FRONT_CENTER |
+                                AUDIO_CHANNEL_OUT_LOW_FREQUENCY |
+                                AUDIO_CHANNEL_OUT_BACK_LEFT |
+                                AUDIO_CHANNEL_OUT_BACK_RIGHT |
+                                AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER |
+                                AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER |
+                                AUDIO_CHANNEL_OUT_BACK_CENTER |
+                                AUDIO_CHANNEL_OUT_SIDE_LEFT |
+                                AUDIO_CHANNEL_OUT_SIDE_RIGHT |
+                                AUDIO_CHANNEL_OUT_TOP_CENTER |
+                                AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT |
+                                AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER |
+                                AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT |
+                                AUDIO_CHANNEL_OUT_TOP_BACK_LEFT |
+                                AUDIO_CHANNEL_OUT_TOP_BACK_CENTER |
+                                AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT |
+                                AUDIO_CHANNEL_OUT_TOP_CENTER_LEFT |
+                                AUDIO_CHANNEL_OUT_TOP_CENTER_RIGHT,
+
+    AUDIO_CHANNEL_IN_ALL      = AUDIO_CHANNEL_IN_LEFT |
+                                AUDIO_CHANNEL_IN_RIGHT |
+                                AUDIO_CHANNEL_IN_FRONT |
+                                AUDIO_CHANNEL_IN_BACK|
+                                AUDIO_CHANNEL_IN_LEFT_PROCESSED |
+                                AUDIO_CHANNEL_IN_RIGHT_PROCESSED |
+                                AUDIO_CHANNEL_IN_FRONT_PROCESSED |
+                                AUDIO_CHANNEL_IN_BACK_PROCESSED|
+                                AUDIO_CHANNEL_IN_PRESSURE |
+                                AUDIO_CHANNEL_IN_X_AXIS |
+                                AUDIO_CHANNEL_IN_Y_AXIS |
+                                AUDIO_CHANNEL_IN_Z_AXIS |
+                                AUDIO_CHANNEL_IN_VOICE_UPLINK |
+                                AUDIO_CHANNEL_IN_VOICE_DNLINK |
+                                AUDIO_CHANNEL_IN_BACK_LEFT |
+                                AUDIO_CHANNEL_IN_BACK_RIGHT |
+                                AUDIO_CHANNEL_IN_CENTER |
+                                AUDIO_CHANNEL_IN_LOW_FREQUENCY |
+                                AUDIO_CHANNEL_IN_TOP_LEFT |
+                                AUDIO_CHANNEL_IN_TOP_RIGHT,
+
+    AUDIO_DEVICE_OUT_ALL      = AUDIO_DEVICE_OUT_EARPIECE |
+                                AUDIO_DEVICE_OUT_SPEAKER |
+                                AUDIO_DEVICE_OUT_WIRED_HEADSET |
+                                AUDIO_DEVICE_OUT_WIRED_HEADPHONE |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_SCO |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_A2DP |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER |
+                                AUDIO_DEVICE_OUT_HDMI |
+                                AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET |
+                                AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET |
+                                AUDIO_DEVICE_OUT_USB_ACCESSORY |
+                                AUDIO_DEVICE_OUT_USB_DEVICE |
+                                AUDIO_DEVICE_OUT_REMOTE_SUBMIX |
+                                AUDIO_DEVICE_OUT_TELEPHONY_TX |
+                                AUDIO_DEVICE_OUT_LINE |
+                                AUDIO_DEVICE_OUT_HDMI_ARC |
+                                AUDIO_DEVICE_OUT_SPDIF |
+                                AUDIO_DEVICE_OUT_FM |
+                                AUDIO_DEVICE_OUT_AUX_LINE |
+                                AUDIO_DEVICE_OUT_SPEAKER_SAFE |
+                                AUDIO_DEVICE_OUT_IP |
+                                AUDIO_DEVICE_OUT_BUS |
+                                AUDIO_DEVICE_OUT_PROXY |
+                                AUDIO_DEVICE_OUT_USB_HEADSET |
+                                AUDIO_DEVICE_OUT_HEARING_AID |
+                                AUDIO_DEVICE_OUT_ECHO_CANCELLER |
+                                AUDIO_DEVICE_OUT_DEFAULT,
+
+    AUDIO_DEVICE_OUT_ALL_A2DP = AUDIO_DEVICE_OUT_BLUETOOTH_A2DP |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER,
+
+    AUDIO_DEVICE_OUT_ALL_SCO  = AUDIO_DEVICE_OUT_BLUETOOTH_SCO |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
+                                AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT,
+
+    AUDIO_DEVICE_OUT_ALL_USB  = AUDIO_DEVICE_OUT_USB_ACCESSORY |
+                                AUDIO_DEVICE_OUT_USB_DEVICE |
+                                AUDIO_DEVICE_OUT_USB_HEADSET,
+
+    AUDIO_DEVICE_IN_ALL       = AUDIO_DEVICE_IN_COMMUNICATION |
+                                AUDIO_DEVICE_IN_AMBIENT |
+                                AUDIO_DEVICE_IN_BUILTIN_MIC |
+                                AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET |
+                                AUDIO_DEVICE_IN_WIRED_HEADSET |
+                                AUDIO_DEVICE_IN_HDMI |
+                                AUDIO_DEVICE_IN_TELEPHONY_RX |
+                                AUDIO_DEVICE_IN_BACK_MIC |
+                                AUDIO_DEVICE_IN_REMOTE_SUBMIX |
+                                AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET |
+                                AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET |
+                                AUDIO_DEVICE_IN_USB_ACCESSORY |
+                                AUDIO_DEVICE_IN_USB_DEVICE |
+                                AUDIO_DEVICE_IN_FM_TUNER |
+                                AUDIO_DEVICE_IN_TV_TUNER |
+                                AUDIO_DEVICE_IN_LINE |
+                                AUDIO_DEVICE_IN_SPDIF |
+                                AUDIO_DEVICE_IN_BLUETOOTH_A2DP |
+                                AUDIO_DEVICE_IN_LOOPBACK |
+                                AUDIO_DEVICE_IN_IP |
+                                AUDIO_DEVICE_IN_BUS |
+                                AUDIO_DEVICE_IN_PROXY |
+                                AUDIO_DEVICE_IN_USB_HEADSET |
+                                AUDIO_DEVICE_IN_BLUETOOTH_BLE |
+                                AUDIO_DEVICE_IN_DEFAULT,
+
+    AUDIO_DEVICE_IN_ALL_SCO   = AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET,
+
+    AUDIO_DEVICE_IN_ALL_USB   = AUDIO_DEVICE_IN_USB_ACCESSORY |
+                                AUDIO_DEVICE_IN_USB_DEVICE |
+                                AUDIO_DEVICE_IN_USB_HEADSET,
+
+    AUDIO_USAGE_MAX           = AUDIO_USAGE_ASSISTANT,
+    AUDIO_USAGE_CNT           = AUDIO_USAGE_ASSISTANT + 1,
+
+    AUDIO_PORT_CONFIG_ALL     = AUDIO_PORT_CONFIG_SAMPLE_RATE |
+                                AUDIO_PORT_CONFIG_CHANNEL_MASK |
+                                AUDIO_PORT_CONFIG_FORMAT |
+                                AUDIO_PORT_CONFIG_GAIN,
+}; // enum
+
+
+#endif  // ANDROID_AUDIO_BASE_UTILS_H
index 441226d..9152084 100644 (file)
@@ -1,9 +1,10 @@
-// This file is autogenerated by hidl-gen. Do not edit manually.
-// Source: android.hardware.audio.common@2.0
+// This file is autogenerated by hidl-gen
+// then manualy edited for retrocompatiblity
+// Source: android.hardware.audio.common@4.0
 // Root: android.hardware:hardware/interfaces
 
-#ifndef HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V2_0_EXPORTED_CONSTANTS_H_
-#define HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V2_0_EXPORTED_CONSTANTS_H_
+#ifndef HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V4_0_EXPORTED_CONSTANTS_H_
+#define HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V4_0_EXPORTED_CONSTANTS_H_
 
 #ifdef __cplusplus
 extern "C" {
@@ -30,11 +31,12 @@ typedef enum {
     AUDIO_STREAM_DTMF = 8,
     AUDIO_STREAM_TTS = 9,
     AUDIO_STREAM_ACCESSIBILITY = 10,
+#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
+    /** For dynamic policy output mixes. Only used by the audio policy */
     AUDIO_STREAM_REROUTING = 11,
+    /** For audio flinger tracks volume. Only used by the audioflinger */
     AUDIO_STREAM_PATCH = 12,
-    AUDIO_STREAM_PUBLIC_CNT = 11, // (ACCESSIBILITY + 1)
-    AUDIO_STREAM_FOR_POLICY_CNT = 12, // PATCH
-    AUDIO_STREAM_CNT = 13, // (PATCH + 1)
+#endif // AUDIO_NO_SYSTEM_DECLARATIONS
 } audio_stream_type_t;
 
 typedef enum {
@@ -48,10 +50,15 @@ typedef enum {
     AUDIO_SOURCE_VOICE_COMMUNICATION = 7,
     AUDIO_SOURCE_REMOTE_SUBMIX = 8,
     AUDIO_SOURCE_UNPROCESSED = 9,
-    AUDIO_SOURCE_CNT = 10,
-    AUDIO_SOURCE_MAX = 9, // (CNT - 1)
     AUDIO_SOURCE_FM_TUNER = 1998,
+#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
+    /**
+     * A low-priority, preemptible audio source for for background software
+     * hotword detection. Same tuning as VOICE_RECOGNITION.
+     * Used only internally by the framework.
+     */
     AUDIO_SOURCE_HOTWORD = 1999,
+#endif // AUDIO_NO_SYSTEM_DECLARATIONS
 } audio_source_t;
 
 typedef enum {
@@ -62,64 +69,70 @@ typedef enum {
 } audio_session_t;
 
 typedef enum {
-    AUDIO_FORMAT_INVALID = 4294967295u, // 0xFFFFFFFFUL
-    AUDIO_FORMAT_DEFAULT = 0u, // 0
-    AUDIO_FORMAT_PCM = 0u, // 0x00000000UL
-    AUDIO_FORMAT_MP3 = 16777216u, // 0x01000000UL
-    AUDIO_FORMAT_AMR_NB = 33554432u, // 0x02000000UL
-    AUDIO_FORMAT_AMR_WB = 50331648u, // 0x03000000UL
-    AUDIO_FORMAT_AAC = 67108864u, // 0x04000000UL
-    AUDIO_FORMAT_HE_AAC_V1 = 83886080u, // 0x05000000UL
-    AUDIO_FORMAT_HE_AAC_V2 = 100663296u, // 0x06000000UL
-    AUDIO_FORMAT_VORBIS = 117440512u, // 0x07000000UL
-    AUDIO_FORMAT_OPUS = 134217728u, // 0x08000000UL
-    AUDIO_FORMAT_AC3 = 150994944u, // 0x09000000UL
-    AUDIO_FORMAT_E_AC3 = 167772160u, // 0x0A000000UL
-    AUDIO_FORMAT_DTS = 184549376u, // 0x0B000000UL
-    AUDIO_FORMAT_DTS_HD = 201326592u, // 0x0C000000UL
-    AUDIO_FORMAT_IEC61937 = 218103808u, // 0x0D000000UL
-    AUDIO_FORMAT_DOLBY_TRUEHD = 234881024u, // 0x0E000000UL
-    AUDIO_FORMAT_EVRC = 268435456u, // 0x10000000UL
-    AUDIO_FORMAT_EVRCB = 285212672u, // 0x11000000UL
-    AUDIO_FORMAT_EVRCWB = 301989888u, // 0x12000000UL
-    AUDIO_FORMAT_EVRCNW = 318767104u, // 0x13000000UL
-    AUDIO_FORMAT_AAC_ADIF = 335544320u, // 0x14000000UL
-    AUDIO_FORMAT_WMA = 352321536u, // 0x15000000UL
-    AUDIO_FORMAT_WMA_PRO = 369098752u, // 0x16000000UL
-    AUDIO_FORMAT_AMR_WB_PLUS = 385875968u, // 0x17000000UL
-    AUDIO_FORMAT_MP2 = 402653184u, // 0x18000000UL
-    AUDIO_FORMAT_QCELP = 419430400u, // 0x19000000UL
-    AUDIO_FORMAT_DSD = 436207616u, // 0x1A000000UL
-    AUDIO_FORMAT_FLAC = 452984832u, // 0x1B000000UL
-    AUDIO_FORMAT_ALAC = 469762048u, // 0x1C000000UL
-    AUDIO_FORMAT_APE = 486539264u, // 0x1D000000UL
-    AUDIO_FORMAT_AAC_ADTS = 503316480u, // 0x1E000000UL
-    AUDIO_FORMAT_SBC = 520093696u, // 0x1F000000UL
-    AUDIO_FORMAT_APTX = 536870912u, // 0x20000000UL
-    AUDIO_FORMAT_APTX_HD = 553648128u, // 0x21000000UL
-    AUDIO_FORMAT_AC4 = 570425344u, // 0x22000000UL
-    AUDIO_FORMAT_LDAC = 587202560u, // 0x23000000UL
-    AUDIO_FORMAT_MAIN_MASK = 4278190080u, // 0xFF000000UL
-    AUDIO_FORMAT_SUB_MASK = 16777215u, // 0x00FFFFFFUL
-    AUDIO_FORMAT_PCM_SUB_16_BIT = 1u, // 0x1
-    AUDIO_FORMAT_PCM_SUB_8_BIT = 2u, // 0x2
-    AUDIO_FORMAT_PCM_SUB_32_BIT = 3u, // 0x3
-    AUDIO_FORMAT_PCM_SUB_8_24_BIT = 4u, // 0x4
-    AUDIO_FORMAT_PCM_SUB_FLOAT = 5u, // 0x5
-    AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 6u, // 0x6
-    AUDIO_FORMAT_MP3_SUB_NONE = 0u, // 0x0
-    AUDIO_FORMAT_AMR_SUB_NONE = 0u, // 0x0
-    AUDIO_FORMAT_AAC_SUB_MAIN = 1u, // 0x1
-    AUDIO_FORMAT_AAC_SUB_LC = 2u, // 0x2
-    AUDIO_FORMAT_AAC_SUB_SSR = 4u, // 0x4
-    AUDIO_FORMAT_AAC_SUB_LTP = 8u, // 0x8
-    AUDIO_FORMAT_AAC_SUB_HE_V1 = 16u, // 0x10
-    AUDIO_FORMAT_AAC_SUB_SCALABLE = 32u, // 0x20
-    AUDIO_FORMAT_AAC_SUB_ERLC = 64u, // 0x40
-    AUDIO_FORMAT_AAC_SUB_LD = 128u, // 0x80
-    AUDIO_FORMAT_AAC_SUB_HE_V2 = 256u, // 0x100
-    AUDIO_FORMAT_AAC_SUB_ELD = 512u, // 0x200
-    AUDIO_FORMAT_VORBIS_SUB_NONE = 0u, // 0x0
+    AUDIO_FORMAT_INVALID = 4294967295u,
+    AUDIO_FORMAT_DEFAULT = 0u,
+    AUDIO_FORMAT_PCM = 0u,
+    AUDIO_FORMAT_MP3 = 16777216u,
+    AUDIO_FORMAT_AMR_NB = 33554432u,
+    AUDIO_FORMAT_AMR_WB = 50331648u,
+    AUDIO_FORMAT_AAC = 67108864u,
+    AUDIO_FORMAT_HE_AAC_V1 = 83886080u,
+    AUDIO_FORMAT_HE_AAC_V2 = 100663296u,
+    AUDIO_FORMAT_VORBIS = 117440512u,
+    AUDIO_FORMAT_OPUS = 134217728u,
+    AUDIO_FORMAT_AC3 = 150994944u,
+    AUDIO_FORMAT_E_AC3 = 167772160u,
+    AUDIO_FORMAT_DTS = 184549376u,
+    AUDIO_FORMAT_DTS_HD = 201326592u,
+    AUDIO_FORMAT_IEC61937 = 218103808u,
+    AUDIO_FORMAT_DOLBY_TRUEHD = 234881024u,
+    AUDIO_FORMAT_EVRC = 268435456u,
+    AUDIO_FORMAT_EVRCB = 285212672u,
+    AUDIO_FORMAT_EVRCWB = 301989888u,
+    AUDIO_FORMAT_EVRCNW = 318767104u,
+    AUDIO_FORMAT_AAC_ADIF = 335544320u,
+    AUDIO_FORMAT_WMA = 352321536u,
+    AUDIO_FORMAT_WMA_PRO = 369098752u,
+    AUDIO_FORMAT_AMR_WB_PLUS = 385875968u,
+    AUDIO_FORMAT_MP2 = 402653184u,
+    AUDIO_FORMAT_QCELP = 419430400u,
+    AUDIO_FORMAT_DSD = 436207616u,
+    AUDIO_FORMAT_FLAC = 452984832u,
+    AUDIO_FORMAT_ALAC = 469762048u,
+    AUDIO_FORMAT_APE = 486539264u,
+    AUDIO_FORMAT_AAC_ADTS = 503316480u,
+    AUDIO_FORMAT_SBC = 520093696u,
+    AUDIO_FORMAT_APTX = 536870912u,
+    AUDIO_FORMAT_APTX_HD = 553648128u,
+    AUDIO_FORMAT_AC4 = 570425344u,
+    AUDIO_FORMAT_LDAC = 587202560u,
+    AUDIO_FORMAT_MAT = 603979776u,
+    AUDIO_FORMAT_MAIN_MASK = 4278190080u,
+    AUDIO_FORMAT_SUB_MASK = 16777215u,
+    AUDIO_FORMAT_PCM_SUB_16_BIT = 1u,
+    AUDIO_FORMAT_PCM_SUB_8_BIT = 2u,
+    AUDIO_FORMAT_PCM_SUB_32_BIT = 3u,
+    AUDIO_FORMAT_PCM_SUB_8_24_BIT = 4u,
+    AUDIO_FORMAT_PCM_SUB_FLOAT = 5u,
+    AUDIO_FORMAT_PCM_SUB_24_BIT_PACKED = 6u,
+    AUDIO_FORMAT_MP3_SUB_NONE = 0u,
+    AUDIO_FORMAT_AMR_SUB_NONE = 0u,
+    AUDIO_FORMAT_AAC_SUB_MAIN = 1u,
+    AUDIO_FORMAT_AAC_SUB_LC = 2u,
+    AUDIO_FORMAT_AAC_SUB_SSR = 4u,
+    AUDIO_FORMAT_AAC_SUB_LTP = 8u,
+    AUDIO_FORMAT_AAC_SUB_HE_V1 = 16u,
+    AUDIO_FORMAT_AAC_SUB_SCALABLE = 32u,
+    AUDIO_FORMAT_AAC_SUB_ERLC = 64u,
+    AUDIO_FORMAT_AAC_SUB_LD = 128u,
+    AUDIO_FORMAT_AAC_SUB_HE_V2 = 256u,
+    AUDIO_FORMAT_AAC_SUB_ELD = 512u,
+    AUDIO_FORMAT_AAC_SUB_XHE = 768u,
+    AUDIO_FORMAT_VORBIS_SUB_NONE = 0u,
+    AUDIO_FORMAT_E_AC3_SUB_JOC = 1u,
+    AUDIO_FORMAT_MAT_SUB_1_0 = 1u,
+    AUDIO_FORMAT_MAT_SUB_2_0 = 2u,
+    AUDIO_FORMAT_MAT_SUB_2_1 = 3u,
     AUDIO_FORMAT_PCM_16_BIT = 1u, // (PCM | PCM_SUB_16_BIT)
     AUDIO_FORMAT_PCM_8_BIT = 2u, // (PCM | PCM_SUB_8_BIT)
     AUDIO_FORMAT_PCM_32_BIT = 3u, // (PCM | PCM_SUB_32_BIT)
@@ -136,6 +149,7 @@ typedef enum {
     AUDIO_FORMAT_AAC_LD = 67108992u, // (AAC | AAC_SUB_LD)
     AUDIO_FORMAT_AAC_HE_V2 = 67109120u, // (AAC | AAC_SUB_HE_V2)
     AUDIO_FORMAT_AAC_ELD = 67109376u, // (AAC | AAC_SUB_ELD)
+    AUDIO_FORMAT_AAC_XHE = 67109632u, // (AAC | AAC_SUB_XHE)
     AUDIO_FORMAT_AAC_ADTS_MAIN = 503316481u, // (AAC_ADTS | AAC_SUB_MAIN)
     AUDIO_FORMAT_AAC_ADTS_LC = 503316482u, // (AAC_ADTS | AAC_SUB_LC)
     AUDIO_FORMAT_AAC_ADTS_SSR = 503316484u, // (AAC_ADTS | AAC_SUB_SSR)
@@ -146,6 +160,11 @@ typedef enum {
     AUDIO_FORMAT_AAC_ADTS_LD = 503316608u, // (AAC_ADTS | AAC_SUB_LD)
     AUDIO_FORMAT_AAC_ADTS_HE_V2 = 503316736u, // (AAC_ADTS | AAC_SUB_HE_V2)
     AUDIO_FORMAT_AAC_ADTS_ELD = 503316992u, // (AAC_ADTS | AAC_SUB_ELD)
+    AUDIO_FORMAT_AAC_ADTS_XHE = 503317248u, // (AAC_ADTS | AAC_SUB_XHE)
+    AUDIO_FORMAT_E_AC3_JOC = 167772161u, // (E_AC3 | E_AC3_SUB_JOC)
+    AUDIO_FORMAT_MAT_1_0 = 603979777u, // (MAT | MAT_SUB_1_0)
+    AUDIO_FORMAT_MAT_2_0 = 603979778u, // (MAT | MAT_SUB_2_0)
+    AUDIO_FORMAT_MAT_2_1 = 603979779u, // (MAT | MAT_SUB_2_1)
 } audio_format_t;
 
 enum {
@@ -154,31 +173,37 @@ enum {
 };
 
 enum {
-    AUDIO_CHANNEL_REPRESENTATION_POSITION = 0u, // 0
-    AUDIO_CHANNEL_REPRESENTATION_INDEX = 2u, // 2
-    AUDIO_CHANNEL_NONE = 0u, // 0x0
-    AUDIO_CHANNEL_INVALID = 3221225472u, // 0xC0000000
-    AUDIO_CHANNEL_OUT_FRONT_LEFT = 1u, // 0x1
-    AUDIO_CHANNEL_OUT_FRONT_RIGHT = 2u, // 0x2
-    AUDIO_CHANNEL_OUT_FRONT_CENTER = 4u, // 0x4
-    AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 8u, // 0x8
-    AUDIO_CHANNEL_OUT_BACK_LEFT = 16u, // 0x10
-    AUDIO_CHANNEL_OUT_BACK_RIGHT = 32u, // 0x20
-    AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 64u, // 0x40
-    AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 128u, // 0x80
-    AUDIO_CHANNEL_OUT_BACK_CENTER = 256u, // 0x100
-    AUDIO_CHANNEL_OUT_SIDE_LEFT = 512u, // 0x200
-    AUDIO_CHANNEL_OUT_SIDE_RIGHT = 1024u, // 0x400
-    AUDIO_CHANNEL_OUT_TOP_CENTER = 2048u, // 0x800
-    AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 4096u, // 0x1000
-    AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 8192u, // 0x2000
-    AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 16384u, // 0x4000
-    AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 32768u, // 0x8000
-    AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 65536u, // 0x10000
-    AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 131072u, // 0x20000
+    AUDIO_CHANNEL_REPRESENTATION_POSITION = 0u,
+    AUDIO_CHANNEL_REPRESENTATION_INDEX = 2u,
+    AUDIO_CHANNEL_NONE = 0u,
+    AUDIO_CHANNEL_INVALID = 3221225472u,
+    AUDIO_CHANNEL_OUT_FRONT_LEFT = 1u,
+    AUDIO_CHANNEL_OUT_FRONT_RIGHT = 2u,
+    AUDIO_CHANNEL_OUT_FRONT_CENTER = 4u,
+    AUDIO_CHANNEL_OUT_LOW_FREQUENCY = 8u,
+    AUDIO_CHANNEL_OUT_BACK_LEFT = 16u,
+    AUDIO_CHANNEL_OUT_BACK_RIGHT = 32u,
+    AUDIO_CHANNEL_OUT_FRONT_LEFT_OF_CENTER = 64u,
+    AUDIO_CHANNEL_OUT_FRONT_RIGHT_OF_CENTER = 128u,
+    AUDIO_CHANNEL_OUT_BACK_CENTER = 256u,
+    AUDIO_CHANNEL_OUT_SIDE_LEFT = 512u,
+    AUDIO_CHANNEL_OUT_SIDE_RIGHT = 1024u,
+    AUDIO_CHANNEL_OUT_TOP_CENTER = 2048u,
+    AUDIO_CHANNEL_OUT_TOP_FRONT_LEFT = 4096u,
+    AUDIO_CHANNEL_OUT_TOP_FRONT_CENTER = 8192u,
+    AUDIO_CHANNEL_OUT_TOP_FRONT_RIGHT = 16384u,
+    AUDIO_CHANNEL_OUT_TOP_BACK_LEFT = 32768u,
+    AUDIO_CHANNEL_OUT_TOP_BACK_CENTER = 65536u,
+    AUDIO_CHANNEL_OUT_TOP_BACK_RIGHT = 131072u,
+    AUDIO_CHANNEL_OUT_TOP_CENTER_LEFT = 262144u,
+    AUDIO_CHANNEL_OUT_TOP_CENTER_RIGHT = 524288u,
     AUDIO_CHANNEL_OUT_MONO = 1u, // OUT_FRONT_LEFT
     AUDIO_CHANNEL_OUT_STEREO = 3u, // (OUT_FRONT_LEFT | OUT_FRONT_RIGHT)
     AUDIO_CHANNEL_OUT_2POINT1 = 11u, // ((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_LOW_FREQUENCY)
+    AUDIO_CHANNEL_OUT_2POINT0POINT2 = 786435u, // (((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_TOP_CENTER_LEFT) | OUT_TOP_CENTER_RIGHT)
+    AUDIO_CHANNEL_OUT_2POINT1POINT2 = 786443u, // ((((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_TOP_CENTER_LEFT) | OUT_TOP_CENTER_RIGHT) | OUT_LOW_FREQUENCY)
+    AUDIO_CHANNEL_OUT_3POINT0POINT2 = 786439u, // ((((OUT_FRONT_LEFT | OUT_FRONT_CENTER) | OUT_FRONT_RIGHT) | OUT_TOP_CENTER_LEFT) | OUT_TOP_CENTER_RIGHT)
+    AUDIO_CHANNEL_OUT_3POINT1POINT2 = 786447u, // (((((OUT_FRONT_LEFT | OUT_FRONT_CENTER) | OUT_FRONT_RIGHT) | OUT_TOP_CENTER_LEFT) | OUT_TOP_CENTER_RIGHT) | OUT_LOW_FREQUENCY)
     AUDIO_CHANNEL_OUT_QUAD = 51u, // (((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_BACK_LEFT) | OUT_BACK_RIGHT)
     AUDIO_CHANNEL_OUT_QUAD_BACK = 51u, // OUT_QUAD
     AUDIO_CHANNEL_OUT_QUAD_SIDE = 1539u, // (((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_SIDE_LEFT) | OUT_SIDE_RIGHT)
@@ -189,30 +214,35 @@ enum {
     AUDIO_CHANNEL_OUT_5POINT1_SIDE = 1551u, // (((((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_FRONT_CENTER) | OUT_LOW_FREQUENCY) | OUT_SIDE_LEFT) | OUT_SIDE_RIGHT)
     AUDIO_CHANNEL_OUT_6POINT1 = 319u, // ((((((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_FRONT_CENTER) | OUT_LOW_FREQUENCY) | OUT_BACK_LEFT) | OUT_BACK_RIGHT) | OUT_BACK_CENTER)
     AUDIO_CHANNEL_OUT_7POINT1 = 1599u, // (((((((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_FRONT_CENTER) | OUT_LOW_FREQUENCY) | OUT_BACK_LEFT) | OUT_BACK_RIGHT) | OUT_SIDE_LEFT) | OUT_SIDE_RIGHT)
-    AUDIO_CHANNEL_OUT_ALL = 262143u, // (((((((((((((((((OUT_FRONT_LEFT | OUT_FRONT_RIGHT) | OUT_FRONT_CENTER) | OUT_LOW_FREQUENCY) | OUT_BACK_LEFT) | OUT_BACK_RIGHT) | OUT_FRONT_LEFT_OF_CENTER) | OUT_FRONT_RIGHT_OF_CENTER) | OUT_BACK_CENTER) | OUT_SIDE_LEFT) | OUT_SIDE_RIGHT) | OUT_TOP_CENTER) | OUT_TOP_FRONT_LEFT) | OUT_TOP_FRONT_CENTER) | OUT_TOP_FRONT_RIGHT) | OUT_TOP_BACK_LEFT) | OUT_TOP_BACK_CENTER) | OUT_TOP_BACK_RIGHT)
-    AUDIO_CHANNEL_IN_LEFT = 4u, // 0x4
-    AUDIO_CHANNEL_IN_RIGHT = 8u, // 0x8
-    AUDIO_CHANNEL_IN_FRONT = 16u, // 0x10
-    AUDIO_CHANNEL_IN_BACK = 32u, // 0x20
-    AUDIO_CHANNEL_IN_LEFT_PROCESSED = 64u, // 0x40
-    AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 128u, // 0x80
-    AUDIO_CHANNEL_IN_FRONT_PROCESSED = 256u, // 0x100
-    AUDIO_CHANNEL_IN_BACK_PROCESSED = 512u, // 0x200
-    AUDIO_CHANNEL_IN_PRESSURE = 1024u, // 0x400
-    AUDIO_CHANNEL_IN_X_AXIS = 2048u, // 0x800
-    AUDIO_CHANNEL_IN_Y_AXIS = 4096u, // 0x1000
-    AUDIO_CHANNEL_IN_Z_AXIS = 8192u, // 0x2000
-    AUDIO_CHANNEL_IN_VOICE_UPLINK = 16384u, // 0x4000
-    AUDIO_CHANNEL_IN_VOICE_DNLINK = 32768u, // 0x8000
+    AUDIO_CHANNEL_IN_LEFT = 4u,
+    AUDIO_CHANNEL_IN_RIGHT = 8u,
+    AUDIO_CHANNEL_IN_FRONT = 16u,
+    AUDIO_CHANNEL_IN_BACK = 32u,
+    AUDIO_CHANNEL_IN_LEFT_PROCESSED = 64u,
+    AUDIO_CHANNEL_IN_RIGHT_PROCESSED = 128u,
+    AUDIO_CHANNEL_IN_FRONT_PROCESSED = 256u,
+    AUDIO_CHANNEL_IN_BACK_PROCESSED = 512u,
+    AUDIO_CHANNEL_IN_PRESSURE = 1024u,
+    AUDIO_CHANNEL_IN_X_AXIS = 2048u,
+    AUDIO_CHANNEL_IN_Y_AXIS = 4096u,
+    AUDIO_CHANNEL_IN_Z_AXIS = 8192u,
+    AUDIO_CHANNEL_IN_BACK_LEFT = 65536u,
+    AUDIO_CHANNEL_IN_BACK_RIGHT = 131072u,
+    AUDIO_CHANNEL_IN_CENTER = 262144u,
+    AUDIO_CHANNEL_IN_LOW_FREQUENCY = 1048576u,
+    AUDIO_CHANNEL_IN_TOP_LEFT = 2097152u,
+    AUDIO_CHANNEL_IN_TOP_RIGHT = 4194304u,
+    AUDIO_CHANNEL_IN_VOICE_UPLINK = 16384u,
+    AUDIO_CHANNEL_IN_VOICE_DNLINK = 32768u,
     AUDIO_CHANNEL_IN_MONO = 16u, // IN_FRONT
     AUDIO_CHANNEL_IN_STEREO = 12u, // (IN_LEFT | IN_RIGHT)
     AUDIO_CHANNEL_IN_FRONT_BACK = 48u, // (IN_FRONT | IN_BACK)
     AUDIO_CHANNEL_IN_6 = 252u, // (((((IN_LEFT | IN_RIGHT) | IN_FRONT) | IN_BACK) | IN_LEFT_PROCESSED) | IN_RIGHT_PROCESSED)
+    AUDIO_CHANNEL_IN_5POINT1 = 1507340u, // (((((IN_LEFT | IN_CENTER) | IN_RIGHT) | IN_BACK_LEFT) | IN_BACK_RIGHT) | IN_LOW_FREQUENCY)
     AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO = 16400u, // (IN_VOICE_UPLINK | IN_MONO)
     AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO = 32784u, // (IN_VOICE_DNLINK | IN_MONO)
     AUDIO_CHANNEL_IN_VOICE_CALL_MONO = 49168u, // (IN_VOICE_UPLINK_MONO | IN_VOICE_DNLINK_MONO)
-    AUDIO_CHANNEL_IN_ALL = 65532u, // (((((((((((((IN_LEFT | IN_RIGHT) | IN_FRONT) | IN_BACK) | IN_LEFT_PROCESSED) | IN_RIGHT_PROCESSED) | IN_FRONT_PROCESSED) | IN_BACK_PROCESSED) | IN_PRESSURE) | IN_X_AXIS) | IN_Y_AXIS) | IN_Z_AXIS) | IN_VOICE_UPLINK) | IN_VOICE_DNLINK)
-    AUDIO_CHANNEL_COUNT_MAX = 30u, // 30
+    AUDIO_CHANNEL_COUNT_MAX = 30u,
     AUDIO_CHANNEL_INDEX_HDR = 2147483648u, // (REPRESENTATION_INDEX << COUNT_MAX)
     AUDIO_CHANNEL_INDEX_MASK_1 = 2147483649u, // (INDEX_HDR | ((1 << 1) - 1))
     AUDIO_CHANNEL_INDEX_MASK_2 = 2147483651u, // (INDEX_HDR | ((1 << 2) - 1))
@@ -224,59 +254,52 @@ enum {
     AUDIO_CHANNEL_INDEX_MASK_8 = 2147483903u, // (INDEX_HDR | ((1 << 8) - 1))
 };
 
-enum {
-    AUDIO_INTERLEAVE_LEFT = 0,
-    AUDIO_INTERLEAVE_RIGHT = 1,
-};
-
 typedef enum {
+#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
     AUDIO_MODE_INVALID = -2, // (-2)
     AUDIO_MODE_CURRENT = -1, // (-1)
+#endif // AUDIO_NO_SYSTEM_DECLARATIONS
     AUDIO_MODE_NORMAL = 0,
     AUDIO_MODE_RINGTONE = 1,
     AUDIO_MODE_IN_CALL = 2,
     AUDIO_MODE_IN_COMMUNICATION = 3,
-    AUDIO_MODE_CNT = 4,
-    AUDIO_MODE_MAX = 3, // (CNT - 1)
 } audio_mode_t;
 
 enum {
-    AUDIO_DEVICE_NONE = 0u, // 0x0
-    AUDIO_DEVICE_BIT_IN = 2147483648u, // 0x80000000
-    AUDIO_DEVICE_BIT_DEFAULT = 1073741824u, // 0x40000000
-    AUDIO_DEVICE_OUT_EARPIECE = 1u, // 0x1
-    AUDIO_DEVICE_OUT_SPEAKER = 2u, // 0x2
-    AUDIO_DEVICE_OUT_WIRED_HEADSET = 4u, // 0x4
-    AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 8u, // 0x8
-    AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 16u, // 0x10
-    AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 32u, // 0x20
-    AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 64u, // 0x40
-    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 128u, // 0x80
-    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 256u, // 0x100
-    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 512u, // 0x200
-    AUDIO_DEVICE_OUT_AUX_DIGITAL = 1024u, // 0x400
+    AUDIO_DEVICE_NONE = 0u,
+    AUDIO_DEVICE_BIT_IN = 2147483648u,
+    AUDIO_DEVICE_BIT_DEFAULT = 1073741824u,
+    AUDIO_DEVICE_OUT_EARPIECE = 1u,
+    AUDIO_DEVICE_OUT_SPEAKER = 2u,
+    AUDIO_DEVICE_OUT_WIRED_HEADSET = 4u,
+    AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 8u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 16u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 32u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 64u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 128u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 256u,
+    AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 512u,
+    AUDIO_DEVICE_OUT_AUX_DIGITAL = 1024u,
     AUDIO_DEVICE_OUT_HDMI = 1024u, // OUT_AUX_DIGITAL
-    AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 2048u, // 0x800
-    AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 4096u, // 0x1000
-    AUDIO_DEVICE_OUT_USB_ACCESSORY = 8192u, // 0x2000
-    AUDIO_DEVICE_OUT_USB_DEVICE = 16384u, // 0x4000
-    AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 32768u, // 0x8000
-    AUDIO_DEVICE_OUT_TELEPHONY_TX = 65536u, // 0x10000
-    AUDIO_DEVICE_OUT_LINE = 131072u, // 0x20000
-    AUDIO_DEVICE_OUT_HDMI_ARC = 262144u, // 0x40000
-    AUDIO_DEVICE_OUT_SPDIF = 524288u, // 0x80000
-    AUDIO_DEVICE_OUT_FM = 1048576u, // 0x100000
-    AUDIO_DEVICE_OUT_AUX_LINE = 2097152u, // 0x200000
-    AUDIO_DEVICE_OUT_SPEAKER_SAFE = 4194304u, // 0x400000
-    AUDIO_DEVICE_OUT_IP = 8388608u, // 0x800000
-    AUDIO_DEVICE_OUT_BUS = 16777216u, // 0x1000000
-    AUDIO_DEVICE_OUT_PROXY = 33554432u, // 0x2000000
-    AUDIO_DEVICE_OUT_USB_HEADSET = 67108864u, // 0x4000000
+    AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET = 2048u,
+    AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET = 4096u,
+    AUDIO_DEVICE_OUT_USB_ACCESSORY = 8192u,
+    AUDIO_DEVICE_OUT_USB_DEVICE = 16384u,
+    AUDIO_DEVICE_OUT_REMOTE_SUBMIX = 32768u,
+    AUDIO_DEVICE_OUT_TELEPHONY_TX = 65536u,
+    AUDIO_DEVICE_OUT_LINE = 131072u,
+    AUDIO_DEVICE_OUT_HDMI_ARC = 262144u,
+    AUDIO_DEVICE_OUT_SPDIF = 524288u,
+    AUDIO_DEVICE_OUT_FM = 1048576u,
+    AUDIO_DEVICE_OUT_AUX_LINE = 2097152u,
+    AUDIO_DEVICE_OUT_SPEAKER_SAFE = 4194304u,
+    AUDIO_DEVICE_OUT_IP = 8388608u,
+    AUDIO_DEVICE_OUT_BUS = 16777216u,
+    AUDIO_DEVICE_OUT_PROXY = 33554432u,
+    AUDIO_DEVICE_OUT_USB_HEADSET = 67108864u,
+    AUDIO_DEVICE_OUT_HEARING_AID = 134217728u,
+    AUDIO_DEVICE_OUT_ECHO_CANCELLER = 268435456u,
     AUDIO_DEVICE_OUT_DEFAULT = 1073741824u, // BIT_DEFAULT
-    AUDIO_DEVICE_OUT_ALL = 1207959551u, // (((((((((((((((((((((((((((OUT_EARPIECE | OUT_SPEAKER) | OUT_WIRED_HEADSET) | OUT_WIRED_HEADPHONE) | OUT_BLUETOOTH_SCO) | OUT_BLUETOOTH_SCO_HEADSET) | OUT_BLUETOOTH_SCO_CARKIT) | OUT_BLUETOOTH_A2DP) | OUT_BLUETOOTH_A2DP_HEADPHONES) | OUT_BLUETOOTH_A2DP_SPEAKER) | OUT_HDMI) | OUT_ANLG_DOCK_HEADSET) | OUT_DGTL_DOCK_HEADSET) | OUT_USB_ACCESSORY) | OUT_USB_DEVICE) | OUT_REMOTE_SUBMIX) | OUT_TELEPHONY_TX) | OUT_LINE) | OUT_HDMI_ARC) | OUT_SPDIF) | OUT_FM) | OUT_AUX_LINE) | OUT_SPEAKER_SAFE) | OUT_IP) | OUT_BUS) | OUT_PROXY) | OUT_USB_HEADSET) | OUT_DEFAULT)
-    AUDIO_DEVICE_OUT_ALL_A2DP = 896u, // ((OUT_BLUETOOTH_A2DP | OUT_BLUETOOTH_A2DP_HEADPHONES) | OUT_BLUETOOTH_A2DP_SPEAKER)
-    AUDIO_DEVICE_OUT_ALL_SCO = 112u, // ((OUT_BLUETOOTH_SCO | OUT_BLUETOOTH_SCO_HEADSET) | OUT_BLUETOOTH_SCO_CARKIT)
-    AUDIO_DEVICE_OUT_ALL_USB = 67133440u, // ((OUT_USB_ACCESSORY | OUT_USB_DEVICE) | OUT_USB_HEADSET)
     AUDIO_DEVICE_IN_COMMUNICATION = 2147483649u, // (BIT_IN | 0x1)
     AUDIO_DEVICE_IN_AMBIENT = 2147483650u, // (BIT_IN | 0x2)
     AUDIO_DEVICE_IN_BUILTIN_MIC = 2147483652u, // (BIT_IN | 0x4)
@@ -302,38 +325,38 @@ enum {
     AUDIO_DEVICE_IN_BUS = 2148532224u, // (BIT_IN | 0x100000)
     AUDIO_DEVICE_IN_PROXY = 2164260864u, // (BIT_IN | 0x1000000)
     AUDIO_DEVICE_IN_USB_HEADSET = 2181038080u, // (BIT_IN | 0x2000000)
+    AUDIO_DEVICE_IN_BLUETOOTH_BLE = 2214592512u, // (BIT_IN | 0x4000000)
     AUDIO_DEVICE_IN_DEFAULT = 3221225472u, // (BIT_IN | BIT_DEFAULT)
-    AUDIO_DEVICE_IN_ALL = 3273654271u, // (((((((((((((((((((((((IN_COMMUNICATION | IN_AMBIENT) | IN_BUILTIN_MIC) | IN_BLUETOOTH_SCO_HEADSET) | IN_WIRED_HEADSET) | IN_HDMI) | IN_TELEPHONY_RX) | IN_BACK_MIC) | IN_REMOTE_SUBMIX) | IN_ANLG_DOCK_HEADSET) | IN_DGTL_DOCK_HEADSET) | IN_USB_ACCESSORY) | IN_USB_DEVICE) | IN_FM_TUNER) | IN_TV_TUNER) | IN_LINE) | IN_SPDIF) | IN_BLUETOOTH_A2DP) | IN_LOOPBACK) | IN_IP) | IN_BUS) | IN_PROXY) | IN_USB_HEADSET) | IN_DEFAULT)
-    AUDIO_DEVICE_IN_ALL_SCO = 2147483656u, // IN_BLUETOOTH_SCO_HEADSET
-    AUDIO_DEVICE_IN_ALL_USB = 2181044224u, // ((IN_USB_ACCESSORY | IN_USB_DEVICE) | IN_USB_HEADSET)
 };
 
 typedef enum {
-    AUDIO_OUTPUT_FLAG_NONE = 0, // 0x0
-    AUDIO_OUTPUT_FLAG_DIRECT = 1, // 0x1
-    AUDIO_OUTPUT_FLAG_PRIMARY = 2, // 0x2
-    AUDIO_OUTPUT_FLAG_FAST = 4, // 0x4
-    AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 8, // 0x8
-    AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 16, // 0x10
-    AUDIO_OUTPUT_FLAG_NON_BLOCKING = 32, // 0x20
-    AUDIO_OUTPUT_FLAG_HW_AV_SYNC = 64, // 0x40
-    AUDIO_OUTPUT_FLAG_TTS = 128, // 0x80
-    AUDIO_OUTPUT_FLAG_RAW = 256, // 0x100
-    AUDIO_OUTPUT_FLAG_SYNC = 512, // 0x200
-    AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO = 1024, // 0x400
-    AUDIO_OUTPUT_FLAG_DIRECT_PCM = 8192, // 0x2000
-    AUDIO_OUTPUT_FLAG_MMAP_NOIRQ = 16384, // 0x4000
-    AUDIO_OUTPUT_FLAG_VOIP_RX = 32768, // 0x8000
+    AUDIO_OUTPUT_FLAG_NONE = 0,
+    AUDIO_OUTPUT_FLAG_DIRECT = 1,
+    AUDIO_OUTPUT_FLAG_PRIMARY = 2,
+    AUDIO_OUTPUT_FLAG_FAST = 4,
+    AUDIO_OUTPUT_FLAG_DEEP_BUFFER = 8,
+    AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD = 16,
+    AUDIO_OUTPUT_FLAG_NON_BLOCKING = 32,
+    AUDIO_OUTPUT_FLAG_HW_AV_SYNC = 64,
+    AUDIO_OUTPUT_FLAG_TTS = 128,
+    AUDIO_OUTPUT_FLAG_RAW = 256,
+    AUDIO_OUTPUT_FLAG_SYNC = 512,
+    AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO = 1024,
+    AUDIO_OUTPUT_FLAG_DIRECT_PCM = 8192,
+    AUDIO_OUTPUT_FLAG_MMAP_NOIRQ = 16384,
+    AUDIO_OUTPUT_FLAG_VOIP_RX = 32768,
+    AUDIO_OUTPUT_FLAG_INCALL_MUSIC = 65536,
 } audio_output_flags_t;
 
 typedef enum {
-    AUDIO_INPUT_FLAG_NONE = 0, // 0x0
-    AUDIO_INPUT_FLAG_FAST = 1, // 0x1
-    AUDIO_INPUT_FLAG_HW_HOTWORD = 2, // 0x2
-    AUDIO_INPUT_FLAG_RAW = 4, // 0x4
-    AUDIO_INPUT_FLAG_SYNC = 8, // 0x8
-    AUDIO_INPUT_FLAG_MMAP_NOIRQ = 16, // 0x10
-    AUDIO_INPUT_FLAG_VOIP_TX = 32, // 0x20
+    AUDIO_INPUT_FLAG_NONE = 0,
+    AUDIO_INPUT_FLAG_FAST = 1,
+    AUDIO_INPUT_FLAG_HW_HOTWORD = 2,
+    AUDIO_INPUT_FLAG_RAW = 4,
+    AUDIO_INPUT_FLAG_SYNC = 8,
+    AUDIO_INPUT_FLAG_MMAP_NOIRQ = 16,
+    AUDIO_INPUT_FLAG_VOIP_TX = 32,
+    AUDIO_INPUT_FLAG_HW_AV_SYNC = 64,
 } audio_input_flags_t;
 
 typedef enum {
@@ -344,54 +367,61 @@ typedef enum {
     AUDIO_USAGE_ALARM = 4,
     AUDIO_USAGE_NOTIFICATION = 5,
     AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE = 6,
+#ifndef AUDIO_NO_SYSTEM_DECLARATIONS
     AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST = 7,
     AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT = 8,
     AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED = 9,
     AUDIO_USAGE_NOTIFICATION_EVENT = 10,
+#endif // AUDIO_NO_SYSTEM_DECLARATIONS
     AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY = 11,
     AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE = 12,
     AUDIO_USAGE_ASSISTANCE_SONIFICATION = 13,
     AUDIO_USAGE_GAME = 14,
     AUDIO_USAGE_VIRTUAL_SOURCE = 15,
     AUDIO_USAGE_ASSISTANT = 16,
-    AUDIO_USAGE_CNT = 17,
-    AUDIO_USAGE_MAX = 16, // (CNT - 1)
 } audio_usage_t;
 
+typedef enum {
+    AUDIO_CONTENT_TYPE_UNKNOWN = 0u,
+    AUDIO_CONTENT_TYPE_SPEECH = 1u,
+    AUDIO_CONTENT_TYPE_MUSIC = 2u,
+    AUDIO_CONTENT_TYPE_MOVIE = 3u,
+    AUDIO_CONTENT_TYPE_SONIFICATION = 4u,
+} audio_content_type_t;
+
 enum {
-    AUDIO_GAIN_MODE_JOINT = 1u, // 0x1
-    AUDIO_GAIN_MODE_CHANNELS = 2u, // 0x2
-    AUDIO_GAIN_MODE_RAMP = 4u, // 0x4
+    AUDIO_GAIN_MODE_JOINT = 1u,
+    AUDIO_GAIN_MODE_CHANNELS = 2u,
+    AUDIO_GAIN_MODE_RAMP = 4u,
 };
 
 typedef enum {
     AUDIO_PORT_ROLE_NONE = 0,
-    AUDIO_PORT_ROLE_SOURCE = 1,
-    AUDIO_PORT_ROLE_SINK = 2,
+    AUDIO_PORT_ROLE_SOURCE = 1, // (::android::hardware::audio::common::V4_0::AudioPortRole.NONE implicitly + 1)
+    AUDIO_PORT_ROLE_SINK = 2, // (::android::hardware::audio::common::V4_0::AudioPortRole.SOURCE implicitly + 1)
 } audio_port_role_t;
 
 typedef enum {
     AUDIO_PORT_TYPE_NONE = 0,
-    AUDIO_PORT_TYPE_DEVICE = 1,
-    AUDIO_PORT_TYPE_MIX = 2,
-    AUDIO_PORT_TYPE_SESSION = 3,
+    AUDIO_PORT_TYPE_DEVICE = 1, // (::android::hardware::audio::common::V4_0::AudioPortType.NONE implicitly + 1)
+    AUDIO_PORT_TYPE_MIX = 2, // (::android::hardware::audio::common::V4_0::AudioPortType.DEVICE implicitly + 1)
+    AUDIO_PORT_TYPE_SESSION = 3, // (::android::hardware::audio::common::V4_0::AudioPortType.MIX implicitly + 1)
 } audio_port_type_t;
 
 enum {
-    AUDIO_PORT_CONFIG_SAMPLE_RATE = 1u, // 0x1
-    AUDIO_PORT_CONFIG_CHANNEL_MASK = 2u, // 0x2
-    AUDIO_PORT_CONFIG_FORMAT = 4u, // 0x4
-    AUDIO_PORT_CONFIG_GAIN = 8u, // 0x8
-    AUDIO_PORT_CONFIG_ALL = 15u, // (((SAMPLE_RATE | CHANNEL_MASK) | FORMAT) | GAIN)
+    AUDIO_PORT_CONFIG_SAMPLE_RATE = 1u,
+    AUDIO_PORT_CONFIG_CHANNEL_MASK = 2u,
+    AUDIO_PORT_CONFIG_FORMAT = 4u,
+    AUDIO_PORT_CONFIG_GAIN = 8u,
 };
 
 typedef enum {
     AUDIO_LATENCY_LOW = 0,
-    AUDIO_LATENCY_NORMAL = 1,
+    AUDIO_LATENCY_NORMAL = 1, // (::android::hardware::audio::common::V4_0::AudioMixLatencyClass.LOW implicitly + 1)
 } audio_mix_latency_class_t;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V2_0_EXPORTED_CONSTANTS_H_
+#endif  // HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_COMMON_V4_0_EXPORTED_CONSTANTS_H_
index 5b8b811..67d35ef 100644 (file)
@@ -27,6 +27,7 @@
 #include <cutils/bitops.h>
 
 #include "audio-base.h"
+#include "audio-base-utils.h"
 
 __BEGIN_DECLS
 
@@ -43,20 +44,6 @@ __BEGIN_DECLS
 /* AudioFlinger and AudioPolicy services use I/O handles to identify audio sources and sinks */
 typedef int audio_io_handle_t;
 
-/* Do not change these values without updating their counterparts
- * in frameworks/base/media/java/android/media/AudioAttributes.java
- */
-typedef enum {
-    AUDIO_CONTENT_TYPE_UNKNOWN      = 0,
-    AUDIO_CONTENT_TYPE_SPEECH       = 1,
-    AUDIO_CONTENT_TYPE_MUSIC        = 2,
-    AUDIO_CONTENT_TYPE_MOVIE        = 3,
-    AUDIO_CONTENT_TYPE_SONIFICATION = 4,
-
-    AUDIO_CONTENT_TYPE_CNT,
-    AUDIO_CONTENT_TYPE_MAX          = AUDIO_CONTENT_TYPE_CNT - 1,
-} audio_content_type_t;
-
 typedef uint32_t audio_flags_mask_t;
 
 /* Do not change these values without updating their counterparts
@@ -198,6 +185,21 @@ static inline audio_channel_mask_t audio_channel_mask_from_representation_and_bi
     return (audio_channel_mask_t) ((representation << AUDIO_CHANNEL_COUNT_MAX) | bits);
 }
 
+/**
+ * Expresses the convention when stereo audio samples are stored interleaved
+ * in an array.  This should improve readability by allowing code to use
+ * symbolic indices instead of hard-coded [0] and [1].
+ *
+ * For multi-channel beyond stereo, the platform convention is that channels
+ * are interleaved in order from least significant channel mask bit to most
+ * significant channel mask bit, with unused bits skipped.  Any exceptions
+ * to this convention will be noted at the appropriate API.
+ */
+enum {
+    AUDIO_INTERLEAVE_LEFT = 0,
+    AUDIO_INTERLEAVE_RIGHT = 1,
+};
+
 /* This enum is deprecated */
 typedef enum {
     AUDIO_IN_ACOUSTICS_NONE          = 0,
@@ -531,6 +533,10 @@ struct audio_mmap_position {
                                     is called */
 };
 
+/******************************
+ *  Helper functions
+ *****************************/
+
 static inline bool audio_is_output_device(audio_devices_t device)
 {
     if (((device & AUDIO_DEVICE_BIT_IN) == 0) &&
@@ -1159,4 +1165,5 @@ __END_DECLS
 // declared in types.hal for audio HAL V4.0 and auto imported to audio-base.h
 #define AUDIO_OUTPUT_FLAG_INCALL_MUSIC 0x10000
 
+
 #endif  // ANDROID_AUDIO_CORE_H
index 572b788..7a6a593 100644 (file)
@@ -1,9 +1,9 @@
 // This file is autogenerated by hidl-gen. Do not edit manually.
-// Source: android.hardware.audio.effect@2.0
+// Source: android.hardware.audio.effect@4.0
 // Root: android.hardware:hardware/interfaces
 
-#ifndef HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V2_0_EXPORTED_CONSTANTS_H_
-#define HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V2_0_EXPORTED_CONSTANTS_H_
+#ifndef HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V4_0_EXPORTED_CONSTANTS_H_
+#define HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V4_0_EXPORTED_CONSTANTS_H_
 
 #ifdef __cplusplus
 extern "C" {
@@ -75,26 +75,25 @@ enum {
 
 typedef enum {
     EFFECT_BUFFER_ACCESS_WRITE = 0,
-    EFFECT_BUFFER_ACCESS_READ = 1,
-    EFFECT_BUFFER_ACCESS_ACCUMULATE = 2,
+    EFFECT_BUFFER_ACCESS_READ = 1, // (::android::hardware::audio::effect::V4_0::EffectBufferAccess.ACCESS_WRITE implicitly + 1)
+    EFFECT_BUFFER_ACCESS_ACCUMULATE = 2, // (::android::hardware::audio::effect::V4_0::EffectBufferAccess.ACCESS_READ implicitly + 1)
 } effect_buffer_access_e;
 
 enum {
-    EFFECT_CONFIG_BUFFER = 1, // 0x0001
-    EFFECT_CONFIG_SMP_RATE = 2, // 0x0002
-    EFFECT_CONFIG_CHANNELS = 4, // 0x0004
-    EFFECT_CONFIG_FORMAT = 8, // 0x0008
-    EFFECT_CONFIG_ACC_MODE = 16, // 0x0010
-    EFFECT_CONFIG_ALL = 31, // ((((BUFFER | SMP_RATE) | CHANNELS) | FORMAT) | ACC_MODE)
+    EFFECT_CONFIG_BUFFER = 1,
+    EFFECT_CONFIG_SMP_RATE = 2,
+    EFFECT_CONFIG_CHANNELS = 4,
+    EFFECT_CONFIG_FORMAT = 8,
+    EFFECT_CONFIG_ACC_MODE = 16,
 };
 
 typedef enum {
     EFFECT_FEATURE_AUX_CHANNELS = 0,
-    EFFECT_FEATURE_CNT = 1,
+    EFFECT_FEATURE_CNT = 1, // (::android::hardware::audio::effect::V4_0::EffectFeature.AUX_CHANNELS implicitly + 1)
 } effect_feature_e;
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif  // HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V2_0_EXPORTED_CONSTANTS_H_
+#endif  // HIDL_GENERATED_ANDROID_HARDWARE_AUDIO_EFFECT_V4_0_EXPORTED_CONSTANTS_H_
index a559c7c..4cdc773 100644 (file)
@@ -60,6 +60,12 @@ typedef struct effect_descriptor_s {
     char    implementor[EFFECT_STRING_LEN_MAX];    // human readable effect implementor name
 } effect_descriptor_t;
 
+#define EFFECT_CONFIG_ALL (EFFECT_CONFIG_BUFFER | \
+                           EFFECT_CONFIG_SMP_RATE | \
+                           EFFECT_CONFIG_CHANNELS | \
+                           EFFECT_CONFIG_FORMAT | \
+                           EFFECT_CONFIG_ACC_MODE)
+
 /////////////////////////////////////////////////
 //      Effect control interface
 /////////////////////////////////////////////////