diff options
author | Scott Lobdell <slobdell@google.com> | 2021-01-20 23:33:26 -0800 |
---|---|---|
committer | Scott Lobdell <slobdell@google.com> | 2021-01-20 23:33:26 -0800 |
commit | c1c3917a4fa8b5a2182affe9cb7085e39db656a3 (patch) | |
tree | 5b48ce37e552ff7b1d607b413456e5f73d81c5d1 /audio/core/all-versions/default/Conversions.cpp | |
parent | 2ed00921cc09456c69e085dca5faf6b28ff18ad8 (diff) | |
parent | 78c4ffcbf6ded706cbd1d4b9f4bdebce3a9bdf7b (diff) |
Merge SP1A.210105.001
Change-Id: Id2a20fc365d42c97b319cbc5c563ff56e3fad368
Diffstat (limited to 'audio/core/all-versions/default/Conversions.cpp')
-rw-r--r-- | audio/core/all-versions/default/Conversions.cpp | 124 |
1 files changed, 64 insertions, 60 deletions
diff --git a/audio/core/all-versions/default/Conversions.cpp b/audio/core/all-versions/default/Conversions.cpp index 28d8f78bbc..8e0a140f0b 100644 --- a/audio/core/all-versions/default/Conversions.cpp +++ b/audio/core/all-versions/default/Conversions.cpp @@ -18,8 +18,11 @@ #include <stdio.h> +#if MAJOR_VERSION >= 7 +#include <android_audio_policy_configuration_V7_0-enums.h> +#endif +#include <HidlUtils.h> #include <log/log.h> -#include <media/AudioContainers.h> namespace android { namespace hardware { @@ -27,73 +30,36 @@ namespace audio { namespace CPP_VERSION { namespace implementation { -// TODO(mnaganov): Use method from HidlUtils for V7 +using ::android::hardware::audio::common::CPP_VERSION::implementation::HidlUtils; + +#if MAJOR_VERSION <= 6 std::string deviceAddressToHal(const DeviceAddress& address) { - // HAL assumes that the address is NUL-terminated. + audio_devices_t halDevice; char halAddress[AUDIO_DEVICE_MAX_ADDRESS_LEN]; - memset(halAddress, 0, sizeof(halAddress)); - audio_devices_t halDevice = static_cast<audio_devices_t>(address.device); - if (getAudioDeviceOutAllA2dpSet().count(halDevice) > 0 || - halDevice == AUDIO_DEVICE_IN_BLUETOOTH_A2DP) { - snprintf(halAddress, sizeof(halAddress), "%02X:%02X:%02X:%02X:%02X:%02X", - address.address.mac[0], address.address.mac[1], address.address.mac[2], - address.address.mac[3], address.address.mac[4], address.address.mac[5]); - } else if (halDevice == AUDIO_DEVICE_OUT_IP || halDevice == AUDIO_DEVICE_IN_IP) { - snprintf(halAddress, sizeof(halAddress), "%d.%d.%d.%d", address.address.ipv4[0], - address.address.ipv4[1], address.address.ipv4[2], address.address.ipv4[3]); - } else if (getAudioDeviceOutAllUsbSet().count(halDevice) > 0 || - getAudioDeviceInAllUsbSet().count(halDevice) > 0) { - snprintf(halAddress, sizeof(halAddress), "card=%d;device=%d", address.address.alsa.card, - address.address.alsa.device); - } else if (halDevice == AUDIO_DEVICE_OUT_BUS || halDevice == AUDIO_DEVICE_IN_BUS) { - snprintf(halAddress, sizeof(halAddress), "%s", address.busAddress.c_str()); - } else if (halDevice == AUDIO_DEVICE_OUT_REMOTE_SUBMIX || - halDevice == AUDIO_DEVICE_IN_REMOTE_SUBMIX) { - snprintf(halAddress, sizeof(halAddress), "%s", address.rSubmixAddress.c_str()); - } + (void)deviceAddressToHal(address, &halDevice, halAddress); return halAddress; } +#endif -#if MAJOR_VERSION >= 4 -status_t deviceAddressFromHal(audio_devices_t device, const char* halAddress, - DeviceAddress* address) { - if (address == nullptr) { - return BAD_VALUE; - } - address->device = AudioDevice(device); - if (halAddress == nullptr || strnlen(halAddress, AUDIO_DEVICE_MAX_ADDRESS_LEN) == 0) { - return OK; - } +status_t deviceAddressToHal(const DeviceAddress& device, audio_devices_t* halDeviceType, + char* halDeviceAddress) { +#if MAJOR_VERSION >= 5 + return HidlUtils::deviceAddressToHal(device, halDeviceType, halDeviceAddress); +#else + return HidlUtils::deviceAddressToHalImpl(device, halDeviceType, halDeviceAddress); +#endif +} - if (getAudioDeviceOutAllA2dpSet().count(device) > 0 || - device == AUDIO_DEVICE_IN_BLUETOOTH_A2DP) { - int status = - sscanf(halAddress, "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX", &address->address.mac[0], - &address->address.mac[1], &address->address.mac[2], &address->address.mac[3], - &address->address.mac[4], &address->address.mac[5]); - return status == 6 ? OK : BAD_VALUE; - } else if (device == AUDIO_DEVICE_OUT_IP || device == AUDIO_DEVICE_IN_IP) { - int status = - sscanf(halAddress, "%hhu.%hhu.%hhu.%hhu", &address->address.ipv4[0], - &address->address.ipv4[1], &address->address.ipv4[2], &address->address.ipv4[3]); - return status == 4 ? OK : BAD_VALUE; - } else if (getAudioDeviceOutAllUsbSet().count(device) > 0 || - getAudioDeviceInAllUsbSet().count(device) > 0) { - int status = sscanf(halAddress, "card=%d;device=%d", &address->address.alsa.card, - &address->address.alsa.device); - return status == 2 ? OK : BAD_VALUE; - } else if (device == AUDIO_DEVICE_OUT_BUS || device == AUDIO_DEVICE_IN_BUS) { - address->busAddress = halAddress; - return OK; - } else if (device == AUDIO_DEVICE_OUT_REMOTE_SUBMIX || - device == AUDIO_DEVICE_IN_REMOTE_SUBMIX) { - address->rSubmixAddress = halAddress; - return OK; - } - address->busAddress = halAddress; - return OK; +status_t deviceAddressFromHal(audio_devices_t halDeviceType, const char* halDeviceAddress, + DeviceAddress* device) { +#if MAJOR_VERSION >= 5 + return HidlUtils::deviceAddressFromHal(halDeviceType, halDeviceAddress, device); +#else + return HidlUtils::deviceAddressFromHalImpl(halDeviceType, halDeviceAddress, device); +#endif } +#if MAJOR_VERSION >= 4 bool halToMicrophoneCharacteristics(MicrophoneInfo* pDst, const struct audio_microphone_characteristic_t& src) { bool status = false; @@ -131,6 +97,44 @@ bool halToMicrophoneCharacteristics(MicrophoneInfo* pDst, } return status; } +#endif // MAJOR_VERSION >= 4 + +#if MAJOR_VERSION >= 7 +namespace xsd { +using namespace ::android::audio::policy::configuration::V7_0; +} + +bool audioInputFlagsToHal(const hidl_vec<AudioInOutFlag>& flags, audio_input_flags_t* halFlags) { + bool success = true; + *halFlags = {}; + for (const auto& flag : flags) { + audio_input_flags_t halFlag; + if (!xsd::isUnknownAudioInOutFlag(flag) && + audio_input_flag_from_string(flag.c_str(), &halFlag)) { + *halFlags = static_cast<audio_input_flags_t>(*halFlags | halFlag); + } else { + ALOGE("Unknown audio input flag \"%s\"", flag.c_str()); + success = false; + } + } + return success; +} + +bool audioOutputFlagsToHal(const hidl_vec<AudioInOutFlag>& flags, audio_output_flags_t* halFlags) { + bool success = true; + *halFlags = {}; + for (const auto& flag : flags) { + audio_output_flags_t halFlag; + if (!xsd::isUnknownAudioInOutFlag(flag) && + audio_output_flag_from_string(flag.c_str(), &halFlag)) { + *halFlags = static_cast<audio_output_flags_t>(*halFlags | halFlag); + } else { + ALOGE("Unknown audio output flag \"%s\"", flag.c_str()); + success = false; + } + } + return success; +} #endif } // namespace implementation |