diff options
author | Mikhail Naganov <mnaganov@google.com> | 2021-01-27 02:16:53 +0000 |
---|---|---|
committer | Mikhail Naganov <mnaganov@google.com> | 2021-01-28 21:27:43 +0000 |
commit | ff611980f317888607389d0cb258bd86f11f2dfb (patch) | |
tree | c0c25fc7cf56730823b5cbe2b5552caac488457a /audio/effect/all-versions/default/Effect.cpp | |
parent | 31f2eb37915bf81117a77fc48af01ec7bdb4e381 (diff) |
audio: Update common types to better match legacy structs
HAL V7 types were updated to better match data structure
definitions from the legacy HAL:
- Added 'AudioConfigBaseOptional' struct to match
legacy structs that have 'mask' field to specify
initialized fields.
- All fields in 'AudioConfigBase' made mandatory.
- Removed 'EffectConfigParameters' in favor of
'AudioConfigBaseOptional' and safe_unions.
- Added missing enum string values to ensure that round-trip
conversions from the legacy HAL to HIDL and back to legacy
preserve enum values.
Bug: 142480271
Test: atest android.hardware.audio.common@7.0-util_tests
Test: atest VtsHalAudioV6_0TargetTest
Test: atest VtsHalAudioV7_0TargetTest
Test: atest VtsHalAudioEffectV7_0TargetTest
Change-Id: If02a81b3f6790a8eb315fa57123141aad2419132
Diffstat (limited to 'audio/effect/all-versions/default/Effect.cpp')
-rw-r--r-- | audio/effect/all-versions/default/Effect.cpp | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/audio/effect/all-versions/default/Effect.cpp b/audio/effect/all-versions/default/Effect.cpp index edd364cd9b..58f1779ffd 100644 --- a/audio/effect/all-versions/default/Effect.cpp +++ b/audio/effect/all-versions/default/Effect.cpp @@ -249,14 +249,17 @@ void Effect::effectAuxChannelsConfigToHal(const EffectAuxChannelsConfig& config, void Effect::effectBufferConfigFromHal(const buffer_config_t& halConfig, EffectBufferConfig* config) { - config->buffer.id = 0; - config->buffer.frameCount = 0; + config->buffer.unspecified(); audio_config_base_t halConfigBase = {halConfig.samplingRate, static_cast<audio_channel_mask_t>(halConfig.channels), static_cast<audio_format_t>(halConfig.format)}; - (void)HidlUtils::audioConfigBaseFromHal(halConfigBase, mIsInput, &config->base); - config->accessMode = EffectBufferAccess(halConfig.accessMode); - config->mask = static_cast<decltype(config->mask)>(halConfig.mask); + (void)HidlUtils::audioConfigBaseOptionalFromHal( + halConfigBase, mIsInput, halConfig.mask & EFFECT_CONFIG_FORMAT, + halConfig.mask & EFFECT_CONFIG_SMP_RATE, halConfig.mask & EFFECT_CONFIG_CHANNELS, + &config->base); + if (halConfig.mask & EFFECT_CONFIG_ACC_MODE) { + config->accessMode.value(EffectBufferAccess(halConfig.accessMode)); + } } // static @@ -265,17 +268,32 @@ void Effect::effectBufferConfigToHal(const EffectBufferConfig& config, buffer_co // using 'setProcessBuffers'. halConfig->buffer.frameCount = 0; halConfig->buffer.raw = nullptr; - audio_config_base_t halConfigBase; - (void)HidlUtils::audioConfigBaseToHal(config.base, &halConfigBase); - halConfig->samplingRate = halConfigBase.sample_rate; - halConfig->channels = halConfigBase.channel_mask; - halConfig->format = halConfigBase.format; + audio_config_base_t halConfigBase = AUDIO_CONFIG_BASE_INITIALIZER; + bool formatSpecified = false, sRateSpecified = false, channelMaskSpecified = false; + (void)HidlUtils::audioConfigBaseOptionalToHal(config.base, &halConfigBase, &formatSpecified, + &sRateSpecified, &channelMaskSpecified); + halConfig->mask = 0; + if (sRateSpecified) { + halConfig->mask |= EFFECT_CONFIG_SMP_RATE; + halConfig->samplingRate = halConfigBase.sample_rate; + } + if (channelMaskSpecified) { + halConfig->mask |= EFFECT_CONFIG_CHANNELS; + halConfig->channels = halConfigBase.channel_mask; + } + if (formatSpecified) { + halConfig->mask |= EFFECT_CONFIG_FORMAT; + halConfig->format = halConfigBase.format; + } // Note: The framework code does not use BP. halConfig->bufferProvider.cookie = nullptr; halConfig->bufferProvider.getBuffer = nullptr; halConfig->bufferProvider.releaseBuffer = nullptr; - halConfig->accessMode = static_cast<uint8_t>(config.accessMode); - halConfig->mask = static_cast<uint8_t>(config.mask); + if (config.accessMode.getDiscriminator() == + EffectBufferConfig::OptionalAccessMode::hidl_discriminator::value) { + halConfig->mask |= EFFECT_CONFIG_ACC_MODE; + halConfig->accessMode = static_cast<uint8_t>(config.accessMode.value()); + } } #endif // MAJOR_VERSION <= 6 |