Adding IAudioControl#onDevicesToDuckChange
Introducing new API and parcelable for informing the HAL when to duck audio for automotive targets. Bug: 158242859 Test: atest VtsAidlHalAudioControlTest Change-Id: I5799c556e338d768ea8010e1f035af8584a240dd
This commit is contained in:
parent
8232909524
commit
ad81670318
7 changed files with 134 additions and 0 deletions
|
@ -0,0 +1,25 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
|
||||
// edit this file. It looks like you are doing that because you have modified
|
||||
// an AIDL interface in a backward-incompatible way, e.g., deleting a function
|
||||
// from an interface or a field from a parcelable and it broke the build. That
|
||||
// breakage is intended.
|
||||
//
|
||||
// You must not make a backward incompatible changes to the AIDL files built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.automotive.audiocontrol;
|
||||
@VintfStability
|
||||
parcelable DuckingInfo {
|
||||
int zoneId;
|
||||
String[] deviceAddressesToDuck;
|
||||
String[] deviceAddressesToUnduck;
|
||||
String[] usagesHoldingFocus;
|
||||
}
|
|
@ -19,6 +19,7 @@ package android.hardware.automotive.audiocontrol;
|
|||
@VintfStability
|
||||
interface IAudioControl {
|
||||
oneway void onAudioFocusChange(in String usage, in int zoneId, in android.hardware.automotive.audiocontrol.AudioFocusChange focusChange);
|
||||
oneway void onDevicesToDuckChange(in android.hardware.automotive.audiocontrol.DuckingInfo[] duckingInfos);
|
||||
oneway void registerFocusListener(in android.hardware.automotive.audiocontrol.IFocusListener listener);
|
||||
oneway void setBalanceTowardRight(in float value);
|
||||
oneway void setFadeTowardFront(in float value);
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.automotive.audiocontrol;
|
||||
|
||||
/**
|
||||
* The current ducking information for a single audio zone.
|
||||
*
|
||||
* <p>This includes devices to duck, as well as unduck based on the contents of a previous
|
||||
* {@link DuckingInfo}. Additionally, the current usages holding focus in the specified zone are
|
||||
* included, which were used to determine which addresses to duck.
|
||||
*/
|
||||
@VintfStability
|
||||
parcelable DuckingInfo {
|
||||
/**
|
||||
* ID of the associated audio zone
|
||||
*/
|
||||
int zoneId;
|
||||
|
||||
/**
|
||||
* List of addresses for audio output devices that should be ducked.
|
||||
*
|
||||
* <p>The provided address strings are defined in audio_policy_configuration.xml.
|
||||
*/
|
||||
String[] deviceAddressesToDuck;
|
||||
|
||||
/**
|
||||
* List of addresses for audio output devices that were previously be ducked and should now be
|
||||
* unducked.
|
||||
*
|
||||
* <p>The provided address strings are defined in audio_policy_configuration.xml.
|
||||
*/
|
||||
String[] deviceAddressesToUnduck;
|
||||
|
||||
/**
|
||||
* List of usages currently holding focus for this audio zone.
|
||||
*
|
||||
* <p> See {@code audioUsage} in audio_policy_configuration.xsd for the list of allowed values.
|
||||
*/
|
||||
String[] usagesHoldingFocus;
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
package android.hardware.automotive.audiocontrol;
|
||||
|
||||
import android.hardware.automotive.audiocontrol.AudioFocusChange;
|
||||
import android.hardware.automotive.audiocontrol.DuckingInfo;
|
||||
import android.hardware.automotive.audiocontrol.IFocusListener;
|
||||
|
||||
/**
|
||||
|
@ -41,6 +42,17 @@ interface IAudioControl {
|
|||
*/
|
||||
oneway void onAudioFocusChange(in String usage, in int zoneId, in AudioFocusChange focusChange);
|
||||
|
||||
/**
|
||||
* Notifies HAL of changes in output devices that the HAL should apply ducking to.
|
||||
*
|
||||
* This will be called in response to changes in audio focus, and will include a
|
||||
* {@link DuckingInfo} object per audio zone that experienced a change in audo focus.
|
||||
*
|
||||
* @param duckingInfos an array of {@link DuckingInfo} objects for the audio zones where audio
|
||||
* focus has changed.
|
||||
*/
|
||||
oneway void onDevicesToDuckChange(in DuckingInfo[] duckingInfos);
|
||||
|
||||
/**
|
||||
* Registers focus listener to be used by HAL for requesting and abandoning audio focus.
|
||||
*
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include "AudioControl.h"
|
||||
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/AudioFocusChange.h>
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/DuckingInfo.h>
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/IFocusListener.h>
|
||||
|
||||
#include <android-base/logging.h>
|
||||
|
@ -102,6 +103,27 @@ ndk::ScopedAStatus AudioControl::onAudioFocusChange(const string& in_usage, int3
|
|||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
ndk::ScopedAStatus AudioControl::onDevicesToDuckChange(
|
||||
const std::vector<DuckingInfo>& in_duckingInfos) {
|
||||
LOG(INFO) << "AudioControl::onDevicesToDuckChange";
|
||||
for (const DuckingInfo& duckingInfo : in_duckingInfos) {
|
||||
LOG(INFO) << "zone: " << duckingInfo.zoneId;
|
||||
LOG(INFO) << "Devices to duck:";
|
||||
for (auto& addressToDuck : duckingInfo.deviceAddressesToDuck) {
|
||||
LOG(INFO) << addressToDuck;
|
||||
}
|
||||
LOG(INFO) << "Devices to unduck:";
|
||||
for (auto& addressToUnduck : duckingInfo.deviceAddressesToUnduck) {
|
||||
LOG(INFO) << addressToUnduck;
|
||||
}
|
||||
LOG(INFO) << "Usages holding focus:";
|
||||
for (auto& usage : duckingInfo.usagesHoldingFocus) {
|
||||
LOG(INFO) << usage;
|
||||
}
|
||||
}
|
||||
return ndk::ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
binder_status_t AudioControl::dump(int fd, const char** args, uint32_t numArgs) {
|
||||
if (numArgs == 0) {
|
||||
return dumpsys(fd);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/AudioFocusChange.h>
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/BnAudioControl.h>
|
||||
#include <aidl/android/hardware/automotive/audiocontrol/DuckingInfo.h>
|
||||
|
||||
namespace aidl::android::hardware::automotive::audiocontrol {
|
||||
|
||||
|
@ -27,6 +28,8 @@ class AudioControl : public BnAudioControl {
|
|||
public:
|
||||
ndk::ScopedAStatus onAudioFocusChange(const std::string& in_usage, int32_t in_zoneId,
|
||||
AudioFocusChange in_focusChange) override;
|
||||
ndk::ScopedAStatus onDevicesToDuckChange(
|
||||
const std::vector<DuckingInfo>& in_duckingInfos) override;
|
||||
ndk::ScopedAStatus registerFocusListener(
|
||||
const shared_ptr<IFocusListener>& in_listener) override;
|
||||
ndk::ScopedAStatus setBalanceTowardRight(float in_value) override;
|
||||
|
|
|
@ -31,6 +31,7 @@ using android::String16;
|
|||
using android::binder::Status;
|
||||
using android::hardware::automotive::audiocontrol::AudioFocusChange;
|
||||
using android::hardware::automotive::audiocontrol::BnFocusListener;
|
||||
using android::hardware::automotive::audiocontrol::DuckingInfo;
|
||||
using android::hardware::automotive::audiocontrol::IAudioControl;
|
||||
|
||||
#include "android_audio_policy_configuration_V7_0.h"
|
||||
|
@ -129,6 +130,22 @@ TEST_P(AudioControlAidl, FocusChangeExercise) {
|
|||
audioControl->onAudioFocusChange(usage, 0, AudioFocusChange::GAIN_TRANSIENT).isOk());
|
||||
};
|
||||
|
||||
TEST_P(AudioControlAidl, DuckChangeExercise) {
|
||||
ALOGI("Duck change test");
|
||||
|
||||
DuckingInfo duckingInfo;
|
||||
duckingInfo.zoneId = 0;
|
||||
duckingInfo.deviceAddressesToDuck = {String16("address 1"), String16("address 2")};
|
||||
duckingInfo.deviceAddressesToUnduck = {String16("address 3"), String16("address 4")};
|
||||
duckingInfo.usagesHoldingFocus = {
|
||||
String16(xsd::toString(xsd::AudioUsage::AUDIO_USAGE_MEDIA).c_str()),
|
||||
String16(xsd::toString(xsd::AudioUsage::AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE)
|
||||
.c_str())};
|
||||
std::vector<DuckingInfo> duckingInfos = {duckingInfo};
|
||||
ALOGI("Duck change test start");
|
||||
ASSERT_TRUE(audioControl->onDevicesToDuckChange(duckingInfos).isOk());
|
||||
}
|
||||
|
||||
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(AudioControlAidl);
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
Audiocontrol, AudioControlAidl,
|
||||
|
|
Loading…
Reference in a new issue