1913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov/*
2913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * Copyright (C) 2016 The Android Open Source Project
3913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov *
4913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * Licensed under the Apache License, Version 2.0 (the "License");
5913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * you may not use this file except in compliance with the License.
6913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * You may obtain a copy of the License at
7913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov *
8913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov *      http://www.apache.org/licenses/LICENSE-2.0
9913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov *
10913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * Unless required by applicable law or agreed to in writing, software
11913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * distributed under the License is distributed on an "AS IS" BASIS,
12913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * See the License for the specific language governing permissions and
14913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov * limitations under the License.
15913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov */
16913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
17913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov#include <media/TypeConverter.h>
18913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
19913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovnamespace android {
20913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
21913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov#define MAKE_STRING_FROM_ENUM(string) { #string, string }
22913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov#define TERMINATOR { .literal = nullptr }
23913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
24913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
25913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst OutputDeviceConverter::Table OutputDeviceConverter::mTable[] = {
26913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_NONE),
27913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_EARPIECE),
28913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPEAKER),
29913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPEAKER_SAFE),
30913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADSET),
31913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
32913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
33913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
34913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
35913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_SCO),
36913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
37913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
38913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
39913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_A2DP),
40913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_AUX_DIGITAL),
41913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_HDMI),
42913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
43913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
44913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_USB_ACCESSORY),
45913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_USB_DEVICE),
46913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_USB),
47913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
48913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_TELEPHONY_TX),
49913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_LINE),
50913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_HDMI_ARC),
51913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPDIF),
52913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_FM),
53913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_AUX_LINE),
54913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_IP),
55913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BUS),
56c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_PROXY),
574928924a74d38bad1f40d92ab6fc68f831211e76Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_USB_HEADSET),
58913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_DEFAULT),
590aa15c6e4d02d3aa96d5ddfc6c862fe4da1da594Mikhail Naganov    // STUB must be after DEFAULT, so the latter is picked up by toString first.
600aa15c6e4d02d3aa96d5ddfc6c862fe4da1da594Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_STUB),
61913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
62913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
63913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
64913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
65913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst InputDeviceConverter::Table InputDeviceConverter::mTable[] = {
66913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_NONE),
67913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_COMMUNICATION),
68913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_AMBIENT),
69913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC),
70913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
71913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_ALL_SCO),
72913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_WIRED_HEADSET),
73913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_AUX_DIGITAL),
74913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_HDMI),
75913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_TELEPHONY_RX),
76913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_VOICE_CALL),
77913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BACK_MIC),
78913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
79913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
80913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
81913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_USB_ACCESSORY),
82913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_USB_DEVICE),
83913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_ALL_USB),
84913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_FM_TUNER),
85913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_TV_TUNER),
86913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_LINE),
87913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_SPDIF),
88913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),
89913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_LOOPBACK),
90913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_IP),
91913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BUS),
92c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_PROXY),
934928924a74d38bad1f40d92ab6fc68f831211e76Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_USB_HEADSET),
94913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_DEFAULT),
950aa15c6e4d02d3aa96d5ddfc6c862fe4da1da594Mikhail Naganov    // STUB must be after DEFAULT, so the latter is picked up by toString first.
960aa15c6e4d02d3aa96d5ddfc6c862fe4da1da594Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_STUB),
97913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
98913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
99913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
100913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
101913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
102913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst OutputFlagConverter::Table OutputFlagConverter::mTable[] = {
103913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_NONE),
104913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_DIRECT),
105913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY),
106913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_FAST),
107913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
108913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
109913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
110913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),
111913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_TTS),
112913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_RAW),
113913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_SYNC),
114913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO),
115c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_DIRECT_PCM),
1166acd1d432f526ae9a055ddaece28bf93b474a776Eric Laurent    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_MMAP_NOIRQ),
1174928924a74d38bad1f40d92ab6fc68f831211e76Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_VOIP_RX),
118913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
119913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
120913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
121913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
122913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
123913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst InputFlagConverter::Table InputFlagConverter::mTable[] = {
124913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_NONE),
125913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_FAST),
126913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD),
127913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_RAW),
128913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_SYNC),
1296acd1d432f526ae9a055ddaece28bf93b474a776Eric Laurent    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_MMAP_NOIRQ),
1304928924a74d38bad1f40d92ab6fc68f831211e76Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_VOIP_TX),
131913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
132913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
133913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
134913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
135913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
136913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst FormatConverter::Table FormatConverter::mTable[] = {
137913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_16_BIT),
138913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_8_BIT),
139913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_32_BIT),
140913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_8_24_BIT),
141913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_FLOAT),
142913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_24_BIT_PACKED),
143913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_MP3),
144913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AMR_NB),
145913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AMR_WB),
146913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC),
147913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_MAIN),
148913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LC),
149913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_SSR),
150913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LTP),
151913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_HE_V1),
152913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_SCALABLE),
153913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ERLC),
154913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LD),
155913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_HE_V2),
156913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ELD),
157c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_MAIN),
158c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_LC),
159c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_SSR),
160c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_LTP),
161c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_HE_V1),
162c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_SCALABLE),
163c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_ERLC),
164c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_LD),
165c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_HE_V2),
166c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS_ELD),
167913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_VORBIS),
168913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_HE_AAC_V1),
169913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_HE_AAC_V2),
170913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_OPUS),
171913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AC3),
172913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_E_AC3),
173913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DTS),
174913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DTS_HD),
175913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_IEC61937),
176913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DOLBY_TRUEHD),
177c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_EVRC),
178c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_EVRCB),
179c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_EVRCWB),
180c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_EVRCNW),
181c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADIF),
182c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_WMA),
183c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_WMA_PRO),
184c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AMR_WB_PLUS),
185c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_MP2),
186c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_QCELP),
187c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DSD),
188c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_FLAC),
189c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_ALAC),
190c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_APE),
191c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ADTS),
192c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_SBC),
193c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_APTX),
194c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_APTX_HD),
19596cf0a59adc029b877154ee56906edb8855fd0c8Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AC4),
196c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_LDAC),
197913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
198913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
199913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
200913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
201913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
202913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst OutputChannelConverter::Table OutputChannelConverter::mTable[] = {
203913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_MONO),
204913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_STEREO),
205c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_2POINT1),
206913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_QUAD),
207c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_SURROUND),
208c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_PENTA),
209913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_5POINT1),
210c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_6POINT1),
211913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_7POINT1),
212913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
213913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
214913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
215913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
216913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
217913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst InputChannelConverter::Table InputChannelConverter::mTable[] = {
218913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_MONO),
219913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_STEREO),
220913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_FRONT_BACK),
22196cf0a59adc029b877154ee56906edb8855fd0c8Mikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_6),
222c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO),
223c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO),
224c89c8910d901704e03c30b1fdbeb38fd82d4bbdcMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_VOICE_CALL_MONO),
225913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
226913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
227913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
228913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
229913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst ChannelIndexConverter::Table ChannelIndexConverter::mTable[] = {
230913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_1", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_1)},
231913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_2", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_2)},
232913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_3", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_3)},
233913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_4", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_4)},
234913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_5", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_5)},
235913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_6", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_6)},
236913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_7", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_7)},
237913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    {"AUDIO_CHANNEL_INDEX_MASK_8", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_8)},
238913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
239913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
240913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
241913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
242913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
243913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst GainModeConverter::Table GainModeConverter::mTable[] = {
244913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_JOINT),
245913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_CHANNELS),
246913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_RAMP),
247913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
248913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
249913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
250913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
251913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate <>
252913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst StreamTypeConverter::Table StreamTypeConverter::mTable[] = {
253913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_VOICE_CALL),
254913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_SYSTEM),
255913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_RING),
256913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_MUSIC),
257913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ALARM),
258913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_NOTIFICATION),
259913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_BLUETOOTH_SCO ),
260913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ENFORCED_AUDIBLE),
261913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_DTMF),
262913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_TTS),
263913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_ACCESSIBILITY),
264913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_REROUTING),
265913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_STREAM_PATCH),
266913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
267913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
268913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
269913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate<>
270913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovconst AudioModeConverter::Table AudioModeConverter::mTable[] = {
271913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_INVALID),
272913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_CURRENT),
273913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_NORMAL),
274913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_RINGTONE),
275913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_IN_CALL),
276913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_MODE_IN_COMMUNICATION),
277913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    TERMINATOR
278913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov};
279913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
28044344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovtemplate <>
28144344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovconst UsageTypeConverter::Table UsageTypeConverter::mTable[] = {
28244344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_UNKNOWN),
28344344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_MEDIA),
28444344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_VOICE_COMMUNICATION),
28544344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING),
28644344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_ALARM),
28744344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION),
28844344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE),
28944344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST),
29044344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT),
29144344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED),
29244344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_NOTIFICATION_EVENT),
29344344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY),
29444344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE),
29544344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_ASSISTANCE_SONIFICATION),
29644344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_GAME),
29744344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_VIRTUAL_SOURCE),
29844344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_CNT),
29944344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_USAGE_MAX),
30044344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    TERMINATOR
30144344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov};
30244344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov
30344344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovtemplate <>
30444344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovconst SourceTypeConverter::Table SourceTypeConverter::mTable[] = {
30544344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_DEFAULT),
30644344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_MIC),
30744344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_VOICE_UPLINK),
30844344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_VOICE_DOWNLINK),
30944344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_VOICE_CALL),
31044344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_CAMCORDER),
31144344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_VOICE_RECOGNITION),
31244344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_VOICE_COMMUNICATION),
31344344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_REMOTE_SUBMIX),
31444344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_UNPROCESSED),
31544344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_CNT),
31644344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_MAX),
31744344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_FM_TUNER),
31844344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    MAKE_STRING_FROM_ENUM(AUDIO_SOURCE_HOTWORD),
31944344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov    TERMINATOR
32044344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov};
32144344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganov
322913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<OutputDeviceTraits>;
323913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<InputDeviceTraits>;
324913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<OutputFlagTraits>;
325913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<InputFlagTraits>;
326913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<FormatTraits>;
327913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<OutputChannelTraits>;
328913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<InputChannelTraits>;
329913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<ChannelIndexTraits>;
330913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<GainModeTraits>;
331913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<StreamTraits>;
332913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovtemplate class TypeConverter<AudioModeTraits>;
33344344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovtemplate class TypeConverter<UsageTraits>;
33444344b05261cb9ad46a43e635f637b89aecc7afeMikhail Naganovtemplate class TypeConverter<SourceTraits>;
335913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
336913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovbool deviceFromString(const std::string& literalDevice, audio_devices_t& device) {
337913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return InputDeviceConverter::fromString(literalDevice, device) ||
338913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov            OutputDeviceConverter::fromString(literalDevice, device);
339913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
340913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
341913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovbool deviceToString(audio_devices_t device, std::string& literalDevice) {
342913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    if (device & AUDIO_DEVICE_BIT_IN) {
343913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        return InputDeviceConverter::toString(device, literalDevice);
344913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    } else {
345913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        return OutputDeviceConverter::toString(device, literalDevice);
346913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    }
347913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
348913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
349913d06c099bd689375483a839e11057ccf284d1cMikhail NaganovSampleRateTraits::Collection samplingRatesFromString(
350913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        const std::string &samplingRates, const char *del)
351913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
352913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    SampleRateTraits::Collection samplingRateCollection;
353913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    collectionFromString<SampleRateTraits>(samplingRates, samplingRateCollection, del);
354913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return samplingRateCollection;
355913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
356913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
357913d06c099bd689375483a839e11057ccf284d1cMikhail NaganovFormatTraits::Collection formatsFromString(
358913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        const std::string &formats, const char *del)
359913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
360913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    FormatTraits::Collection formatCollection;
361913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    FormatConverter::collectionFromString(formats, formatCollection, del);
362913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return formatCollection;
363913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
364913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
365913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovaudio_format_t formatFromString(const std::string &literalFormat, audio_format_t defaultFormat)
366913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
367913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    audio_format_t format;
368913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    if (literalFormat.empty()) {
369913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        return defaultFormat;
370913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    }
371913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    FormatConverter::fromString(literalFormat, format);
372913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return format;
373913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
374913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
375913d06c099bd689375483a839e11057ccf284d1cMikhail Naganovaudio_channel_mask_t channelMaskFromString(const std::string &literalChannels)
376913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
377913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    audio_channel_mask_t channels;
378913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    if (!OutputChannelConverter::fromString(literalChannels, channels) ||
379913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov            !InputChannelConverter::fromString(literalChannels, channels)) {
380913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        return AUDIO_CHANNEL_INVALID;
381913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    }
382913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return channels;
383913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
384913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
385913d06c099bd689375483a839e11057ccf284d1cMikhail NaganovChannelTraits::Collection channelMasksFromString(
386913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        const std::string &channels, const char *del)
387913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
388913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    ChannelTraits::Collection channelMaskCollection;
389913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    OutputChannelConverter::collectionFromString(channels, channelMaskCollection, del);
390913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    InputChannelConverter::collectionFromString(channels, channelMaskCollection, del);
391913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    ChannelIndexConverter::collectionFromString(channels, channelMaskCollection, del);
392913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return channelMaskCollection;
393913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
394913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
395913d06c099bd689375483a839e11057ccf284d1cMikhail NaganovInputChannelTraits::Collection inputChannelMasksFromString(
396913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        const std::string &inChannels, const char *del)
397913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
398913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    InputChannelTraits::Collection inputChannelMaskCollection;
399913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    InputChannelConverter::collectionFromString(inChannels, inputChannelMaskCollection, del);
400913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    ChannelIndexConverter::collectionFromString(inChannels, inputChannelMaskCollection, del);
401913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return inputChannelMaskCollection;
402913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
403913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
404913d06c099bd689375483a839e11057ccf284d1cMikhail NaganovOutputChannelTraits::Collection outputChannelMasksFromString(
405913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov        const std::string &outChannels, const char *del)
406913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov{
407913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    OutputChannelTraits::Collection outputChannelMaskCollection;
408913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    OutputChannelConverter::collectionFromString(outChannels, outputChannelMaskCollection, del);
409913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    ChannelIndexConverter::collectionFromString(outChannels, outputChannelMaskCollection, del);
410913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov    return outputChannelMaskCollection;
411913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}
412913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov
413913d06c099bd689375483a839e11057ccf284d1cMikhail Naganov}; // namespace android
414