From dc9d1a4b4237815e7096374f66a406b05aad60a4 Mon Sep 17 00:00:00 2001 From: Lorena Torres-Huerta Date: Wed, 18 Jan 2023 00:11:48 +0000 Subject: [PATCH] audio: Populate MicrophoneInfo with vendor data Added a virtual method Module::getMicrophoneInfos so that vendor implementations can provide actual data about device microphones. This information is not part of the APM config file. Bug: 205884982 Test: atest VtsHalAudioCoreTargetTestTest Change-Id: I4b650ae221ba866421bbf8500ad8c17f04bc4aa7 --- audio/aidl/default/Configuration.cpp | 8 ------ audio/aidl/default/Module.cpp | 28 +++++++++++++++++-- audio/aidl/default/include/core-impl/Module.h | 2 +- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/audio/aidl/default/Configuration.cpp b/audio/aidl/default/Configuration.cpp index a20bb54ea8..cf5f066c7c 100644 --- a/audio/aidl/default/Configuration.cpp +++ b/audio/aidl/default/Configuration.cpp @@ -41,7 +41,6 @@ using aidl::android::media::audio::common::AudioPortExt; using aidl::android::media::audio::common::AudioPortMixExt; using aidl::android::media::audio::common::AudioProfile; using aidl::android::media::audio::common::Int; -using aidl::android::media::audio::common::MicrophoneInfo; using aidl::android::media::audio::common::PcmType; using Configuration = aidl::android::hardware::audio::core::Module::Configuration; @@ -274,13 +273,6 @@ std::unique_ptr getPrimaryConfiguration() { c.portConfigs.insert(c.portConfigs.end(), c.initialConfigs.begin(), c.initialConfigs.end()); - MicrophoneInfo mic; - mic.id = "mic"; - mic.device = micInDevice.ext.get().device; - mic.group = 0; - mic.indexInTheGroup = 0; - c.microphones = std::vector{mic}; - return c; }(); return std::make_unique(configuration); diff --git a/audio/aidl/default/Module.cpp b/audio/aidl/default/Module.cpp index 0cda3bd8f5..cad239f161 100644 --- a/audio/aidl/default/Module.cpp +++ b/audio/aidl/default/Module.cpp @@ -43,6 +43,7 @@ using aidl::android::hardware::audio::common::SourceMetadata; using aidl::android::hardware::audio::core::sounddose::ISoundDose; using aidl::android::media::audio::common::AudioChannelLayout; using aidl::android::media::audio::common::AudioDevice; +using aidl::android::media::audio::common::AudioDeviceType; using aidl::android::media::audio::common::AudioFormatDescription; using aidl::android::media::audio::common::AudioFormatType; using aidl::android::media::audio::common::AudioInputFlags; @@ -795,7 +796,7 @@ ndk::ScopedAStatus Module::openInputStream(const OpenInputStreamArguments& in_ar context.fillDescriptor(&_aidl_return->desc); std::shared_ptr stream; RETURN_STATUS_IF_ERROR(createInputStream(std::move(context), in_args.sinkMetadata, - getConfig().microphones, &stream)); + getMicrophoneInfos(), &stream)); StreamWrapper streamWrapper(stream); if (auto patchIt = mPatches.find(in_args.portConfigId); patchIt != mPatches.end()) { RETURN_STATUS_IF_ERROR( @@ -1229,7 +1230,7 @@ ndk::ScopedAStatus Module::setMicMute(bool in_mute) { } ndk::ScopedAStatus Module::getMicrophones(std::vector* _aidl_return) { - *_aidl_return = getConfig().microphones; + *_aidl_return = getMicrophoneInfos(); LOG(DEBUG) << __func__ << ": returning " << ::android::internal::ToString(*_aidl_return); return ndk::ScopedAStatus::ok(); } @@ -1508,6 +1509,29 @@ ndk::ScopedAStatus Module::onMasterVolumeChanged(float volume __unused) { return ndk::ScopedAStatus::ok(); } +std::vector Module::getMicrophoneInfos() { + std::vector result; + Configuration& config = getConfig(); + for (const AudioPort& port : config.ports) { + if (port.ext.getTag() == AudioPortExt::Tag::device) { + const AudioDeviceType deviceType = + port.ext.get().device.type.type; + if (deviceType == AudioDeviceType::IN_MICROPHONE || + deviceType == AudioDeviceType::IN_MICROPHONE_BACK) { + // Placeholder values. Vendor implementations must populate MicrophoneInfo + // accordingly based on their physical microphone parameters. + result.push_back(MicrophoneInfo{ + .id = port.name, + .device = port.ext.get().device, + .group = 0, + .indexInTheGroup = 0, + }); + } + } + } + return result; +} + Module::BtProfileHandles Module::getBtProfileManagerHandles() { return std::make_tuple(std::weak_ptr(), std::weak_ptr(), std::weak_ptr()); diff --git a/audio/aidl/default/include/core-impl/Module.h b/audio/aidl/default/include/core-impl/Module.h index c39aa36361..bc5c5781db 100644 --- a/audio/aidl/default/include/core-impl/Module.h +++ b/audio/aidl/default/include/core-impl/Module.h @@ -32,7 +32,6 @@ namespace aidl::android::hardware::audio::core { class Module : public BnModule { public: struct Configuration { - std::vector<::aidl::android::media::audio::common::MicrophoneInfo> microphones; std::vector<::aidl::android::media::audio::common::AudioPort> ports; std::vector<::aidl::android::media::audio::common::AudioPortConfig> portConfigs; std::vector<::aidl::android::media::audio::common::AudioPortConfig> initialConfigs; @@ -207,6 +206,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::vector<::aidl::android::media::audio::common::MicrophoneInfo> getMicrophoneInfos(); virtual std::unique_ptr initializeConfig(); // Utility and helper functions accessible to subclasses.