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