TypeConverter.cpp revision a8ecc2c72ca26389bd6b0162181d60aaeaca8149
10b167267bda99b68346045ccab14e810121d5de4Glenn Kasten/*
20b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Copyright (C) 2015 The Android Open Source Project
30b167267bda99b68346045ccab14e810121d5de4Glenn Kasten *
40b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
50b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * you may not use this file except in compliance with the License.
60b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * You may obtain a copy of the License at
70b167267bda99b68346045ccab14e810121d5de4Glenn Kasten *
80b167267bda99b68346045ccab14e810121d5de4Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
90b167267bda99b68346045ccab14e810121d5de4Glenn Kasten *
100b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * Unless required by applicable law or agreed to in writing, software
110b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
120b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * See the License for the specific language governing permissions and
140b167267bda99b68346045ccab14e810121d5de4Glenn Kasten * limitations under the License.
150b167267bda99b68346045ccab14e810121d5de4Glenn Kasten */
160b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
170b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "TypeConverter.h"
180b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
19979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kastennamespace android {
20979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten
21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten#define MAKE_STRING_FROM_ENUM(string) { #string, string }
22daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten
23daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kastentemplate <>
240b167267bda99b68346045ccab14e810121d5de4Glenn Kastenconst DeviceConverter::Table DeviceConverter::mTable[] = {
25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_EARPIECE),
26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPEAKER),
27ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPEAKER_SAFE),
28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADSET),
29ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_WIRED_HEADPHONE),
30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO),
31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET),
32ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT),
33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_SCO),
34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP),
35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES),
36ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),
37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_A2DP),
38ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_AUX_DIGITAL),
39ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_HDMI),
40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET),
41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET),
42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_USB_ACCESSORY),
43ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_USB_DEVICE),
44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_ALL_USB),
45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_REMOTE_SUBMIX),
46ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_TELEPHONY_TX),
470b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_LINE),
480b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_HDMI_ARC),
49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_SPDIF),
50daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_FM),
51daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_AUX_LINE),
520b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_OUT_IP),
53ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_AMBIENT),
54ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BUILTIN_MIC),
55ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET),
56ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_ALL_SCO),
57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_WIRED_HEADSET),
58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_AUX_DIGITAL),
59ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_HDMI),
60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_TELEPHONY_RX),
61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_VOICE_CALL),
62ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BACK_MIC),
63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_REMOTE_SUBMIX),
64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET),
65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET),
66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_USB_ACCESSORY),
67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_USB_DEVICE),
68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_FM_TUNER),
69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_TV_TUNER),
70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_LINE),
71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_SPDIF),
72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_BLUETOOTH_A2DP),
73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_LOOPBACK),
74ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        MAKE_STRING_FROM_ENUM(AUDIO_DEVICE_IN_IP),
750b167267bda99b68346045ccab14e810121d5de4Glenn Kasten};
760b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
77ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
780b167267bda99b68346045ccab14e810121d5de4Glenn Kastenconst size_t DeviceConverter::mSize = sizeof(DeviceConverter::mTable) /
790b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        sizeof(DeviceConverter::mTable[0]);
800b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
810b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
82ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
83ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst OutputFlagConverter::Table OutputFlagConverter::mTable[] = {
84ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_DIRECT),
85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY),
86ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_FAST),
87ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER),
88ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD),
89ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_NON_BLOCKING),
90ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_HW_AV_SYNC),
91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_TTS),
92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_RAW),
93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_OUTPUT_FLAG_SYNC),
94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten};
95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
96ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst size_t OutputFlagConverter::mSize = sizeof(OutputFlagConverter::mTable) /
97ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        sizeof(OutputFlagConverter::mTable[0]);
98ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
99b91e32605ecf39e34ad39936b1ee193bb4e30225Glenn Kasten
100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
101daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kastenconst InputFlagConverter::Table InputFlagConverter::mTable[] = {
102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_FAST),
103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_HW_HOTWORD),
104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_RAW),
105ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_INPUT_FLAG_SYNC),
106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten};
107ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
108daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kastenconst size_t InputFlagConverter::mSize = sizeof(InputFlagConverter::mTable) /
109ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        sizeof(InputFlagConverter::mTable[0]);
110ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
112daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kastentemplate <>
113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst FormatConverter::Table FormatConverter::mTable[] = {
114ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_16_BIT),
115ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_8_BIT),
116daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_32_BIT),
117ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_8_24_BIT),
118ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_FLOAT),
119ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_PCM_24_BIT_PACKED),
120daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_MP3),
121ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC),
122ef8931ae547cd703e69df9ad350d69825da0f546Jean-Michel Trivi    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_MAIN),
123ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LC),
124ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_SSR),
125ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LTP),
12600d2d554e04ac369367c903dbf53b975355d1bcdGlenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_HE_V1),
127ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_SCALABLE),
128ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ERLC),
129ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_LD),
130ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_HE_V2),
131ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AAC_ELD),
132ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_VORBIS),
133ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_HE_AAC_V1),
134ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_HE_AAC_V2),
1350b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_OPUS),
136acd88797a1d3b8225bab888d29036e245f275be5Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_AC3),
1370b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_E_AC3),
138ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DTS),
139ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_FORMAT_DTS_HD),
140ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten};
1410b167267bda99b68346045ccab14e810121d5de4Glenn Kastentemplate<>
1420b167267bda99b68346045ccab14e810121d5de4Glenn Kastenconst size_t FormatConverter::mSize = sizeof(FormatConverter::mTable) /
1430b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        sizeof(FormatConverter::mTable[0]);
144ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
145ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
146ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
147daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kastenconst OutputChannelConverter::Table OutputChannelConverter::mTable[] = {
1480b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_MONO),
149ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_STEREO),
150ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_QUAD),
151ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_5POINT1),
152ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_OUT_7POINT1),
153ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten};
154ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
155ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst size_t OutputChannelConverter::mSize = sizeof(OutputChannelConverter::mTable) /
156ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        sizeof(OutputChannelConverter::mTable[0]);
157ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
158ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
159ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
160ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst InputChannelConverter::Table InputChannelConverter::mTable[] = {
161ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_MONO),
162ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_STEREO),
163ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_CHANNEL_IN_FRONT_BACK),
164ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten};
165ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
166ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst size_t InputChannelConverter::mSize = sizeof(InputChannelConverter::mTable) /
167ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        sizeof(InputChannelConverter::mTable[0]);
168ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
169ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
170ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
171ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst ChannelIndexConverter::Table ChannelIndexConverter::mTable[] = {
172ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_1", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_1),
173ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_2", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_2),
174ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_3", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_3),
175ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_4", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_4),
176ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_5", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_5),
177ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_6", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_6),
178ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_7", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_7),
179ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    "AUDIO_CHANNEL_INDEX_MASK_8", static_cast<audio_channel_mask_t>(AUDIO_CHANNEL_INDEX_MASK_8),
1800b167267bda99b68346045ccab14e810121d5de4Glenn Kasten};
181ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
182ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst size_t ChannelIndexConverter::mSize = sizeof(ChannelIndexConverter::mTable) /
183daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten        sizeof(ChannelIndexConverter::mTable[0]);
184ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
185daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten
186ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <>
187ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst GainModeConverter::Table GainModeConverter::mTable[] = {
188daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_JOINT),
189ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_CHANNELS),
190ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    MAKE_STRING_FROM_ENUM(AUDIO_GAIN_MODE_RAMP),
191acd88797a1d3b8225bab888d29036e245f275be5Glenn Kasten};
192ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
193ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate<>
194ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenconst size_t GainModeConverter::mSize = sizeof(GainModeConverter::mTable) /
1950b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        sizeof(GainModeConverter::mTable[0]);
1960b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
197ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
198ccdf07b17f23b4c040dd3f62478d0965eba804e3Glenn Kastentemplate <typename T, typename SupportedType>
199ccdf07b17f23b4c040dd3f62478d0965eba804e3Glenn Kastenbool TypeConverter<T, SupportedType>::toString(const T &value, std::string &str)
200ccdf07b17f23b4c040dd3f62478d0965eba804e3Glenn Kasten{
2010b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    for (size_t i = 0; i < mSize; i++) {
202ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (mTable[i].value == value) {
203ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            str = mTable[i].literal;
204ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            return true;
205ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        }
206ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
207ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    return false;
208ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}
209ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
210ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <typename T, typename SupportedType>
211ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenbool TypeConverter<T, SupportedType>::fromString(const std::string &str, T &result)
212ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{
213ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    for (size_t i = 0; i < mSize; i++) {
214ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (strcmp(mTable[i].literal, str.c_str()) == 0) {
215ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            ALOGV("stringToEnum() found %s", mTable[i].literal);
216ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            result = mTable[i].value;
217ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            return true;
218ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        }
219ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
220ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    return false;
221ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}
222ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
223ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <typename T, typename SupportedType>
224ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenvoid TypeConverter<T, SupportedType>::collectionFromString(const std::string &str,
225ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten                                                           Vector<T> &collection)
226ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{
227ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    char *literal = strdup(str.c_str());
228ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
229ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    for (const char *cstr = strtok(literal, "|"); cstr != NULL; cstr = strtok(NULL, "|")) {
230ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        T value;
231ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (fromString(cstr, value)) {
232ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            collection.add(value);
233ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        }
234ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    }
235ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    free(literal);
236ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}
237ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
238ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate <typename T, typename SupportedType>
239ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenuint32_t TypeConverter<T, SupportedType>::maskFromString(const std::string &str)
240ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{
241ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    char *literal = strdup(str.c_str());
242ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    uint32_t value = 0;
243ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    for (const char *cstr = strtok(literal, "|"); cstr != NULL; cstr = strtok(NULL, "|")) {
244ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        T type;
245ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten        if (fromString(cstr, type)) {
246ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten            value |= static_cast<uint32_t>(type);
2470b167267bda99b68346045ccab14e810121d5de4Glenn Kasten        }
2480b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    }
249ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten    free(literal);
2500b167267bda99b68346045ccab14e810121d5de4Glenn Kasten    return value;
2510b167267bda99b68346045ccab14e810121d5de4Glenn Kasten}
2520b167267bda99b68346045ccab14e810121d5de4Glenn Kasten
2530b167267bda99b68346045ccab14e810121d5de4Glenn Kastentemplate class TypeConverter<audio_devices_t, Devices>;
2540b167267bda99b68346045ccab14e810121d5de4Glenn Kastentemplate class TypeConverter<audio_output_flags_t, OutputFlags>;
255ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_input_flags_t, InputFlags>;
256ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_format_t, Formats>;
257ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_channel_mask_t, OutputChannel>;
258ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_channel_mask_t, InputChannel>;
259ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_channel_mask_t, ChannelIndex>;
260ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastentemplate class TypeConverter<audio_gain_mode_t, GainMode>;
261ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
262ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; // namespace android
263ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten
264ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten