diff options
-rw-r--r-- | audio/common/7.0/types.hal | 2 | ||||
-rw-r--r-- | audio/common/all-versions/default/7.0/HidlUtils.cpp | 28 | ||||
-rw-r--r-- | audio/common/all-versions/default/tests/hidlutils_tests.cpp | 14 |
3 files changed, 32 insertions, 12 deletions
diff --git a/audio/common/7.0/types.hal b/audio/common/7.0/types.hal index 99c2e5a0eb..bea07059fc 100644 --- a/audio/common/7.0/types.hal +++ b/audio/common/7.0/types.hal @@ -61,6 +61,8 @@ struct Uuid { * Audio stream type describing the intended use case of a stream. * See 'audioStreamType' in audio_policy_configuration.xsd for the * list of allowed values. + * + * An empty string is used to specify the "default" stream type. */ typedef string AudioStreamType; diff --git a/audio/common/all-versions/default/7.0/HidlUtils.cpp b/audio/common/all-versions/default/7.0/HidlUtils.cpp index bb3a5968b5..2949fac293 100644 --- a/audio/common/all-versions/default/7.0/HidlUtils.cpp +++ b/audio/common/all-versions/default/7.0/HidlUtils.cpp @@ -335,25 +335,35 @@ status_t HidlUtils::audioSourceToHal(const AudioSource& source, audio_source_t* return BAD_VALUE; } +// The "default" value of audio_stream_type_t is represented by an empty string. status_t HidlUtils::audioStreamTypeFromHal(audio_stream_type_t halStreamType, AudioStreamType* streamType) { - *streamType = audio_stream_type_to_string(halStreamType); - if (!streamType->empty() && !xsd::isUnknownAudioStreamType(*streamType)) { + if (halStreamType != AUDIO_STREAM_DEFAULT) { + *streamType = audio_stream_type_to_string(halStreamType); + if (!streamType->empty() && !xsd::isUnknownAudioStreamType(*streamType)) { + return NO_ERROR; + } + ALOGE("Unknown audio stream type value 0x%X", halStreamType); + return BAD_VALUE; + } else { + *streamType = ""; return NO_ERROR; } - ALOGE("Unknown audio stream type value 0x%X", halStreamType); - return BAD_VALUE; } status_t HidlUtils::audioStreamTypeToHal(const AudioStreamType& streamType, audio_stream_type_t* halStreamType) { - if (!xsd::isUnknownAudioStreamType(streamType) && - audio_stream_type_from_string(streamType.c_str(), halStreamType)) { + if (!streamType.empty()) { + if (!xsd::isUnknownAudioStreamType(streamType) && + audio_stream_type_from_string(streamType.c_str(), halStreamType)) { + return NO_ERROR; + } + ALOGE("Unknown audio stream type \"%s\"", streamType.c_str()); + return BAD_VALUE; + } else { + *halStreamType = AUDIO_STREAM_DEFAULT; return NO_ERROR; } - ALOGE("Unknown audio stream type \"%s\"", streamType.c_str()); - *halStreamType = AUDIO_STREAM_DEFAULT; - return BAD_VALUE; } status_t HidlUtils::audioConfigFromHal(const audio_config_t& halConfig, bool isInput, diff --git a/audio/common/all-versions/default/tests/hidlutils_tests.cpp b/audio/common/all-versions/default/tests/hidlutils_tests.cpp index 40fc5c81c6..99d2e7246e 100644 --- a/audio/common/all-versions/default/tests/hidlutils_tests.cpp +++ b/audio/common/all-versions/default/tests/hidlutils_tests.cpp @@ -44,8 +44,8 @@ static constexpr audio_gain_mode_t kInvalidHalGainMode = static_cast<audio_gain_mode_t>(0xFFFFFFFFU); // AUDIO_SOURCE_INVALID is framework-only. static constexpr audio_source_t kInvalidHalSource = static_cast<audio_source_t>(-1); -static constexpr audio_stream_type_t kInvalidHalStreamType = - static_cast<audio_stream_type_t>(0xFFFFFFFFU); +// AUDIO_STREAM_DEFAULT is framework-only +static constexpr audio_stream_type_t kInvalidHalStreamType = static_cast<audio_stream_type_t>(-2); static constexpr audio_usage_t kInvalidHalUsage = static_cast<audio_usage_t>(0xFFFFFFFFU); TEST(HidlUtils, ConvertInvalidChannelMask) { @@ -660,10 +660,18 @@ TEST(HidlUtils, ConvertInvalidStreamType) { AudioStreamType invalid; EXPECT_EQ(BAD_VALUE, HidlUtils::audioStreamTypeFromHal(kInvalidHalStreamType, &invalid)); audio_stream_type_t halInvalid; - EXPECT_EQ(BAD_VALUE, HidlUtils::audioStreamTypeToHal("", &halInvalid)); EXPECT_EQ(BAD_VALUE, HidlUtils::audioStreamTypeToHal("random string", &halInvalid)); } +TEST(HidlUtils, ConvertDefaultStreamType) { + AudioStreamType streamDefault = ""; + audio_stream_type_t halStreamDefault; + EXPECT_EQ(NO_ERROR, HidlUtils::audioStreamTypeToHal(streamDefault, &halStreamDefault)); + AudioStreamType streamDefaultBack; + EXPECT_EQ(NO_ERROR, HidlUtils::audioStreamTypeFromHal(halStreamDefault, &streamDefaultBack)); + EXPECT_EQ(streamDefault, streamDefaultBack); +} + TEST(HidlUtils, ConvertStreamType) { for (const auto enumVal : xsdc_enum_range<xsd::AudioStreamType>{}) { const AudioStreamType streamType = toString(enumVal); |