mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 16:09:42 +00:00
audio: Accept I/O handle for mix ports from the client
The client can pass the I/O handle to the HAL as part of the requested audio port config. The HAL can store that handle and use it as a cookie to match the port config with other HALs (for example, SoundTrigger). Updated behavior of IModule.setAudioPortConfig to copy the handle for mix ports, and pass it back with the applied config. Enforced this behavior in VTS. Bug: 269551518 Test: atest VtsHalAudioCoreTargetTest Change-Id: Ibc3f9eea4169610f1680937c764de42b4fe5194a
This commit is contained in:
@@ -895,6 +895,21 @@ ndk::ScopedAStatus Module::setAudioPortConfig(const AudioPortConfig& in_requeste
|
||||
out_suggested->gain = in_requested.gain.value();
|
||||
}
|
||||
|
||||
if (in_requested.ext.getTag() != AudioPortExt::Tag::unspecified) {
|
||||
if (in_requested.ext.getTag() == out_suggested->ext.getTag()) {
|
||||
if (out_suggested->ext.getTag() == AudioPortExt::Tag::mix) {
|
||||
// 'AudioMixPortExt.handle' is set by the client, copy from in_requested
|
||||
out_suggested->ext.get<AudioPortExt::Tag::mix>().handle =
|
||||
in_requested.ext.get<AudioPortExt::Tag::mix>().handle;
|
||||
}
|
||||
} else {
|
||||
LOG(WARNING) << __func__ << ": requested ext tag "
|
||||
<< toString(in_requested.ext.getTag()) << " do not match port's tag "
|
||||
<< toString(out_suggested->ext.getTag());
|
||||
requestedIsValid = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (existing == configs.end() && requestedIsValid && requestedIsFullySpecified) {
|
||||
out_suggested->id = getConfig().nextPortId++;
|
||||
configs.push_back(*out_suggested);
|
||||
|
||||
@@ -88,6 +88,7 @@ using aidl::android::media::audio::common::AudioPort;
|
||||
using aidl::android::media::audio::common::AudioPortConfig;
|
||||
using aidl::android::media::audio::common::AudioPortDeviceExt;
|
||||
using aidl::android::media::audio::common::AudioPortExt;
|
||||
using aidl::android::media::audio::common::AudioPortMixExt;
|
||||
using aidl::android::media::audio::common::AudioSource;
|
||||
using aidl::android::media::audio::common::AudioUsage;
|
||||
using aidl::android::media::audio::common::Boolean;
|
||||
@@ -1524,6 +1525,8 @@ TEST_P(AudioCoreModule, SetAudioPortConfigSuggestedConfig) {
|
||||
AudioPortConfig portConfig;
|
||||
AudioPortConfig suggestedConfig;
|
||||
portConfig.portId = srcMixPort.value().id;
|
||||
const int32_t kIoHandle = 42;
|
||||
portConfig.ext = AudioPortMixExt{.handle = kIoHandle};
|
||||
{
|
||||
bool applied = true;
|
||||
ASSERT_IS_OK(module->setAudioPortConfig(portConfig, &suggestedConfig, &applied))
|
||||
@@ -1535,18 +1538,22 @@ TEST_P(AudioCoreModule, SetAudioPortConfigSuggestedConfig) {
|
||||
EXPECT_TRUE(suggestedConfig.channelMask.has_value());
|
||||
EXPECT_TRUE(suggestedConfig.format.has_value());
|
||||
EXPECT_TRUE(suggestedConfig.flags.has_value());
|
||||
ASSERT_EQ(AudioPortExt::Tag::mix, suggestedConfig.ext.getTag());
|
||||
EXPECT_EQ(kIoHandle, suggestedConfig.ext.get<AudioPortExt::Tag::mix>().handle);
|
||||
WithAudioPortConfig applied(suggestedConfig);
|
||||
ASSERT_NO_FATAL_FAILURE(applied.SetUp(module.get()));
|
||||
const AudioPortConfig& appliedConfig = applied.get();
|
||||
EXPECT_NE(0, appliedConfig.id);
|
||||
EXPECT_TRUE(appliedConfig.sampleRate.has_value());
|
||||
ASSERT_TRUE(appliedConfig.sampleRate.has_value());
|
||||
EXPECT_EQ(suggestedConfig.sampleRate.value(), appliedConfig.sampleRate.value());
|
||||
EXPECT_TRUE(appliedConfig.channelMask.has_value());
|
||||
ASSERT_TRUE(appliedConfig.channelMask.has_value());
|
||||
EXPECT_EQ(suggestedConfig.channelMask.value(), appliedConfig.channelMask.value());
|
||||
EXPECT_TRUE(appliedConfig.format.has_value());
|
||||
ASSERT_TRUE(appliedConfig.format.has_value());
|
||||
EXPECT_EQ(suggestedConfig.format.value(), appliedConfig.format.value());
|
||||
EXPECT_TRUE(appliedConfig.flags.has_value());
|
||||
ASSERT_TRUE(appliedConfig.flags.has_value());
|
||||
EXPECT_EQ(suggestedConfig.flags.value(), appliedConfig.flags.value());
|
||||
ASSERT_EQ(AudioPortExt::Tag::mix, appliedConfig.ext.getTag());
|
||||
EXPECT_EQ(kIoHandle, appliedConfig.ext.get<AudioPortExt::Tag::mix>().handle);
|
||||
}
|
||||
|
||||
TEST_P(AudioCoreModule, SetAllAttachedDevicePortConfigs) {
|
||||
|
||||
Reference in New Issue
Block a user