blob: d3a517fb125af47d4924c31c3ab42cba9289ce61 [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <media/TypeConverter.h>
namespace android {
#define MAKE_STRING_FROM_ENUM(enumval) { #enumval, enumval }
#define TERMINATOR { .literal = nullptr }
template<>
const AudioModeConverter::Table AudioModeConverter::mTable[] = {
MAKE_STRING_FROM_ENUM(AUDIO_MODE_INVALID),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_CURRENT),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_NORMAL),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_RINGTONE),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_IN_CALL),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_IN_COMMUNICATION),
MAKE_STRING_FROM_ENUM(AUDIO_MODE_CALL_SCREEN),
TERMINATOR
};
template <>
const AudioFlagConverter::Table AudioFlagConverter::mTable[] = {
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_NONE),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_AUDIBILITY_ENFORCED),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_SECURE),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_SCO),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_BEACON),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_HW_AV_SYNC),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_HW_HOTWORD),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_BYPASS_MUTE),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_LOW_LATENCY),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_DEEP_BUFFER),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_NO_MEDIA_PROJECTION),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_MUTE_HAPTIC),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_NO_SYSTEM_CAPTURE),
MAKE_STRING_FROM_ENUM(AUDIO_FLAG_CAPTURE_PRIVATE),
TERMINATOR
};
template class TypeConverter<OutputDeviceTraits>;
template class TypeConverter<InputDeviceTraits>;
template class TypeConverter<DeviceTraits>;
template class TypeConverter<OutputFlagTraits>;
template class TypeConverter<InputFlagTraits>;
template class TypeConverter<FormatTraits>;
template class TypeConverter<OutputChannelTraits>;
template class TypeConverter<InputChannelTraits>;
template class TypeConverter<ChannelIndexTraits>;
template class TypeConverter<GainModeTraits>;
template class TypeConverter<StreamTraits>;
template class TypeConverter<AudioModeTraits>;
template class TypeConverter<UsageTraits>;
template class TypeConverter<SourceTraits>;
template class TypeConverter<AudioFlagTraits>;
SampleRateTraits::Collection samplingRatesFromString(
const std::string &samplingRates, const char *del)
{
SampleRateTraits::Collection samplingRateCollection;
collectionFromString<SampleRateTraits>(samplingRates, samplingRateCollection, del);
return samplingRateCollection;
}
FormatTraits::Collection formatsFromString(
const std::string &formats, const char *del)
{
FormatTraits::Collection formatCollection;
FormatConverter::collectionFromString(formats, formatCollection, del);
return formatCollection;
}
audio_format_t formatFromString(const std::string &literalFormat, audio_format_t defaultFormat)
{
audio_format_t format;
if (!literalFormat.empty() && FormatConverter::fromString(literalFormat, format)) {
return format;
}
return defaultFormat;
}
audio_channel_mask_t channelMaskFromString(const std::string &literalChannels)
{
audio_channel_mask_t channels;
if (!literalChannels.empty() &&
audio_channel_mask_from_string(literalChannels.c_str(), &channels)) {
return channels;
}
return AUDIO_CHANNEL_INVALID;
}
ChannelTraits::Collection channelMasksFromString(
const std::string &channels, const char *del)
{
ChannelTraits::Collection channelMaskCollection;
OutputChannelConverter::collectionFromString(channels, channelMaskCollection, del);
InputChannelConverter::collectionFromString(channels, channelMaskCollection, del);
ChannelIndexConverter::collectionFromString(channels, channelMaskCollection, del);
return channelMaskCollection;
}
InputChannelTraits::Collection inputChannelMasksFromString(
const std::string &inChannels, const char *del)
{
InputChannelTraits::Collection inputChannelMaskCollection;
InputChannelConverter::collectionFromString(inChannels, inputChannelMaskCollection, del);
ChannelIndexConverter::collectionFromString(inChannels, inputChannelMaskCollection, del);
return inputChannelMaskCollection;
}
OutputChannelTraits::Collection outputChannelMasksFromString(
const std::string &outChannels, const char *del)
{
OutputChannelTraits::Collection outputChannelMaskCollection;
OutputChannelConverter::collectionFromString(outChannels, outputChannelMaskCollection, del);
ChannelIndexConverter::collectionFromString(outChannels, outputChannelMaskCollection, del);
return outputChannelMaskCollection;
}
}; // namespace android