From 918a6a5ce9f0583f4aefb12334e40412bfe6288e Mon Sep 17 00:00:00 2001 From: Peter Yoon Date: Thu, 13 Jul 2023 17:04:37 +0900 Subject: [PATCH] audio: Allow Module subclasses to customize Configuration When a vendor HAL reuses libaudioserviceexampleimpl, a subclass of Module cannot change Configuration. This change adds virtual method Module::initializeConfig(), then a vendor HAL can override it to load custom Configuration. Test: atest VtsHalAudioCoreTargetTest Change-Id: I63fa8d70f3c4e13c8938070ee5431ebefd36bb58 --- audio/aidl/default/Module.cpp | 34 +++++++++++-------- audio/aidl/default/include/core-impl/Module.h | 2 ++ 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 12bbbb0cba..5478633d02 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -286,22 +286,28 @@ std::set Module::portIdsFromPortConfigIds(C portConfigIds) { return result; } +std::unique_ptr Module::initializeConfig() { + std::unique_ptr config; + switch (getType()) { + case Type::DEFAULT: + config = std::move(internal::getPrimaryConfiguration()); + break; + case Type::R_SUBMIX: + config = std::move(internal::getRSubmixConfiguration()); + break; + case Type::STUB: + config = std::move(internal::getStubConfiguration()); + break; + case Type::USB: + config = std::move(internal::getUsbConfiguration()); + break; + } + return config; +} + internal::Configuration& Module::getConfig() { if (!mConfig) { - switch (mType) { - case Type::DEFAULT: - mConfig = std::move(internal::getPrimaryConfiguration()); - break; - case Type::R_SUBMIX: - mConfig = std::move(internal::getRSubmixConfiguration()); - break; - case Type::STUB: - mConfig = std::move(internal::getStubConfiguration()); - break; - case Type::USB: - mConfig = std::move(internal::getUsbConfiguration()); - break; - } + mConfig = std::move(initializeConfig()); } return *mConfig; } diff --git a/audio/aidl/default/include/core-impl/Module.h b/audio/aidl/default/include/core-impl/Module.h index ee0458be49..294cc0e7b9 100644 --- a/audio/aidl/default/include/core-impl/Module.h +++ b/audio/aidl/default/include/core-impl/Module.h @@ -182,6 +182,7 @@ class Module : public BnModule { const ::aidl::android::media::audio::common::AudioPort& audioPort, bool connected); virtual ndk::ScopedAStatus onMasterMuteChanged(bool mute); virtual ndk::ScopedAStatus onMasterVolumeChanged(float volume); + virtual std::unique_ptr initializeConfig(); // Utility and helper functions accessible to subclasses. void cleanUpPatch(int32_t patchId); @@ -202,6 +203,7 @@ class Module : public BnModule { bool getMicMute() const { return mMicMute; } const Patches& getPatches() const { return mPatches; } const Streams& getStreams() const { return mStreams; } + Type getType() const { return mType; } bool isMmapSupported(); template std::set portIdsFromPortConfigIds(C portConfigIds);