blob: 79696610ab5f1a7654416023f35333e2e34b08c8 [file] [log] [blame]
Jean-Michel Trivi56ec4ff2015-01-23 16:45:18 -08001/*
2 * Copyright (C) 2015 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17namespace android {
18
19// ----------------------------------------------------------------------------
20// Definitions for audio_policy.conf file parsing
21// ----------------------------------------------------------------------------
22
23struct StringToEnum {
24 const char *name;
25 uint32_t value;
26};
27
28#define STRING_TO_ENUM(string) { #string, string }
29#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
30
31const StringToEnum sDeviceNameToEnumTable[] = {
32 STRING_TO_ENUM(AUDIO_DEVICE_OUT_EARPIECE),
33 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER),
34 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPEAKER_SAFE),
35 STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADSET),
36 STRING_TO_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
37 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
38 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
39 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
40 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_SCO),
41 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
42 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
43 STRING_TO_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
44 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_A2DP),
45 STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_DIGITAL),
46 STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI),
47 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
48 STRING_TO_ENUM(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
49 STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_ACCESSORY),
50 STRING_TO_ENUM(AUDIO_DEVICE_OUT_USB_DEVICE),
51 STRING_TO_ENUM(AUDIO_DEVICE_OUT_ALL_USB),
52 STRING_TO_ENUM(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
53 STRING_TO_ENUM(AUDIO_DEVICE_OUT_TELEPHONY_TX),
54 STRING_TO_ENUM(AUDIO_DEVICE_OUT_LINE),
55 STRING_TO_ENUM(AUDIO_DEVICE_OUT_HDMI_ARC),
56 STRING_TO_ENUM(AUDIO_DEVICE_OUT_SPDIF),
57 STRING_TO_ENUM(AUDIO_DEVICE_OUT_FM),
58 STRING_TO_ENUM(AUDIO_DEVICE_OUT_AUX_LINE),
59 STRING_TO_ENUM(AUDIO_DEVICE_IN_AMBIENT),
60 STRING_TO_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC),
61 STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
62 STRING_TO_ENUM(AUDIO_DEVICE_IN_ALL_SCO),
63 STRING_TO_ENUM(AUDIO_DEVICE_IN_WIRED_HEADSET),
64 STRING_TO_ENUM(AUDIO_DEVICE_IN_AUX_DIGITAL),
65 STRING_TO_ENUM(AUDIO_DEVICE_IN_HDMI),
66 STRING_TO_ENUM(AUDIO_DEVICE_IN_TELEPHONY_RX),
67 STRING_TO_ENUM(AUDIO_DEVICE_IN_VOICE_CALL),
68 STRING_TO_ENUM(AUDIO_DEVICE_IN_BACK_MIC),
69 STRING_TO_ENUM(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
70 STRING_TO_ENUM(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
71 STRING_TO_ENUM(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
72 STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_ACCESSORY),
73 STRING_TO_ENUM(AUDIO_DEVICE_IN_USB_DEVICE),
74 STRING_TO_ENUM(AUDIO_DEVICE_IN_FM_TUNER),
75 STRING_TO_ENUM(AUDIO_DEVICE_IN_TV_TUNER),
76 STRING_TO_ENUM(AUDIO_DEVICE_IN_LINE),
77 STRING_TO_ENUM(AUDIO_DEVICE_IN_SPDIF),
78 STRING_TO_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),
79 STRING_TO_ENUM(AUDIO_DEVICE_IN_LOOPBACK),
80};
81
82const StringToEnum sOutputFlagNameToEnumTable[] = {
83 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT),
84 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY),
85 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST),
86 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
87 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
88 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
89 STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),
90};
91
92const StringToEnum sInputFlagNameToEnumTable[] = {
93 STRING_TO_ENUM(AUDIO_INPUT_FLAG_FAST),
94 STRING_TO_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD),
95};
96
97const StringToEnum sFormatNameToEnumTable[] = {
98 STRING_TO_ENUM(AUDIO_FORMAT_PCM_16_BIT),
99 STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_BIT),
100 STRING_TO_ENUM(AUDIO_FORMAT_PCM_32_BIT),
101 STRING_TO_ENUM(AUDIO_FORMAT_PCM_8_24_BIT),
102 STRING_TO_ENUM(AUDIO_FORMAT_PCM_FLOAT),
103 STRING_TO_ENUM(AUDIO_FORMAT_PCM_24_BIT_PACKED),
104 STRING_TO_ENUM(AUDIO_FORMAT_MP3),
105 STRING_TO_ENUM(AUDIO_FORMAT_AAC),
106 STRING_TO_ENUM(AUDIO_FORMAT_AAC_MAIN),
107 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LC),
108 STRING_TO_ENUM(AUDIO_FORMAT_AAC_SSR),
109 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LTP),
110 STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V1),
111 STRING_TO_ENUM(AUDIO_FORMAT_AAC_SCALABLE),
112 STRING_TO_ENUM(AUDIO_FORMAT_AAC_ERLC),
113 STRING_TO_ENUM(AUDIO_FORMAT_AAC_LD),
114 STRING_TO_ENUM(AUDIO_FORMAT_AAC_HE_V2),
115 STRING_TO_ENUM(AUDIO_FORMAT_AAC_ELD),
116 STRING_TO_ENUM(AUDIO_FORMAT_VORBIS),
117 STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V1),
118 STRING_TO_ENUM(AUDIO_FORMAT_HE_AAC_V2),
119 STRING_TO_ENUM(AUDIO_FORMAT_OPUS),
120 STRING_TO_ENUM(AUDIO_FORMAT_AC3),
121 STRING_TO_ENUM(AUDIO_FORMAT_E_AC3),
122};
123
124const StringToEnum sOutChannelsNameToEnumTable[] = {
125 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_MONO),
126 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_STEREO),
127 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_QUAD),
128 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_5POINT1),
129 STRING_TO_ENUM(AUDIO_CHANNEL_OUT_7POINT1),
130};
131
132const StringToEnum sInChannelsNameToEnumTable[] = {
133 STRING_TO_ENUM(AUDIO_CHANNEL_IN_MONO),
134 STRING_TO_ENUM(AUDIO_CHANNEL_IN_STEREO),
135 STRING_TO_ENUM(AUDIO_CHANNEL_IN_FRONT_BACK),
136};
137
138const StringToEnum sGainModeNameToEnumTable[] = {
139 STRING_TO_ENUM(AUDIO_GAIN_MODE_JOINT),
140 STRING_TO_ENUM(AUDIO_GAIN_MODE_CHANNELS),
141 STRING_TO_ENUM(AUDIO_GAIN_MODE_RAMP),
142};
143
144class ConfigParsingUtils
145{
146public:
147 static uint32_t stringToEnum(const struct StringToEnum *table,
148 size_t size,
149 const char *name);
150 static const char *enumToString(const struct StringToEnum *table,
151 size_t size,
152 uint32_t value);
153 static bool stringToBool(const char *value);
154 static uint32_t parseOutputFlagNames(char *name);
155 static uint32_t parseInputFlagNames(char *name);
156 static audio_devices_t parseDeviceNames(char *name);
157};
158
159}; // namespace android