From cb766d2517f1a1c89caefdb3a3074fac1b6bedb3 Mon Sep 17 00:00:00 2001 From: Mikhail Naganov Date: Wed, 24 Mar 2021 20:04:08 -0700 Subject: [PATCH] audio: Use get_audio_port_v7 in the default wrapper get_audio_port_v7 interface method was added in aosp/1518624 but wasn't used in the default wrapper due to the refactoring ongoing at that time. Fixing this omission. Bug: 160352965 Test: atest VtsHalAudioV7_0TargetTest Change-Id: I1e3594f30fe8fa319d0b5b4244531c9142870503 Merged-In: I1e3594f30fe8fa319d0b5b4244531c9142870503 --- audio/core/all-versions/default/Device.cpp | 35 ++++++++++++++++--- .../default/include/core/default/Device.h | 4 +++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/audio/core/all-versions/default/Device.cpp b/audio/core/all-versions/default/Device.cpp index 70a1a4d1c1..130dfba95b 100644 --- a/audio/core/all-versions/default/Device.cpp +++ b/audio/core/all-versions/default/Device.cpp @@ -360,18 +360,43 @@ Return Device::releaseAudioPatch(int32_t patch) { return Result::NOT_SUPPORTED; } -Return Device::getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) { - audio_port halPort; - HidlUtils::audioPortToHal(port, &halPort); - Result retval = analyzeStatus("get_audio_port", mDevice->get_audio_port(mDevice, &halPort)); +template +Return Device::getAudioPortImpl(const AudioPort& port, getAudioPort_cb _hidl_cb, + int (*halGetter)(audio_hw_device_t*, HalPort*), + const char* halGetterName) { + HalPort halPort; + if (status_t status = HidlUtils::audioPortToHal(port, &halPort); status != NO_ERROR) { + _hidl_cb(analyzeStatus("audioPortToHal", status), port); + return Void(); + } + Result retval = analyzeStatus(halGetterName, halGetter(mDevice, &halPort)); AudioPort resultPort = port; if (retval == Result::OK) { - HidlUtils::audioPortFromHal(halPort, &resultPort); + if (status_t status = HidlUtils::audioPortFromHal(halPort, &resultPort); + status != NO_ERROR) { + _hidl_cb(analyzeStatus("audioPortFromHal", status), port); + return Void(); + } } _hidl_cb(retval, resultPort); return Void(); } +#if MAJOR_VERSION <= 6 +Return Device::getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) { + return getAudioPortImpl(port, _hidl_cb, mDevice->get_audio_port, "get_audio_port"); +} +#else +Return Device::getAudioPort(const AudioPort& port, getAudioPort_cb _hidl_cb) { + if (version() >= AUDIO_DEVICE_API_VERSION_3_2) { + // get_audio_port_v7 is mandatory if legacy HAL support this API version. + return getAudioPortImpl(port, _hidl_cb, mDevice->get_audio_port_v7, "get_audio_port_v7"); + } else { + return getAudioPortImpl(port, _hidl_cb, mDevice->get_audio_port, "get_audio_port"); + } +} +#endif + Return Device::setAudioPortConfig(const AudioPortConfig& config) { if (version() >= AUDIO_DEVICE_API_VERSION_3_0) { struct audio_port_config halPortConfig; diff --git a/audio/core/all-versions/default/include/core/default/Device.h b/audio/core/all-versions/default/include/core/default/Device.h index 5851fc949c..94cad53581 100644 --- a/audio/core/all-versions/default/include/core/default/Device.h +++ b/audio/core/all-versions/default/include/core/default/Device.h @@ -153,6 +153,10 @@ struct Device : public IDevice, public ParametersUtil { std::tuple createOrUpdateAudioPatch( AudioPatchHandle patch, const hidl_vec& sources, const hidl_vec& sinks); + template + Return getAudioPortImpl(const AudioPort& port, getAudioPort_cb _hidl_cb, + int (*halGetter)(audio_hw_device_t*, HalPort*), + const char* halGetterName); // Methods from ParametersUtil. char* halGetParameters(const char* keys) override;