summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2021-06-10 08:32:19 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2021-06-10 08:32:19 +0000
commit8544b7668c2332507f1d1162d547cd45aaa3604c (patch)
tree2f9c24c244412eb3bff81d9db3ff33634b6219a3
parentc18a6f26cc63e10cfb5c2f3dd56f36ac2d738144 (diff)
parent5175fb5860e05c6199df0946ad25fb7cc17d6386 (diff)
downloadlibhardware-8544b7668c2332507f1d1162d547cd45aaa3604c.tar.gz
Snap for 7445263 from 5175fb5860e05c6199df0946ad25fb7cc17d6386 to sc-d2-release
Change-Id: Iadabc53db2c7b652b5fcbd833f8a55635117e7fd
-rw-r--r--modules/usbaudio/audio_hal.c86
1 files changed, 57 insertions, 29 deletions
diff --git a/modules/usbaudio/audio_hal.c b/modules/usbaudio/audio_hal.c
index c847ae0f..cc9e4f7c 100644
--- a/modules/usbaudio/audio_hal.c
+++ b/modules/usbaudio/audio_hal.c
@@ -158,17 +158,26 @@ struct stream_in {
};
// Map channel count to output channel mask
-static const audio_channel_mask_t OUT_CHANNEL_MASKS_MAP[] = {
- AUDIO_CHANNEL_NONE, /* 0 */
- AUDIO_CHANNEL_OUT_MONO, /* 1 */
- AUDIO_CHANNEL_OUT_STEREO, /* 2 */
- AUDIO_CHANNEL_OUT_2POINT1, /* 3 */
- AUDIO_CHANNEL_OUT_QUAD, /* 4 */
- AUDIO_CHANNEL_OUT_PENTA, /* 5 */
- AUDIO_CHANNEL_OUT_5POINT1, /* 6 */
- AUDIO_CHANNEL_OUT_6POINT1, /* 7 */
- AUDIO_CHANNEL_OUT_7POINT1 /* 8 */
- /* channel counts greater than this are not considered */
+static const audio_channel_mask_t OUT_CHANNEL_MASKS_MAP[FCC_24 + 1] = {
+ [0] = AUDIO_CHANNEL_NONE, // == 0 (so this line is optional and could be omitted)
+ // != AUDIO_CHANNEL_INVALID == 0xC0000000u
+
+ [1] = AUDIO_CHANNEL_OUT_MONO,
+ [2] = AUDIO_CHANNEL_OUT_STEREO,
+ [3] = AUDIO_CHANNEL_OUT_2POINT1,
+ [4] = AUDIO_CHANNEL_OUT_QUAD,
+ [5] = AUDIO_CHANNEL_OUT_PENTA,
+ [6] = AUDIO_CHANNEL_OUT_5POINT1,
+ [7] = AUDIO_CHANNEL_OUT_6POINT1,
+ [8] = AUDIO_CHANNEL_OUT_7POINT1,
+
+ [9 ... 11] = AUDIO_CHANNEL_NONE, // == 0 (so this line is optional and could be omitted).
+
+ [12] = AUDIO_CHANNEL_OUT_7POINT1POINT4,
+
+ [13 ... 23] = AUDIO_CHANNEL_NONE, // == 0 (so this line is optional and could be omitted).
+
+ [24] = AUDIO_CHANNEL_OUT_22POINT2,
};
static const int OUT_CHANNEL_MASKS_SIZE = AUDIO_ARRAY_SIZE(OUT_CHANNEL_MASKS_MAP);
@@ -182,22 +191,38 @@ static const audio_channel_mask_t IN_CHANNEL_MASKS_MAP[] = {
static const int IN_CHANNEL_MASKS_SIZE = AUDIO_ARRAY_SIZE(IN_CHANNEL_MASKS_MAP);
// Map channel count to index mask
-static const audio_channel_mask_t CHANNEL_INDEX_MASKS_MAP[] = {
- AUDIO_CHANNEL_NONE, /* 0 */
- AUDIO_CHANNEL_INDEX_MASK_1, /* 1 */
- AUDIO_CHANNEL_INDEX_MASK_2, /* 2 */
- AUDIO_CHANNEL_INDEX_MASK_3, /* 3 */
- AUDIO_CHANNEL_INDEX_MASK_4, /* 4 */
- AUDIO_CHANNEL_INDEX_MASK_5, /* 5 */
- AUDIO_CHANNEL_INDEX_MASK_6, /* 6 */
- AUDIO_CHANNEL_INDEX_MASK_7, /* 7 */
- AUDIO_CHANNEL_INDEX_MASK_8 /* 8 */
- /* channel counts greater than this are not considered */
+static const audio_channel_mask_t CHANNEL_INDEX_MASKS_MAP[FCC_24 + 1] = {
+ [0] = AUDIO_CHANNEL_NONE, // == 0 (so this line is optional and could be omitted).
+
+ [1] = AUDIO_CHANNEL_INDEX_MASK_1,
+ [2] = AUDIO_CHANNEL_INDEX_MASK_2,
+ [3] = AUDIO_CHANNEL_INDEX_MASK_3,
+ [4] = AUDIO_CHANNEL_INDEX_MASK_4,
+ [5] = AUDIO_CHANNEL_INDEX_MASK_5,
+ [6] = AUDIO_CHANNEL_INDEX_MASK_6,
+ [7] = AUDIO_CHANNEL_INDEX_MASK_7,
+ [8] = AUDIO_CHANNEL_INDEX_MASK_8,
+
+ [9] = AUDIO_CHANNEL_INDEX_MASK_9,
+ [10] = AUDIO_CHANNEL_INDEX_MASK_10,
+ [11] = AUDIO_CHANNEL_INDEX_MASK_11,
+ [12] = AUDIO_CHANNEL_INDEX_MASK_12,
+ [13] = AUDIO_CHANNEL_INDEX_MASK_13,
+ [14] = AUDIO_CHANNEL_INDEX_MASK_14,
+ [15] = AUDIO_CHANNEL_INDEX_MASK_15,
+ [16] = AUDIO_CHANNEL_INDEX_MASK_16,
+
+ [17] = AUDIO_CHANNEL_INDEX_MASK_17,
+ [18] = AUDIO_CHANNEL_INDEX_MASK_18,
+ [19] = AUDIO_CHANNEL_INDEX_MASK_19,
+ [20] = AUDIO_CHANNEL_INDEX_MASK_20,
+ [21] = AUDIO_CHANNEL_INDEX_MASK_21,
+ [22] = AUDIO_CHANNEL_INDEX_MASK_22,
+ [23] = AUDIO_CHANNEL_INDEX_MASK_23,
+ [24] = AUDIO_CHANNEL_INDEX_MASK_24,
};
static const int CHANNEL_INDEX_MASKS_SIZE = AUDIO_ARRAY_SIZE(CHANNEL_INDEX_MASKS_MAP);
-
-
/*
* Locking Helpers
*/
@@ -401,7 +426,10 @@ static unsigned int populate_channel_mask_from_profile(const alsa_device_profile
unsigned int num_channel_masks = 0;
const audio_channel_mask_t* channel_masks_map =
is_output ? OUT_CHANNEL_MASKS_MAP : IN_CHANNEL_MASKS_MAP;
- const int channel_masks_size = is_output ? OUT_CHANNEL_MASKS_SIZE : IN_CHANNEL_MASKS_SIZE;
+ int channel_masks_size = is_output ? OUT_CHANNEL_MASKS_SIZE : IN_CHANNEL_MASKS_SIZE;
+ if (channel_masks_size > FCC_LIMIT + 1) {
+ channel_masks_size = FCC_LIMIT + 1;
+ }
unsigned int channel_count = 0;
for (size_t i = 0; i < min(channel_masks_size, AUDIO_PORT_MAX_CHANNEL_MASKS) &&
(channel_count = profile->channel_counts[i]) != 0 &&
@@ -874,8 +902,8 @@ static int adev_open_output_stream(struct audio_hw_device *hw_dev,
}
/* The Framework is currently limited to no more than this number of channels */
- if (out->hal_channel_count > FCC_8) {
- out->hal_channel_count = FCC_8;
+ if (out->hal_channel_count > FCC_LIMIT) {
+ out->hal_channel_count = FCC_LIMIT;
calc_mask = true;
}
@@ -1355,8 +1383,8 @@ static int adev_open_input_stream(struct audio_hw_device *hw_dev,
}
/* The Framework is currently limited to no more than this number of channels */
- if (in->hal_channel_count > FCC_8) {
- in->hal_channel_count = FCC_8;
+ if (in->hal_channel_count > FCC_LIMIT) {
+ in->hal_channel_count = FCC_LIMIT;
calc_mask = true;
}