From 0ba91e57597930500b4e563c899e76a497e0f70f Mon Sep 17 00:00:00 2001 From: Lorena Torres-Huerta Date: Wed, 5 Oct 2022 21:56:42 +0000 Subject: [PATCH] Add surround sound configuration to the AIDL Audio HAL interface. Bug: 205884982 Test: m android.hardware.audio.service-aidl.example Change-Id: Ie8c69c6f0437ba6527c28f525eb06d1e338e3abc --- audio/aidl/Android.bp | 1 + .../android/hardware/audio/core/IConfig.aidl | 1 + .../audio/core/SurroundSoundConfig.aidl | 43 ++++++++++++++++++ .../android/hardware/audio/core/IConfig.aidl | 15 ++++++- .../audio/core/SurroundSoundConfig.aidl | 45 +++++++++++++++++++ audio/aidl/default/Config.cpp | 12 ++++- audio/aidl/default/include/core-impl/Config.h | 4 +- 7 files changed, 118 insertions(+), 3 deletions(-) create mode 100644 audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/SurroundSoundConfig.aidl create mode 100644 audio/aidl/android/hardware/audio/core/SurroundSoundConfig.aidl diff --git a/audio/aidl/Android.bp b/audio/aidl/Android.bp index d6e6f50ae9..4871058ba9 100644 --- a/audio/aidl/Android.bp +++ b/audio/aidl/Android.bp @@ -100,6 +100,7 @@ aidl_interface { "android/hardware/audio/core/MmapBufferDescriptor.aidl", "android/hardware/audio/core/ModuleDebug.aidl", "android/hardware/audio/core/StreamDescriptor.aidl", + "android/hardware/audio/core/SurroundSoundConfig.aidl", ], imports: [ "android.hardware.common-V2", diff --git a/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/IConfig.aidl b/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/IConfig.aidl index fd80715064..163b7a0893 100644 --- a/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/IConfig.aidl +++ b/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/IConfig.aidl @@ -34,4 +34,5 @@ package android.hardware.audio.core; @VintfStability interface IConfig { + android.hardware.audio.core.SurroundSoundConfig getSurroundSoundConfig(); } diff --git a/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/SurroundSoundConfig.aidl b/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/SurroundSoundConfig.aidl new file mode 100644 index 0000000000..08a153778f --- /dev/null +++ b/audio/aidl/aidl_api/android.hardware.audio.core/current/android/hardware/audio/core/SurroundSoundConfig.aidl @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2022 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. + */ +/////////////////////////////////////////////////////////////////////////////// +// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. // +/////////////////////////////////////////////////////////////////////////////// + +// This file is a snapshot of an AIDL file. Do not edit it manually. There are +// two cases: +// 1). this is a frozen version file - do not edit this in any case. +// 2). this is a 'current' file. If you make a backwards compatible change to +// the interface (from the latest frozen version), the build system will +// prompt you to update this file with `m -update-api`. +// +// You must not make a backward incompatible change to any AIDL file 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.audio.core; +@JavaDerive(equals=true, toString=true) @VintfStability +parcelable SurroundSoundConfig { + android.hardware.audio.core.SurroundSoundConfig.SurroundFormatFamily[] formatFamilies; + @VintfStability + parcelable SurroundFormatFamily { + android.media.audio.common.AudioFormatDescription primaryFormat; + android.media.audio.common.AudioFormatDescription[] subFormats; + } +} diff --git a/audio/aidl/android/hardware/audio/core/IConfig.aidl b/audio/aidl/android/hardware/audio/core/IConfig.aidl index c7bb414e86..c8ba6be1f9 100644 --- a/audio/aidl/android/hardware/audio/core/IConfig.aidl +++ b/audio/aidl/android/hardware/audio/core/IConfig.aidl @@ -16,9 +16,22 @@ package android.hardware.audio.core; +import android.hardware.audio.core.SurroundSoundConfig; + /** * This interface provides system-wide configuration parameters for audio I/O * (by "system" here we mean the device running Android). */ @VintfStability -interface IConfig {} +interface IConfig { + /** + * Returns the surround sound configuration used for the Audio Policy + * Manager initial configuration. + * + * This method will only be called during the initialization of the Audio + * Policy Manager, and must always return the same result. + * + * @return The surround sound configuration + */ + SurroundSoundConfig getSurroundSoundConfig(); +} diff --git a/audio/aidl/android/hardware/audio/core/SurroundSoundConfig.aidl b/audio/aidl/android/hardware/audio/core/SurroundSoundConfig.aidl new file mode 100644 index 0000000000..eeda12a881 --- /dev/null +++ b/audio/aidl/android/hardware/audio/core/SurroundSoundConfig.aidl @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2022 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.audio.core; + +import android.media.audio.common.AudioFormatDescription; + +/** + * SurroundSoundConfig defines the multi-channel formats that can be enabled on + * (primarily TV) devices. + */ +@JavaDerive(equals=true, toString=true) +@VintfStability +parcelable SurroundSoundConfig { + @VintfStability + parcelable SurroundFormatFamily { + /** + * A primaryFormat shall get an entry in the Surround Settings dialog on TV + * devices. There must be a corresponding Java ENCODING_... constant + * defined in AudioFormat.java, and a display name defined in + * AudioFormat.toDisplayName. + */ + AudioFormatDescription primaryFormat; + /** + * List of formats that shall be equivalent to the primaryFormat from the + * users' point of view and don't need a dedicated Surround Settings + * dialog entry. + */ + AudioFormatDescription[] subFormats; + } + SurroundFormatFamily[] formatFamilies; +} diff --git a/audio/aidl/default/Config.cpp b/audio/aidl/default/Config.cpp index 3f7a3d3e6f..0fdd5b4eac 100644 --- a/audio/aidl/default/Config.cpp +++ b/audio/aidl/default/Config.cpp @@ -13,7 +13,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#define LOG_TAG "AHAL_Module" +#include #include "core-impl/Config.h" -namespace aidl::android::hardware::audio::core {} // namespace aidl::android::hardware::audio::core +namespace aidl::android::hardware::audio::core { +ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) { + SurroundSoundConfig surroundSoundConfig; + // TODO: parse from XML; for now, use empty config as default + *_aidl_return = std::move(surroundSoundConfig); + LOG(DEBUG) << __func__ << ": returning " << _aidl_return->toString(); + return ndk::ScopedAStatus::ok(); +} +} // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/include/core-impl/Config.h b/audio/aidl/default/include/core-impl/Config.h index b62a14be4d..4555efd557 100644 --- a/audio/aidl/default/include/core-impl/Config.h +++ b/audio/aidl/default/include/core-impl/Config.h @@ -20,6 +20,8 @@ namespace aidl::android::hardware::audio::core { -class Config : public BnConfig {}; +class Config : public BnConfig { + ndk::ScopedAStatus getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) override; +}; } // namespace aidl::android::hardware::audio::core