From db11b2db44c36900692e49aaeebd93fd647633e4 Mon Sep 17 00:00:00 2001 From: Lorena Torres-Huerta Date: Fri, 19 Aug 2022 02:58:59 +0000 Subject: [PATCH 1/2] Add engine configuration to the AIDL Audio HAL interface. Bug: 242678729 Test: m Change-Id: I9f02399f6b63dca6d7a4c1a848fada0784e18b1d --- .../android/hardware/audio/core/IConfig.aidl | 1 + .../android/hardware/audio/core/IConfig.aidl | 16 ++++++++++++++++ audio/aidl/default/Config.cpp | 11 +++++++++++ audio/aidl/default/include/core-impl/Config.h | 2 ++ 4 files changed, 30 insertions(+) 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 163b7a0893..9ce45bb652 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 @@ -35,4 +35,5 @@ package android.hardware.audio.core; @VintfStability interface IConfig { android.hardware.audio.core.SurroundSoundConfig getSurroundSoundConfig(); + android.media.audio.common.AudioHalEngineConfig getEngineConfig(); } diff --git a/audio/aidl/android/hardware/audio/core/IConfig.aidl b/audio/aidl/android/hardware/audio/core/IConfig.aidl index c8ba6be1f9..094d23368e 100644 --- a/audio/aidl/android/hardware/audio/core/IConfig.aidl +++ b/audio/aidl/android/hardware/audio/core/IConfig.aidl @@ -17,6 +17,7 @@ package android.hardware.audio.core; import android.hardware.audio.core.SurroundSoundConfig; +import android.media.audio.common.AudioHalEngineConfig; /** * This interface provides system-wide configuration parameters for audio I/O @@ -34,4 +35,19 @@ interface IConfig { * @return The surround sound configuration */ SurroundSoundConfig getSurroundSoundConfig(); + /** + * Returns the configuration items used to determine the audio policy engine + * flavor and initial configuration. + * + * Engine flavor is determined by presence of capSpecificConfig, which must + * only be present if the device uses the Configurable Audio Policy (CAP) + * engine. Clients normally use the default audio policy engine. The client + * will use the CAP engine only when capSpecificConfig has a non-null value. + * + * This method is expected to only be called during the initialization of + * the audio policy engine, and must always return the same result. + * + * @return The engine configuration + */ + AudioHalEngineConfig getEngineConfig(); } diff --git a/audio/aidl/default/Config.cpp b/audio/aidl/default/Config.cpp index 0fdd5b4eac..7aa4afe884 100644 --- a/audio/aidl/default/Config.cpp +++ b/audio/aidl/default/Config.cpp @@ -13,11 +13,14 @@ * 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" +using aidl::android::media::audio::common::AudioHalEngineConfig; + namespace aidl::android::hardware::audio::core { ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) { SurroundSoundConfig surroundSoundConfig; @@ -26,4 +29,12 @@ ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_ret LOG(DEBUG) << __func__ << ": returning " << _aidl_return->toString(); return ndk::ScopedAStatus::ok(); } + +ndk::ScopedAStatus Config::getEngineConfig(AudioHalEngineConfig* _aidl_return) { + AudioHalEngineConfig engineConfig; + // TODO: parse from XML; for now, use empty config as default + *_aidl_return = std::move(engineConfig); + 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 4555efd557..91fa68c847 100644 --- a/audio/aidl/default/include/core-impl/Config.h +++ b/audio/aidl/default/include/core-impl/Config.h @@ -22,6 +22,8 @@ namespace aidl::android::hardware::audio::core { class Config : public BnConfig { ndk::ScopedAStatus getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) override; + ndk::ScopedAStatus getEngineConfig( + aidl::android::media::audio::common::AudioHalEngineConfig* _aidl_return) override; }; } // namespace aidl::android::hardware::audio::core From bc585bd9869039885cc435f96fdbfefd6dce39c3 Mon Sep 17 00:00:00 2001 From: Lorena Torres-Huerta Date: Sun, 23 Oct 2022 20:41:35 +0000 Subject: [PATCH 2/2] Default implementation for IConfig engine configuration. Added XML to AIDL conversion classes that support audio_policy_engine_configuration and audio_policy_configuration schemas. CTS-Coverage-Bug: 261509055 Bug: 242678729 Test: atest VtsHalAudioCoreTargetTest Change-Id: If47932093af45c5289d070d4893cd10e79593e31 --- audio/aidl/default/Android.bp | 17 + .../default/AudioPolicyConfigXmlConverter.cpp | 130 ++++ audio/aidl/default/Config.cpp | 24 +- .../aidl/default/EngineConfigXmlConverter.cpp | 303 +++++++++ .../default/config/audioPolicy/Android.bp | 15 + .../config/audioPolicy/api/current.txt | 607 ++++++++++++++++++ .../config/audioPolicy/api/last_current.txt | 0 .../config/audioPolicy/api/last_removed.txt | 0 .../config/audioPolicy/api/removed.txt | 1 + .../audio_policy_configuration.xsd | 0 .../config/audioPolicy/engine/Android.bp | 15 + .../config/audioPolicy/engine/api/current.txt | 302 +++++++++ .../audioPolicy/engine/api/last_current.txt | 0 .../audioPolicy/engine/api/last_removed.txt | 0 .../config/audioPolicy/engine/api/removed.txt | 1 + .../audio_policy_engine_configuration.xsd | 418 ++++++++++++ .../core-impl/AudioPolicyConfigXmlConverter.h | 64 ++ audio/aidl/default/include/core-impl/Config.h | 9 + .../core-impl/EngineConfigXmlConverter.h | 91 +++ .../default/include/core-impl/XmlConverter.h | 142 ++++ audio/aidl/default/main.cpp | 6 +- 21 files changed, 2138 insertions(+), 7 deletions(-) create mode 100644 audio/aidl/default/AudioPolicyConfigXmlConverter.cpp create mode 100644 audio/aidl/default/EngineConfigXmlConverter.cpp create mode 100644 audio/aidl/default/config/audioPolicy/Android.bp create mode 100644 audio/aidl/default/config/audioPolicy/api/current.txt create mode 100644 audio/aidl/default/config/audioPolicy/api/last_current.txt create mode 100644 audio/aidl/default/config/audioPolicy/api/last_removed.txt create mode 100644 audio/aidl/default/config/audioPolicy/api/removed.txt rename audio/aidl/default/config/{ => audioPolicy}/audio_policy_configuration.xsd (100%) create mode 100644 audio/aidl/default/config/audioPolicy/engine/Android.bp create mode 100644 audio/aidl/default/config/audioPolicy/engine/api/current.txt create mode 100644 audio/aidl/default/config/audioPolicy/engine/api/last_current.txt create mode 100644 audio/aidl/default/config/audioPolicy/engine/api/last_removed.txt create mode 100644 audio/aidl/default/config/audioPolicy/engine/api/removed.txt create mode 100644 audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd create mode 100644 audio/aidl/default/include/core-impl/AudioPolicyConfigXmlConverter.h create mode 100644 audio/aidl/default/include/core-impl/EngineConfigXmlConverter.h create mode 100644 audio/aidl/default/include/core-impl/XmlConverter.h diff --git a/audio/aidl/default/Android.bp b/audio/aidl/default/Android.bp index 2b9ed5bab0..f2cebbfe73 100644 --- a/audio/aidl/default/Android.bp +++ b/audio/aidl/default/Android.bp @@ -18,11 +18,14 @@ cc_defaults { "libfmq", "libstagefright_foundation", "libutils", + "libxml2", "android.hardware.common-V2-ndk", "android.hardware.common.fmq-V1-ndk", ], header_libs: [ + "libaudio_system_headers", "libaudioaidl_headers", + "libxsdc-utils", ], } @@ -35,12 +38,26 @@ cc_library_static { ], export_include_dirs: ["include"], srcs: [ + "AudioPolicyConfigXmlConverter.cpp", "Config.cpp", "Configuration.cpp", + "EngineConfigXmlConverter.cpp", "Module.cpp", "Stream.cpp", "Telephony.cpp", ], + generated_sources: [ + "audio_policy_configuration_aidl_default", + "audio_policy_engine_configuration_aidl_default", + ], + generated_headers: [ + "audio_policy_configuration_aidl_default", + "audio_policy_engine_configuration_aidl_default", + ], + export_generated_headers: [ + "audio_policy_configuration_aidl_default", + "audio_policy_engine_configuration_aidl_default", + ], visibility: [ ":__subpackages__", ], diff --git a/audio/aidl/default/AudioPolicyConfigXmlConverter.cpp b/audio/aidl/default/AudioPolicyConfigXmlConverter.cpp new file mode 100644 index 0000000000..6290912774 --- /dev/null +++ b/audio/aidl/default/AudioPolicyConfigXmlConverter.cpp @@ -0,0 +1,130 @@ +/* + * 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. + */ + +#include +#include +#include + +#include +#include + +#include +#include + +#include "core-impl/AudioPolicyConfigXmlConverter.h" + +using aidl::android::media::audio::common::AudioHalEngineConfig; +using aidl::android::media::audio::common::AudioHalVolumeCurve; +using aidl::android::media::audio::common::AudioHalVolumeGroup; +using aidl::android::media::audio::common::AudioStreamType; + +namespace xsd = android::audio::policy::configuration; + +namespace aidl::android::hardware::audio::core::internal { + +static const int kDefaultVolumeIndexMin = 0; +static const int kDefaultVolumeIndexMax = 100; +static const int KVolumeIndexDeferredToAudioService = -1; +/** + * Valid curve points take the form ",", where the index + * must be in the range [0,100]. kInvalidCurvePointIndex is used to indicate + * that a point was formatted incorrectly (e.g. if a vendor accidentally typed a + * '.' instead of a ',' in their XML) -- using such a curve point will result in + * failed VTS tests. + */ +static const int8_t kInvalidCurvePointIndex = -1; + +AudioHalVolumeCurve::CurvePoint AudioPolicyConfigXmlConverter::convertCurvePointToAidl( + const std::string& xsdcCurvePoint) { + AudioHalVolumeCurve::CurvePoint aidlCurvePoint{}; + if (sscanf(xsdcCurvePoint.c_str(), "%" SCNd8 ",%d", &aidlCurvePoint.index, + &aidlCurvePoint.attenuationMb) != 2) { + aidlCurvePoint.index = kInvalidCurvePointIndex; + } + return aidlCurvePoint; +} + +AudioHalVolumeCurve AudioPolicyConfigXmlConverter::convertVolumeCurveToAidl( + const xsd::Volume& xsdcVolumeCurve) { + AudioHalVolumeCurve aidlVolumeCurve; + aidlVolumeCurve.deviceCategory = + static_cast(xsdcVolumeCurve.getDeviceCategory()); + if (xsdcVolumeCurve.hasRef()) { + if (mVolumesReferenceMap.empty()) { + mVolumesReferenceMap = generateReferenceMap( + getXsdcConfig()->getVolumes()); + } + aidlVolumeCurve.curvePoints = + convertCollectionToAidl( + mVolumesReferenceMap.at(xsdcVolumeCurve.getRef()).getPoint(), + std::bind(&AudioPolicyConfigXmlConverter::convertCurvePointToAidl, this, + std::placeholders::_1)); + } else { + aidlVolumeCurve.curvePoints = + convertCollectionToAidl( + xsdcVolumeCurve.getPoint(), + std::bind(&AudioPolicyConfigXmlConverter::convertCurvePointToAidl, this, + std::placeholders::_1)); + } + return aidlVolumeCurve; +} + +void AudioPolicyConfigXmlConverter::mapStreamToVolumeCurve(const xsd::Volume& xsdcVolumeCurve) { + mStreamToVolumeCurvesMap[xsdcVolumeCurve.getStream()].push_back( + convertVolumeCurveToAidl(xsdcVolumeCurve)); +} + +const AudioHalEngineConfig& AudioPolicyConfigXmlConverter::getAidlEngineConfig() { + if (mAidlEngineConfig.volumeGroups.empty() && getXsdcConfig() && + getXsdcConfig()->hasVolumes()) { + parseVolumes(); + } + return mAidlEngineConfig; +} + +void AudioPolicyConfigXmlConverter::mapStreamsToVolumeCurves() { + if (getXsdcConfig()->hasVolumes()) { + for (const xsd::Volumes& xsdcWrapperType : getXsdcConfig()->getVolumes()) { + for (const xsd::Volume& xsdcVolume : xsdcWrapperType.getVolume()) { + mapStreamToVolumeCurve(xsdcVolume); + } + } + } +} + +void AudioPolicyConfigXmlConverter::addVolumeGroupstoEngineConfig() { + for (const auto& [xsdcStream, volumeCurves] : mStreamToVolumeCurvesMap) { + AudioHalVolumeGroup volumeGroup; + volumeGroup.name = xsd::toString(xsdcStream); + if (static_cast(xsdcStream) >= AUDIO_STREAM_PUBLIC_CNT) { + volumeGroup.minIndex = kDefaultVolumeIndexMin; + volumeGroup.maxIndex = kDefaultVolumeIndexMax; + } else { + volumeGroup.minIndex = KVolumeIndexDeferredToAudioService; + volumeGroup.maxIndex = KVolumeIndexDeferredToAudioService; + } + volumeGroup.volumeCurves = volumeCurves; + mAidlEngineConfig.volumeGroups.push_back(std::move(volumeGroup)); + } +} + +void AudioPolicyConfigXmlConverter::parseVolumes() { + if (mStreamToVolumeCurvesMap.empty() && getXsdcConfig()->hasVolumes()) { + mapStreamsToVolumeCurves(); + addVolumeGroupstoEngineConfig(); + } +} +} // namespace aidl::android::hardware::audio::core::internal diff --git a/audio/aidl/default/Config.cpp b/audio/aidl/default/Config.cpp index 7aa4afe884..87c0ace6d2 100644 --- a/audio/aidl/default/Config.cpp +++ b/audio/aidl/default/Config.cpp @@ -14,10 +14,14 @@ * limitations under the License. */ -#define LOG_TAG "AHAL_Module" +#define LOG_TAG "AHAL_Config" #include +#include + +#include "core-impl/AudioPolicyConfigXmlConverter.h" #include "core-impl/Config.h" +#include "core-impl/EngineConfigXmlConverter.h" using aidl::android::media::audio::common::AudioHalEngineConfig; @@ -31,9 +35,21 @@ ndk::ScopedAStatus Config::getSurroundSoundConfig(SurroundSoundConfig* _aidl_ret } ndk::ScopedAStatus Config::getEngineConfig(AudioHalEngineConfig* _aidl_return) { - AudioHalEngineConfig engineConfig; - // TODO: parse from XML; for now, use empty config as default - *_aidl_return = std::move(engineConfig); + static const AudioHalEngineConfig returnEngCfg = [this]() { + AudioHalEngineConfig engConfig; + if (mEngConfigConverter.getStatus() == ::android::OK) { + engConfig = mEngConfigConverter.getAidlEngineConfig(); + } else { + LOG(INFO) << __func__ << mEngConfigConverter.getError(); + if (mAudioPolicyConverter.getStatus() == ::android::OK) { + engConfig = mAudioPolicyConverter.getAidlEngineConfig(); + } else { + LOG(WARNING) << __func__ << mAudioPolicyConverter.getError(); + } + } + return engConfig; + }(); + *_aidl_return = returnEngCfg; LOG(DEBUG) << __func__ << ": returning " << _aidl_return->toString(); return ndk::ScopedAStatus::ok(); } diff --git a/audio/aidl/default/EngineConfigXmlConverter.cpp b/audio/aidl/default/EngineConfigXmlConverter.cpp new file mode 100644 index 0000000000..71b4b0eb60 --- /dev/null +++ b/audio/aidl/default/EngineConfigXmlConverter.cpp @@ -0,0 +1,303 @@ +/* + * 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. + */ + +#include +#include +#include +#include +#include + +#include + +#include "core-impl/EngineConfigXmlConverter.h" + +using aidl::android::media::audio::common::AudioAttributes; +using aidl::android::media::audio::common::AudioContentType; +using aidl::android::media::audio::common::AudioFlag; +using aidl::android::media::audio::common::AudioHalAttributesGroup; +using aidl::android::media::audio::common::AudioHalCapCriterion; +using aidl::android::media::audio::common::AudioHalCapCriterionType; +using aidl::android::media::audio::common::AudioHalEngineConfig; +using aidl::android::media::audio::common::AudioHalProductStrategy; +using aidl::android::media::audio::common::AudioHalVolumeCurve; +using aidl::android::media::audio::common::AudioHalVolumeGroup; +using aidl::android::media::audio::common::AudioProductStrategyType; +using aidl::android::media::audio::common::AudioSource; +using aidl::android::media::audio::common::AudioStreamType; +using aidl::android::media::audio::common::AudioUsage; + +namespace xsd = android::audio::policy::engine::configuration; + +namespace aidl::android::hardware::audio::core::internal { + +/** + * Valid curve points take the form ",", where the index + * must be in the range [0,100]. kInvalidCurvePointIndex is used to indicate + * that a point was formatted incorrectly (e.g. if a vendor accidentally typed a + * '.' instead of a ',' in their XML)-- using such a curve point will result in + * failed VTS tests. + */ +static const int8_t kInvalidCurvePointIndex = -1; + +void EngineConfigXmlConverter::initProductStrategyMap() { +#define STRATEGY_ENTRY(name) {"STRATEGY_" #name, static_cast(AudioProductStrategyType::name)} + + mProductStrategyMap = {STRATEGY_ENTRY(MEDIA), + STRATEGY_ENTRY(PHONE), + STRATEGY_ENTRY(SONIFICATION), + STRATEGY_ENTRY(SONIFICATION_RESPECTFUL), + STRATEGY_ENTRY(DTMF), + STRATEGY_ENTRY(ENFORCED_AUDIBLE), + STRATEGY_ENTRY(TRANSMITTED_THROUGH_SPEAKER), + STRATEGY_ENTRY(ACCESSIBILITY)}; +#undef STRATEGY_ENTRY +} + +int EngineConfigXmlConverter::convertProductStrategyNameToAidl( + const std::string& xsdcProductStrategyName) { + const auto [it, success] = mProductStrategyMap.insert( + std::make_pair(xsdcProductStrategyName, mNextVendorStrategy)); + if (success) { + mNextVendorStrategy++; + } + return it->second; +} + +bool isDefaultAudioAttributes(const AudioAttributes& attributes) { + return ((attributes.contentType == AudioContentType::UNKNOWN) && + (attributes.usage == AudioUsage::UNKNOWN) && + (attributes.source == AudioSource::DEFAULT) && (attributes.flags == 0) && + (attributes.tags.empty())); +} + +AudioAttributes EngineConfigXmlConverter::convertAudioAttributesToAidl( + const xsd::AttributesType& xsdcAudioAttributes) { + if (xsdcAudioAttributes.hasAttributesRef()) { + if (mAttributesReferenceMap.empty()) { + mAttributesReferenceMap = + generateReferenceMap( + getXsdcConfig()->getAttributesRef()); + } + return convertAudioAttributesToAidl( + *(mAttributesReferenceMap.at(xsdcAudioAttributes.getAttributesRef()) + .getFirstAttributes())); + } + AudioAttributes aidlAudioAttributes; + if (xsdcAudioAttributes.hasContentType()) { + aidlAudioAttributes.contentType = static_cast( + xsdcAudioAttributes.getFirstContentType()->getValue()); + } + if (xsdcAudioAttributes.hasUsage()) { + aidlAudioAttributes.usage = + static_cast(xsdcAudioAttributes.getFirstUsage()->getValue()); + } + if (xsdcAudioAttributes.hasSource()) { + aidlAudioAttributes.source = + static_cast(xsdcAudioAttributes.getFirstSource()->getValue()); + } + if (xsdcAudioAttributes.hasFlags()) { + std::vector xsdcFlagTypeVec = + xsdcAudioAttributes.getFirstFlags()->getValue(); + for (const xsd::FlagType& xsdcFlagType : xsdcFlagTypeVec) { + if (xsdcFlagType != xsd::FlagType::AUDIO_FLAG_NONE) { + aidlAudioAttributes.flags |= 1 << (static_cast(xsdcFlagType) - 1); + } + } + } + if (xsdcAudioAttributes.hasBundle()) { + const xsd::BundleType* xsdcBundle = xsdcAudioAttributes.getFirstBundle(); + aidlAudioAttributes.tags[0] = xsdcBundle->getKey() + "=" + xsdcBundle->getValue(); + } + if (isDefaultAudioAttributes(aidlAudioAttributes)) { + mDefaultProductStrategyId = std::optional{-1}; + } + return aidlAudioAttributes; +} + +AudioHalAttributesGroup EngineConfigXmlConverter::convertAttributesGroupToAidl( + const xsd::AttributesGroup& xsdcAttributesGroup) { + AudioHalAttributesGroup aidlAttributesGroup; + static const int kStreamTypeEnumOffset = + static_cast(xsd::Stream::AUDIO_STREAM_VOICE_CALL) - + static_cast(AudioStreamType::VOICE_CALL); + aidlAttributesGroup.streamType = static_cast( + static_cast(xsdcAttributesGroup.getStreamType()) - kStreamTypeEnumOffset); + aidlAttributesGroup.volumeGroupName = xsdcAttributesGroup.getVolumeGroup(); + if (xsdcAttributesGroup.hasAttributes_optional()) { + aidlAttributesGroup.attributes = + convertCollectionToAidl( + xsdcAttributesGroup.getAttributes_optional(), + std::bind(&EngineConfigXmlConverter::convertAudioAttributesToAidl, this, + std::placeholders::_1)); + } else if (xsdcAttributesGroup.hasContentType_optional() || + xsdcAttributesGroup.hasUsage_optional() || + xsdcAttributesGroup.hasSource_optional() || + xsdcAttributesGroup.hasFlags_optional() || + xsdcAttributesGroup.hasBundle_optional()) { + aidlAttributesGroup.attributes.push_back(convertAudioAttributesToAidl(xsd::AttributesType( + xsdcAttributesGroup.getContentType_optional(), + xsdcAttributesGroup.getUsage_optional(), xsdcAttributesGroup.getSource_optional(), + xsdcAttributesGroup.getFlags_optional(), xsdcAttributesGroup.getBundle_optional(), + std::nullopt))); + + } else { + // do nothing; + // TODO: check if this is valid or if we should treat as an error. + // Currently, attributes are not mandatory in schema, but an AttributesGroup + // without attributes does not make much sense. + } + return aidlAttributesGroup; +} + +AudioHalProductStrategy EngineConfigXmlConverter::convertProductStrategyToAidl( + const xsd::ProductStrategies::ProductStrategy& xsdcProductStrategy) { + AudioHalProductStrategy aidlProductStrategy; + + aidlProductStrategy.id = convertProductStrategyNameToAidl(xsdcProductStrategy.getName()); + + if (xsdcProductStrategy.hasAttributesGroup()) { + aidlProductStrategy.attributesGroups = + convertCollectionToAidl( + xsdcProductStrategy.getAttributesGroup(), + std::bind(&EngineConfigXmlConverter::convertAttributesGroupToAidl, this, + std::placeholders::_1)); + } + if ((mDefaultProductStrategyId != std::nullopt) && (mDefaultProductStrategyId.value() == -1)) { + mDefaultProductStrategyId = aidlProductStrategy.id; + } + return aidlProductStrategy; +} + +AudioHalVolumeCurve::CurvePoint EngineConfigXmlConverter::convertCurvePointToAidl( + const std::string& xsdcCurvePoint) { + AudioHalVolumeCurve::CurvePoint aidlCurvePoint{}; + if (sscanf(xsdcCurvePoint.c_str(), "%" SCNd8 ",%d", &aidlCurvePoint.index, + &aidlCurvePoint.attenuationMb) != 2) { + aidlCurvePoint.index = kInvalidCurvePointIndex; + } + return aidlCurvePoint; +} + +AudioHalVolumeCurve EngineConfigXmlConverter::convertVolumeCurveToAidl( + const xsd::Volume& xsdcVolumeCurve) { + AudioHalVolumeCurve aidlVolumeCurve; + aidlVolumeCurve.deviceCategory = + static_cast(xsdcVolumeCurve.getDeviceCategory()); + if (xsdcVolumeCurve.hasRef()) { + if (mVolumesReferenceMap.empty()) { + mVolumesReferenceMap = generateReferenceMap( + getXsdcConfig()->getVolumes()); + } + aidlVolumeCurve.curvePoints = + convertCollectionToAidl( + mVolumesReferenceMap.at(xsdcVolumeCurve.getRef()).getPoint(), + std::bind(&EngineConfigXmlConverter::convertCurvePointToAidl, this, + std::placeholders::_1)); + } else { + aidlVolumeCurve.curvePoints = + convertCollectionToAidl( + xsdcVolumeCurve.getPoint(), + std::bind(&EngineConfigXmlConverter::convertCurvePointToAidl, this, + std::placeholders::_1)); + } + return aidlVolumeCurve; +} + +AudioHalVolumeGroup EngineConfigXmlConverter::convertVolumeGroupToAidl( + const xsd::VolumeGroupsType::VolumeGroup& xsdcVolumeGroup) { + AudioHalVolumeGroup aidlVolumeGroup; + aidlVolumeGroup.name = xsdcVolumeGroup.getName(); + aidlVolumeGroup.minIndex = xsdcVolumeGroup.getIndexMin(); + aidlVolumeGroup.maxIndex = xsdcVolumeGroup.getIndexMax(); + aidlVolumeGroup.volumeCurves = convertCollectionToAidl( + xsdcVolumeGroup.getVolume(), + std::bind(&EngineConfigXmlConverter::convertVolumeCurveToAidl, this, + std::placeholders::_1)); + return aidlVolumeGroup; +} + +AudioHalCapCriterion EngineConfigXmlConverter::convertCapCriterionToAidl( + const xsd::CriterionType& xsdcCriterion) { + AudioHalCapCriterion aidlCapCriterion; + aidlCapCriterion.name = xsdcCriterion.getName(); + aidlCapCriterion.criterionTypeName = xsdcCriterion.getType(); + aidlCapCriterion.defaultLiteralValue = xsdcCriterion.get_default(); + return aidlCapCriterion; +} + +std::string EngineConfigXmlConverter::convertCriterionTypeValueToAidl( + const xsd::ValueType& xsdcCriterionTypeValue) { + return xsdcCriterionTypeValue.getLiteral(); +} + +AudioHalCapCriterionType EngineConfigXmlConverter::convertCapCriterionTypeToAidl( + const xsd::CriterionTypeType& xsdcCriterionType) { + AudioHalCapCriterionType aidlCapCriterionType; + aidlCapCriterionType.name = xsdcCriterionType.getName(); + aidlCapCriterionType.isInclusive = !(static_cast(xsdcCriterionType.getType())); + aidlCapCriterionType.values = + convertWrappedCollectionToAidl( + xsdcCriterionType.getValues(), &xsd::ValuesType::getValue, + std::bind(&EngineConfigXmlConverter::convertCriterionTypeValueToAidl, this, + std::placeholders::_1)); + return aidlCapCriterionType; +} + +AudioHalEngineConfig& EngineConfigXmlConverter::getAidlEngineConfig() { + return mAidlEngineConfig; +} + +void EngineConfigXmlConverter::init() { + initProductStrategyMap(); + if (getXsdcConfig()->hasProductStrategies()) { + mAidlEngineConfig.productStrategies = + convertWrappedCollectionToAidl( + getXsdcConfig()->getProductStrategies(), + &xsd::ProductStrategies::getProductStrategy, + std::bind(&EngineConfigXmlConverter::convertProductStrategyToAidl, this, + std::placeholders::_1)); + if (mDefaultProductStrategyId) { + mAidlEngineConfig.defaultProductStrategyId = mDefaultProductStrategyId.value(); + } + } + if (getXsdcConfig()->hasVolumeGroups()) { + mAidlEngineConfig.volumeGroups = convertWrappedCollectionToAidl< + xsd::VolumeGroupsType, xsd::VolumeGroupsType::VolumeGroup, AudioHalVolumeGroup>( + getXsdcConfig()->getVolumeGroups(), &xsd::VolumeGroupsType::getVolumeGroup, + std::bind(&EngineConfigXmlConverter::convertVolumeGroupToAidl, this, + std::placeholders::_1)); + } + if (getXsdcConfig()->hasCriteria() && getXsdcConfig()->hasCriterion_types()) { + AudioHalEngineConfig::CapSpecificConfig capSpecificConfig; + capSpecificConfig.criteria = + convertWrappedCollectionToAidl( + getXsdcConfig()->getCriteria(), &xsd::CriteriaType::getCriterion, + std::bind(&EngineConfigXmlConverter::convertCapCriterionToAidl, this, + std::placeholders::_1)); + capSpecificConfig.criterionTypes = + convertWrappedCollectionToAidl( + getXsdcConfig()->getCriterion_types(), + &xsd::CriterionTypesType::getCriterion_type, + std::bind(&EngineConfigXmlConverter::convertCapCriterionTypeToAidl, this, + std::placeholders::_1)); + mAidlEngineConfig.capSpecificConfig = capSpecificConfig; + } +} +} // namespace aidl::android::hardware::audio::core::internal \ No newline at end of file diff --git a/audio/aidl/default/config/audioPolicy/Android.bp b/audio/aidl/default/config/audioPolicy/Android.bp new file mode 100644 index 0000000000..6d8a14819d --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +xsd_config { + name: "audio_policy_configuration_aidl_default", + srcs: ["audio_policy_configuration.xsd"], + package_name: "android.audio.policy.configuration", + nullability: true, +} diff --git a/audio/aidl/default/config/audioPolicy/api/current.txt b/audio/aidl/default/config/audioPolicy/api/current.txt new file mode 100644 index 0000000000..c0ffe70eb8 --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/api/current.txt @@ -0,0 +1,607 @@ +// Signature format: 2.0 +package android.audio.policy.configuration { + + public class AttachedDevices { + ctor public AttachedDevices(); + method @Nullable public java.util.List getItem(); + } + + public enum AudioChannelMask { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_10; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_11; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_12; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_13; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_14; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_15; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_16; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_17; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_18; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_19; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_20; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_21; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_22; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_23; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_24; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_3; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_4; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_5; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_6; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_7; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_8; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_INDEX_MASK_9; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_2POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_2POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_3POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_3POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_5POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_6; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_FRONT_BACK; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_MONO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_STEREO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_CALL_MONO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_DNLINK_MONO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_IN_VOICE_UPLINK_MONO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_NONE; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_13POINT_360RA; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_22POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_2POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT0POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_3POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1POINT4; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1_BACK; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_5POINT1_SIDE; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_6POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1POINT2; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_7POINT1POINT4; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_9POINT1POINT4; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_9POINT1POINT6; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_MONO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_MONO_HAPTIC_A; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_MONO_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_PENTA; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD_BACK; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_QUAD_SIDE; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_STEREO_HAPTIC_AB; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_SURROUND; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_TRI; + enum_constant public static final android.audio.policy.configuration.AudioChannelMask AUDIO_CHANNEL_OUT_TRI_BACK; + } + + public enum AudioContentType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_MOVIE; + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_MUSIC; + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_SONIFICATION; + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_SPEECH; + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_ULTRASOUND; + enum_constant public static final android.audio.policy.configuration.AudioContentType AUDIO_CONTENT_TYPE_UNKNOWN; + } + + public enum AudioDevice { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_AMBIENT; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_AUX_DIGITAL; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BACK_MIC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BLE_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_A2DP; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_BLE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BUILTIN_MIC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_BUS; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_DEFAULT; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_ECHO_REFERENCE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_FM_TUNER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_HDMI; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_HDMI_ARC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_HDMI_EARC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_IP; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_LINE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_LOOPBACK; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_PROXY; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_SPDIF; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_STUB; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_TELEPHONY_RX; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_TV_TUNER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_USB_ACCESSORY; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_USB_DEVICE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_USB_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_VOICE_CALL; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_IN_WIRED_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_NONE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_AUX_DIGITAL; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_AUX_LINE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLE_BROADCAST; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLE_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLE_SPEAKER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_BUS; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_DEFAULT; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_EARPIECE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_ECHO_CANCELLER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_FM; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_HDMI; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_HDMI_ARC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_HDMI_EARC; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_HEARING_AID; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_IP; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_LINE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_PROXY; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_SPDIF; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_SPEAKER; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_SPEAKER_SAFE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_STUB; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_TELEPHONY_TX; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_USB_ACCESSORY; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_USB_DEVICE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_USB_HEADSET; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADPHONE; + enum_constant public static final android.audio.policy.configuration.AudioDevice AUDIO_DEVICE_OUT_WIRED_HEADSET; + } + + public enum AudioEncapsulationType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioEncapsulationType AUDIO_ENCAPSULATION_TYPE_IEC61937; + enum_constant public static final android.audio.policy.configuration.AudioEncapsulationType AUDIO_ENCAPSULATION_TYPE_NONE; + } + + public enum AudioFormat { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADIF; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_ELD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_ERLC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_HE_V1; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_HE_V2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_LC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_LD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_LTP; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_MAIN; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_SCALABLE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_SSR; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ADTS_XHE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ELD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_ERLC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_HE_V1; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_HE_V2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LATM; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LATM_HE_V1; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LATM_HE_V2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LATM_LC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_LTP; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_MAIN; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_SCALABLE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_SSR; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AAC_XHE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AC3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AC4; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_ALAC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AMR_NB; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AMR_WB; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_AMR_WB_PLUS; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX_ADAPTIVE; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX_ADAPTIVE_QLEA; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX_ADAPTIVE_R4; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX_HD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_APTX_TWSP; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_CELT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DEFAULT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DOLBY_TRUEHD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DRA; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DSD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DTS; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DTS_HD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DTS_HD_MA; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DTS_UHD; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_DTS_UHD_P2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_EVRC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_EVRCB; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_EVRCNW; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_EVRCWB; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_E_AC3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_E_AC3_JOC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_FLAC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_HE_AAC_V1; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_HE_AAC_V2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_IEC60958; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_IEC61937; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_LC3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_LDAC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_LHDC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_LHDC_LL; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MAT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MAT_1_0; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MAT_2_0; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MAT_2_1; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MP2; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MP3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MPEGH_BL_L3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MPEGH_BL_L4; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MPEGH_LC_L3; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_MPEGH_LC_L4; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_OPUS; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_16_BIT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_24_BIT_PACKED; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_32_BIT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_8_24_BIT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_8_BIT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_PCM_FLOAT; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_QCELP; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_SBC; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_VORBIS; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_WMA; + enum_constant public static final android.audio.policy.configuration.AudioFormat AUDIO_FORMAT_WMA_PRO; + } + + public enum AudioGainMode { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioGainMode AUDIO_GAIN_MODE_CHANNELS; + enum_constant public static final android.audio.policy.configuration.AudioGainMode AUDIO_GAIN_MODE_JOINT; + enum_constant public static final android.audio.policy.configuration.AudioGainMode AUDIO_GAIN_MODE_RAMP; + } + + public enum AudioInOutFlag { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_DIRECT; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_FAST; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_HW_AV_SYNC; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_HW_HOTWORD; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_MMAP_NOIRQ; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_RAW; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_SYNC; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_ULTRASOUND; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_INPUT_FLAG_VOIP_TX; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_DEEP_BUFFER; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_DIRECT; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_DIRECT_PCM; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_FAST; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_GAPLESS_OFFLOAD; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_HW_AV_SYNC; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_IEC958_NONAUDIO; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_INCALL_MUSIC; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_MMAP_NOIRQ; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_NON_BLOCKING; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_PRIMARY; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_RAW; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_SPATIALIZER; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_SYNC; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_TTS; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_ULTRASOUND; + enum_constant public static final android.audio.policy.configuration.AudioInOutFlag AUDIO_OUTPUT_FLAG_VOIP_RX; + } + + public class AudioPolicyConfiguration { + ctor public AudioPolicyConfiguration(); + method @Nullable public android.audio.policy.configuration.GlobalConfiguration getGlobalConfiguration(); + method @Nullable public java.util.List getModules(); + method @Nullable public android.audio.policy.configuration.SurroundSound getSurroundSound(); + method @Nullable public android.audio.policy.configuration.Version getVersion(); + method @Nullable public java.util.List getVolumes(); + method public void setGlobalConfiguration(@Nullable android.audio.policy.configuration.GlobalConfiguration); + method public void setSurroundSound(@Nullable android.audio.policy.configuration.SurroundSound); + method public void setVersion(@Nullable android.audio.policy.configuration.Version); + } + + public enum AudioSource { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_CAMCORDER; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_DEFAULT; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_ECHO_REFERENCE; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_FM_TUNER; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_HOTWORD; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_MIC; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_ULTRASOUND; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_UNPROCESSED; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_CALL; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_DOWNLINK; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_PERFORMANCE; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_RECOGNITION; + enum_constant public static final android.audio.policy.configuration.AudioSource AUDIO_SOURCE_VOICE_UPLINK; + } + + public enum AudioStreamType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_ACCESSIBILITY; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_ALARM; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_BLUETOOTH_SCO; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_CALL_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_DTMF; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_ENFORCED_AUDIBLE; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_MUSIC; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_NOTIFICATION; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_PATCH; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_REROUTING; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_RING; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_SYSTEM; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_TTS; + enum_constant public static final android.audio.policy.configuration.AudioStreamType AUDIO_STREAM_VOICE_CALL; + } + + public enum AudioUsage { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ALARM; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ANNOUNCEMENT; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ASSISTANCE_SONIFICATION; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_CALL_ASSISTANT; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_EMERGENCY; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_GAME; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_MEDIA; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_NOTIFICATION; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_NOTIFICATION_EVENT; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_SAFETY; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_UNKNOWN; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_VEHICLE_STATUS; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_VIRTUAL_SOURCE; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.configuration.AudioUsage AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING; + } + + public enum DeviceCategory { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.DeviceCategory DEVICE_CATEGORY_EARPIECE; + enum_constant public static final android.audio.policy.configuration.DeviceCategory DEVICE_CATEGORY_EXT_MEDIA; + enum_constant public static final android.audio.policy.configuration.DeviceCategory DEVICE_CATEGORY_HEADSET; + enum_constant public static final android.audio.policy.configuration.DeviceCategory DEVICE_CATEGORY_HEARING_AID; + enum_constant public static final android.audio.policy.configuration.DeviceCategory DEVICE_CATEGORY_SPEAKER; + } + + public class DevicePorts { + ctor public DevicePorts(); + method @Nullable public java.util.List getDevicePort(); + } + + public static class DevicePorts.DevicePort { + ctor public DevicePorts.DevicePort(); + method @Nullable public String getAddress(); + method @Nullable public java.util.List getEncodedFormats(); + method @Nullable public android.audio.policy.configuration.Gains getGains(); + method @Nullable public java.util.List getProfile(); + method @Nullable public android.audio.policy.configuration.Role getRole(); + method @Nullable public String getTagName(); + method @Nullable public String getType(); + method @Nullable public boolean get_default(); + method public void setAddress(@Nullable String); + method public void setEncodedFormats(@Nullable java.util.List); + method public void setGains(@Nullable android.audio.policy.configuration.Gains); + method public void setRole(@Nullable android.audio.policy.configuration.Role); + method public void setTagName(@Nullable String); + method public void setType(@Nullable String); + method public void set_default(@Nullable boolean); + } + + public enum EngineSuffix { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.EngineSuffix _default; + enum_constant public static final android.audio.policy.configuration.EngineSuffix configurable; + } + + public class Gains { + ctor public Gains(); + method @Nullable public java.util.List getGain(); + } + + public static class Gains.Gain { + ctor public Gains.Gain(); + method @Nullable public android.audio.policy.configuration.AudioChannelMask getChannel_mask(); + method @Nullable public int getDefaultValueMB(); + method @Nullable public int getMaxRampMs(); + method @Nullable public int getMaxValueMB(); + method @Nullable public int getMinRampMs(); + method @Nullable public int getMinValueMB(); + method @Nullable public java.util.List getMode(); + method @Nullable public String getName(); + method @Nullable public int getStepValueMB(); + method @Nullable public boolean getUseForVolume(); + method public void setChannel_mask(@Nullable android.audio.policy.configuration.AudioChannelMask); + method public void setDefaultValueMB(@Nullable int); + method public void setMaxRampMs(@Nullable int); + method public void setMaxValueMB(@Nullable int); + method public void setMinRampMs(@Nullable int); + method public void setMinValueMB(@Nullable int); + method public void setMode(@Nullable java.util.List); + method public void setName(@Nullable String); + method public void setStepValueMB(@Nullable int); + method public void setUseForVolume(@Nullable boolean); + } + + public class GlobalConfiguration { + ctor public GlobalConfiguration(); + method @Nullable public boolean getCall_screen_mode_supported(); + method @Nullable public android.audio.policy.configuration.EngineSuffix getEngine_library(); + method @Nullable public boolean getSpeaker_drc_enabled(); + method public void setCall_screen_mode_supported(@Nullable boolean); + method public void setEngine_library(@Nullable android.audio.policy.configuration.EngineSuffix); + method public void setSpeaker_drc_enabled(@Nullable boolean); + } + + public enum HalVersion { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.HalVersion _2_0; + enum_constant public static final android.audio.policy.configuration.HalVersion _3_0; + } + + public class MixPorts { + ctor public MixPorts(); + method @Nullable public java.util.List getMixPort(); + } + + public static class MixPorts.MixPort { + ctor public MixPorts.MixPort(); + method @Nullable public java.util.List getFlags(); + method @Nullable public android.audio.policy.configuration.Gains getGains(); + method @Nullable public long getMaxActiveCount(); + method @Nullable public long getMaxOpenCount(); + method @Nullable public String getName(); + method @Nullable public java.util.List getPreferredUsage(); + method @Nullable public java.util.List getProfile(); + method @Nullable public long getRecommendedMuteDurationMs(); + method @Nullable public android.audio.policy.configuration.Role getRole(); + method public void setFlags(@Nullable java.util.List); + method public void setGains(@Nullable android.audio.policy.configuration.Gains); + method public void setMaxActiveCount(@Nullable long); + method public void setMaxOpenCount(@Nullable long); + method public void setName(@Nullable String); + method public void setPreferredUsage(@Nullable java.util.List); + method public void setRecommendedMuteDurationMs(@Nullable long); + method public void setRole(@Nullable android.audio.policy.configuration.Role); + } + + public enum MixType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.MixType mix; + enum_constant public static final android.audio.policy.configuration.MixType mux; + } + + public class Modules { + ctor public Modules(); + method @Nullable public java.util.List getModule(); + } + + public static class Modules.Module { + ctor public Modules.Module(); + method @Nullable public android.audio.policy.configuration.AttachedDevices getAttachedDevices(); + method @Nullable public String getDefaultOutputDevice(); + method @Nullable public android.audio.policy.configuration.DevicePorts getDevicePorts(); + method @Nullable public android.audio.policy.configuration.HalVersion getHalVersion(); + method @Nullable public android.audio.policy.configuration.MixPorts getMixPorts(); + method @Nullable public String getName(); + method @Nullable public android.audio.policy.configuration.Routes getRoutes(); + method public void setAttachedDevices(@Nullable android.audio.policy.configuration.AttachedDevices); + method public void setDefaultOutputDevice(@Nullable String); + method public void setDevicePorts(@Nullable android.audio.policy.configuration.DevicePorts); + method public void setHalVersion(@Nullable android.audio.policy.configuration.HalVersion); + method public void setMixPorts(@Nullable android.audio.policy.configuration.MixPorts); + method public void setName(@Nullable String); + method public void setRoutes(@Nullable android.audio.policy.configuration.Routes); + } + + public class Profile { + ctor public Profile(); + method @Nullable public java.util.List getChannelMasks(); + method @Nullable public android.audio.policy.configuration.AudioEncapsulationType getEncapsulationType(); + method @Nullable public String getFormat(); + method @Nullable public String getName(); + method @Nullable public java.util.List getSamplingRates(); + method public void setChannelMasks(@Nullable java.util.List); + method public void setEncapsulationType(@Nullable android.audio.policy.configuration.AudioEncapsulationType); + method public void setFormat(@Nullable String); + method public void setName(@Nullable String); + method public void setSamplingRates(@Nullable java.util.List); + } + + public class Reference { + ctor public Reference(); + method @Nullable public String getName(); + method @Nullable public java.util.List getPoint(); + method public void setName(@Nullable String); + } + + public enum Role { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.Role sink; + enum_constant public static final android.audio.policy.configuration.Role source; + } + + public class Routes { + ctor public Routes(); + method @Nullable public java.util.List getRoute(); + } + + public static class Routes.Route { + ctor public Routes.Route(); + method @Nullable public String getSink(); + method @Nullable public String getSources(); + method @Nullable public android.audio.policy.configuration.MixType getType(); + method public void setSink(@Nullable String); + method public void setSources(@Nullable String); + method public void setType(@Nullable android.audio.policy.configuration.MixType); + } + + public class SurroundFormats { + ctor public SurroundFormats(); + method @Nullable public java.util.List getFormat(); + } + + public static class SurroundFormats.Format { + ctor public SurroundFormats.Format(); + method @Nullable public String getName(); + method @Nullable public java.util.List getSubformats(); + method public void setName(@Nullable String); + method public void setSubformats(@Nullable java.util.List); + } + + public class SurroundSound { + ctor public SurroundSound(); + method @Nullable public android.audio.policy.configuration.SurroundFormats getFormats(); + method public void setFormats(@Nullable android.audio.policy.configuration.SurroundFormats); + } + + public enum Version { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.configuration.Version _7_0; + enum_constant public static final android.audio.policy.configuration.Version _7_1; + } + + public class Volume { + ctor public Volume(); + method @Nullable public android.audio.policy.configuration.DeviceCategory getDeviceCategory(); + method @Nullable public java.util.List getPoint(); + method @Nullable public String getRef(); + method @Nullable public android.audio.policy.configuration.AudioStreamType getStream(); + method public void setDeviceCategory(@Nullable android.audio.policy.configuration.DeviceCategory); + method public void setRef(@Nullable String); + method public void setStream(@Nullable android.audio.policy.configuration.AudioStreamType); + } + + public class Volumes { + ctor public Volumes(); + method @Nullable public java.util.List getReference(); + method @Nullable public java.util.List getVolume(); + } + + public class XmlParser { + ctor public XmlParser(); + method @Nullable public static android.audio.policy.configuration.AudioPolicyConfiguration read(@NonNull java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method @Nullable public static String readText(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static void skip(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + } + +} + diff --git a/audio/aidl/default/config/audioPolicy/api/last_current.txt b/audio/aidl/default/config/audioPolicy/api/last_current.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/audio/aidl/default/config/audioPolicy/api/last_removed.txt b/audio/aidl/default/config/audioPolicy/api/last_removed.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/audio/aidl/default/config/audioPolicy/api/removed.txt b/audio/aidl/default/config/audioPolicy/api/removed.txt new file mode 100644 index 0000000000..d802177e24 --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/api/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/audio/aidl/default/config/audio_policy_configuration.xsd b/audio/aidl/default/config/audioPolicy/audio_policy_configuration.xsd similarity index 100% rename from audio/aidl/default/config/audio_policy_configuration.xsd rename to audio/aidl/default/config/audioPolicy/audio_policy_configuration.xsd diff --git a/audio/aidl/default/config/audioPolicy/engine/Android.bp b/audio/aidl/default/config/audioPolicy/engine/Android.bp new file mode 100644 index 0000000000..b2a73103c9 --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/engine/Android.bp @@ -0,0 +1,15 @@ +package { + // See: http://go/android-license-faq + // A large-scale-change added 'default_applicable_licenses' to import + // all of the 'license_kinds' from "hardware_interfaces_license" + // to get the below license kinds: + // SPDX-license-identifier-Apache-2.0 + default_applicable_licenses: ["hardware_interfaces_license"], +} + +xsd_config { + name: "audio_policy_engine_configuration_aidl_default", + srcs: ["audio_policy_engine_configuration.xsd"], + package_name: "android.audio.policy.engine.configuration", + nullability: true, +} diff --git a/audio/aidl/default/config/audioPolicy/engine/api/current.txt b/audio/aidl/default/config/audioPolicy/engine/api/current.txt new file mode 100644 index 0000000000..59574f3299 --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/engine/api/current.txt @@ -0,0 +1,302 @@ +// Signature format: 2.0 +package android.audio.policy.engine.configuration { + + public class AttributesGroup { + ctor public AttributesGroup(); + method @Nullable public java.util.List getAttributes_optional(); + method @Nullable public android.audio.policy.engine.configuration.BundleType getBundle_optional(); + method @Nullable public android.audio.policy.engine.configuration.ContentTypeType getContentType_optional(); + method @Nullable public android.audio.policy.engine.configuration.FlagsType getFlags_optional(); + method @Nullable public android.audio.policy.engine.configuration.SourceType getSource_optional(); + method @Nullable public android.audio.policy.engine.configuration.Stream getStreamType(); + method @Nullable public android.audio.policy.engine.configuration.UsageType getUsage_optional(); + method @Nullable public String getVolumeGroup(); + method public void setBundle_optional(@Nullable android.audio.policy.engine.configuration.BundleType); + method public void setContentType_optional(@Nullable android.audio.policy.engine.configuration.ContentTypeType); + method public void setFlags_optional(@Nullable android.audio.policy.engine.configuration.FlagsType); + method public void setSource_optional(@Nullable android.audio.policy.engine.configuration.SourceType); + method public void setStreamType(@Nullable android.audio.policy.engine.configuration.Stream); + method public void setUsage_optional(@Nullable android.audio.policy.engine.configuration.UsageType); + method public void setVolumeGroup(@Nullable String); + } + + public class AttributesRef { + ctor public AttributesRef(); + method @Nullable public java.util.List getReference(); + } + + public class AttributesRefType { + ctor public AttributesRefType(); + method @Nullable public android.audio.policy.engine.configuration.AttributesType getAttributes(); + method @Nullable public String getName(); + method public void setAttributes(@Nullable android.audio.policy.engine.configuration.AttributesType); + method public void setName(@Nullable String); + } + + public class AttributesType { + ctor public AttributesType(); + method @Nullable public String getAttributesRef(); + method @Nullable public android.audio.policy.engine.configuration.BundleType getBundle(); + method @Nullable public android.audio.policy.engine.configuration.ContentTypeType getContentType(); + method @Nullable public android.audio.policy.engine.configuration.FlagsType getFlags(); + method @Nullable public android.audio.policy.engine.configuration.SourceType getSource(); + method @Nullable public android.audio.policy.engine.configuration.UsageType getUsage(); + method public void setAttributesRef(@Nullable String); + method public void setBundle(@Nullable android.audio.policy.engine.configuration.BundleType); + method public void setContentType(@Nullable android.audio.policy.engine.configuration.ContentTypeType); + method public void setFlags(@Nullable android.audio.policy.engine.configuration.FlagsType); + method public void setSource(@Nullable android.audio.policy.engine.configuration.SourceType); + method public void setUsage(@Nullable android.audio.policy.engine.configuration.UsageType); + } + + public class BundleType { + ctor public BundleType(); + method @Nullable public String getKey(); + method @Nullable public String getValue(); + method public void setKey(@Nullable String); + method public void setValue(@Nullable String); + } + + public class Configuration { + ctor public Configuration(); + method @Nullable public java.util.List getAttributesRef(); + method @Nullable public java.util.List getCriteria(); + method @Nullable public java.util.List getCriterion_types(); + method @Nullable public java.util.List getProductStrategies(); + method @Nullable public android.audio.policy.engine.configuration.Version getVersion(); + method @Nullable public java.util.List getVolumeGroups(); + method @Nullable public java.util.List getVolumes(); + method public void setVersion(@Nullable android.audio.policy.engine.configuration.Version); + } + + public enum ContentType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.ContentType AUDIO_CONTENT_TYPE_MOVIE; + enum_constant public static final android.audio.policy.engine.configuration.ContentType AUDIO_CONTENT_TYPE_MUSIC; + enum_constant public static final android.audio.policy.engine.configuration.ContentType AUDIO_CONTENT_TYPE_SONIFICATION; + enum_constant public static final android.audio.policy.engine.configuration.ContentType AUDIO_CONTENT_TYPE_SPEECH; + enum_constant public static final android.audio.policy.engine.configuration.ContentType AUDIO_CONTENT_TYPE_UNKNOWN; + } + + public class ContentTypeType { + ctor public ContentTypeType(); + method @Nullable public android.audio.policy.engine.configuration.ContentType getValue(); + method public void setValue(@Nullable android.audio.policy.engine.configuration.ContentType); + } + + public class CriteriaType { + ctor public CriteriaType(); + method @Nullable public java.util.List getCriterion(); + } + + public class CriterionType { + ctor public CriterionType(); + method @Nullable public String getName(); + method @Nullable public String getType(); + method @Nullable public String get_default(); + method public void setName(@Nullable String); + method public void setType(@Nullable String); + method public void set_default(@Nullable String); + } + + public class CriterionTypeType { + ctor public CriterionTypeType(); + method @Nullable public String getName(); + method @Nullable public android.audio.policy.engine.configuration.PfwCriterionTypeEnum getType(); + method @Nullable public android.audio.policy.engine.configuration.ValuesType getValues(); + method public void setName(@Nullable String); + method public void setType(@Nullable android.audio.policy.engine.configuration.PfwCriterionTypeEnum); + method public void setValues(@Nullable android.audio.policy.engine.configuration.ValuesType); + } + + public class CriterionTypesType { + ctor public CriterionTypesType(); + method @Nullable public java.util.List getCriterion_type(); + } + + public enum DeviceCategory { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.DeviceCategory DEVICE_CATEGORY_EARPIECE; + enum_constant public static final android.audio.policy.engine.configuration.DeviceCategory DEVICE_CATEGORY_EXT_MEDIA; + enum_constant public static final android.audio.policy.engine.configuration.DeviceCategory DEVICE_CATEGORY_HEADSET; + enum_constant public static final android.audio.policy.engine.configuration.DeviceCategory DEVICE_CATEGORY_HEARING_AID; + enum_constant public static final android.audio.policy.engine.configuration.DeviceCategory DEVICE_CATEGORY_SPEAKER; + } + + public enum FlagType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_AUDIBILITY_ENFORCED; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_BEACON; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_BYPASS_INTERRUPTION_POLICY; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_BYPASS_MUTE; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_CAPTURE_PRIVATE; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_DEEP_BUFFER; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_HW_AV_SYNC; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_HW_HOTWORD; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_LOW_LATENCY; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_MUTE_HAPTIC; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_NONE; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_NO_MEDIA_PROJECTION; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_NO_SYSTEM_CAPTURE; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_SCO; + enum_constant public static final android.audio.policy.engine.configuration.FlagType AUDIO_FLAG_SECURE; + } + + public class FlagsType { + ctor public FlagsType(); + method @Nullable public java.util.List getValue(); + method public void setValue(@Nullable java.util.List); + } + + public enum PfwCriterionTypeEnum { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.PfwCriterionTypeEnum exclusive; + enum_constant public static final android.audio.policy.engine.configuration.PfwCriterionTypeEnum inclusive; + } + + public class ProductStrategies { + ctor public ProductStrategies(); + method @Nullable public java.util.List getProductStrategy(); + } + + public static class ProductStrategies.ProductStrategy { + ctor public ProductStrategies.ProductStrategy(); + method @Nullable public java.util.List getAttributesGroup(); + method @Nullable public String getName(); + method public void setName(@Nullable String); + } + + public enum SourceEnumType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_CAMCORDER; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_DEFAULT; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_ECHO_REFERENCE; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_FM_TUNER; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_MIC; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_REMOTE_SUBMIX; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_UNPROCESSED; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_CALL; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_DOWNLINK; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_PERFORMANCE; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_RECOGNITION; + enum_constant public static final android.audio.policy.engine.configuration.SourceEnumType AUDIO_SOURCE_VOICE_UPLINK; + } + + public class SourceType { + ctor public SourceType(); + method @Nullable public android.audio.policy.engine.configuration.SourceEnumType getValue(); + method public void setValue(@Nullable android.audio.policy.engine.configuration.SourceEnumType); + } + + public enum Stream { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_ACCESSIBILITY; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_ALARM; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_ASSISTANT; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_BLUETOOTH_SCO; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_DEFAULT; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_DTMF; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_ENFORCED_AUDIBLE; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_MUSIC; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_NOTIFICATION; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_RING; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_SYSTEM; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_TTS; + enum_constant public static final android.audio.policy.engine.configuration.Stream AUDIO_STREAM_VOICE_CALL; + } + + public enum UsageEnumType { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_ALARM; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_ASSISTANCE_ACCESSIBILITY; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_ASSISTANCE_NAVIGATION_GUIDANCE; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_ASSISTANCE_SONIFICATION; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_ASSISTANT; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_CALL_ASSISTANT; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_GAME; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_MEDIA; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_DELAYED; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_INSTANT; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION_COMMUNICATION_REQUEST; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION_EVENT; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_NOTIFICATION_TELEPHONY_RINGTONE; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_UNKNOWN; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_VIRTUAL_SOURCE; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_VOICE_COMMUNICATION; + enum_constant public static final android.audio.policy.engine.configuration.UsageEnumType AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING; + } + + public class UsageType { + ctor public UsageType(); + method @Nullable public android.audio.policy.engine.configuration.UsageEnumType getValue(); + method public void setValue(@Nullable android.audio.policy.engine.configuration.UsageEnumType); + } + + public class ValueType { + ctor public ValueType(); + method @Nullable public String getAndroid_type(); + method @Nullable public String getLiteral(); + method @Nullable public long getNumerical(); + method public void setAndroid_type(@Nullable String); + method public void setLiteral(@Nullable String); + method public void setNumerical(@Nullable long); + } + + public class ValuesType { + ctor public ValuesType(); + method @Nullable public java.util.List getValue(); + } + + public enum Version { + method @NonNull public String getRawName(); + enum_constant public static final android.audio.policy.engine.configuration.Version _1_0; + } + + public class Volume { + ctor public Volume(); + method @Nullable public android.audio.policy.engine.configuration.DeviceCategory getDeviceCategory(); + method @Nullable public java.util.List getPoint(); + method @Nullable public String getRef(); + method public void setDeviceCategory(@Nullable android.audio.policy.engine.configuration.DeviceCategory); + method public void setRef(@Nullable String); + } + + public class VolumeGroupsType { + ctor public VolumeGroupsType(); + method @Nullable public java.util.List getVolumeGroup(); + } + + public static class VolumeGroupsType.VolumeGroup { + ctor public VolumeGroupsType.VolumeGroup(); + method @Nullable public int getIndexMax(); + method @Nullable public int getIndexMin(); + method @Nullable public String getName(); + method @Nullable public java.util.List getVolume(); + method public void setIndexMax(@Nullable int); + method public void setIndexMin(@Nullable int); + method public void setName(@Nullable String); + } + + public class VolumeRef { + ctor public VolumeRef(); + method @Nullable public String getName(); + method @Nullable public java.util.List getPoint(); + method public void setName(@Nullable String); + } + + public class VolumesType { + ctor public VolumesType(); + method @Nullable public java.util.List getReference(); + } + + public class XmlParser { + ctor public XmlParser(); + method @Nullable public static android.audio.policy.engine.configuration.Configuration read(@NonNull java.io.InputStream) throws javax.xml.datatype.DatatypeConfigurationException, java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method @Nullable public static String readText(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + method public static void skip(@NonNull org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException; + } + +} + diff --git a/audio/aidl/default/config/audioPolicy/engine/api/last_current.txt b/audio/aidl/default/config/audioPolicy/engine/api/last_current.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/audio/aidl/default/config/audioPolicy/engine/api/last_removed.txt b/audio/aidl/default/config/audioPolicy/engine/api/last_removed.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/audio/aidl/default/config/audioPolicy/engine/api/removed.txt b/audio/aidl/default/config/audioPolicy/engine/api/removed.txt new file mode 100644 index 0000000000..d802177e24 --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/engine/api/removed.txt @@ -0,0 +1 @@ +// Signature format: 2.0 diff --git a/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd b/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd new file mode 100644 index 0000000000..b58a6c84fb --- /dev/null +++ b/audio/aidl/default/config/audioPolicy/engine/audio_policy_engine_configuration.xsd @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Volume section defines a volume curve for a given use case and device category. + It contains a list of points of this curve expressing the attenuation in Millibels + for a given volume index from 0 to 100. + + 0,-9600 + 100,0 + + + It may also reference a reference/@name to avoid duplicating curves. + + + 0,-9600 + 100,0 + + + + + + + + + + + + + + + + + + + + + Comma separated pair of number. + The fist one is the framework level (between 0 and 100). + The second one is the volume to send to the HAL. + The framework will interpolate volumes not specified. + Their MUST be at least 2 points specified. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/audio/aidl/default/include/core-impl/AudioPolicyConfigXmlConverter.h b/audio/aidl/default/include/core-impl/AudioPolicyConfigXmlConverter.h new file mode 100644 index 0000000000..47918f0839 --- /dev/null +++ b/audio/aidl/default/include/core-impl/AudioPolicyConfigXmlConverter.h @@ -0,0 +1,64 @@ +/* + * 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. + */ + +#pragma once + +#include + +#include +#include +#include + +#include "core-impl/XmlConverter.h" + +namespace aidl::android::hardware::audio::core::internal { + +class AudioPolicyConfigXmlConverter { + public: + explicit AudioPolicyConfigXmlConverter(const std::string& configFilePath) + : mConverter(configFilePath, &::android::audio::policy::configuration::read) {} + + std::string getError() const { return mConverter.getError(); } + ::android::status_t getStatus() const { return mConverter.getStatus(); } + + const ::aidl::android::media::audio::common::AudioHalEngineConfig& getAidlEngineConfig(); + + private: + const std::optional<::android::audio::policy::configuration::AudioPolicyConfiguration>& + getXsdcConfig() const { + return mConverter.getXsdcConfig(); + } + void addVolumeGroupstoEngineConfig(); + void mapStreamToVolumeCurve( + const ::android::audio::policy::configuration::Volume& xsdcVolumeCurve); + void mapStreamsToVolumeCurves(); + void parseVolumes(); + ::aidl::android::media::audio::common::AudioHalVolumeCurve::CurvePoint convertCurvePointToAidl( + const std::string& xsdcCurvePoint); + + ::aidl::android::media::audio::common::AudioHalVolumeCurve convertVolumeCurveToAidl( + const ::android::audio::policy::configuration::Volume& xsdcVolumeCurve); + + ::aidl::android::media::audio::common::AudioHalEngineConfig mAidlEngineConfig; + XmlConverter<::android::audio::policy::configuration::AudioPolicyConfiguration> mConverter; + std::unordered_map + mVolumesReferenceMap; + std::unordered_map<::android::audio::policy::configuration::AudioStreamType, + std::vector<::aidl::android::media::audio::common::AudioHalVolumeCurve>> + mStreamToVolumeCurvesMap; +}; + +} // namespace aidl::android::hardware::audio::core::internal diff --git a/audio/aidl/default/include/core-impl/Config.h b/audio/aidl/default/include/core-impl/Config.h index 91fa68c847..96a6cb9e8e 100644 --- a/audio/aidl/default/include/core-impl/Config.h +++ b/audio/aidl/default/include/core-impl/Config.h @@ -17,13 +17,22 @@ #pragma once #include +#include + +#include "AudioPolicyConfigXmlConverter.h" +#include "EngineConfigXmlConverter.h" namespace aidl::android::hardware::audio::core { +static const std::string kEngineConfigFileName = "audio_policy_engine_configuration.xml"; class Config : public BnConfig { ndk::ScopedAStatus getSurroundSoundConfig(SurroundSoundConfig* _aidl_return) override; ndk::ScopedAStatus getEngineConfig( aidl::android::media::audio::common::AudioHalEngineConfig* _aidl_return) override; + internal::AudioPolicyConfigXmlConverter mAudioPolicyConverter{ + ::android::audio_get_audio_policy_config_file()}; + internal::EngineConfigXmlConverter mEngConfigConverter{ + ::android::audio_find_readable_configuration_file(kEngineConfigFileName.c_str())}; }; } // namespace aidl::android::hardware::audio::core diff --git a/audio/aidl/default/include/core-impl/EngineConfigXmlConverter.h b/audio/aidl/default/include/core-impl/EngineConfigXmlConverter.h new file mode 100644 index 0000000000..b34441d9ac --- /dev/null +++ b/audio/aidl/default/include/core-impl/EngineConfigXmlConverter.h @@ -0,0 +1,91 @@ +/* + * 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. + */ + +#pragma once + +#include +#include + +#include + +#include +#include + +#include "core-impl/XmlConverter.h" + +namespace aidl::android::hardware::audio::core::internal { + +class EngineConfigXmlConverter { + public: + explicit EngineConfigXmlConverter(const std::string& configFilePath) + : mConverter(configFilePath, &::android::audio::policy::engine::configuration::read) { + if (mConverter.getXsdcConfig()) { + init(); + } + } + + std::string getError() const { return mConverter.getError(); } + ::android::status_t getStatus() const { return mConverter.getStatus(); } + + ::aidl::android::media::audio::common::AudioHalEngineConfig& getAidlEngineConfig(); + + private: + const std::optional<::android::audio::policy::engine::configuration::Configuration>& + getXsdcConfig() { + return mConverter.getXsdcConfig(); + } + void init(); + void initProductStrategyMap(); + ::aidl::android::media::audio::common::AudioAttributes convertAudioAttributesToAidl( + const ::android::audio::policy::engine::configuration::AttributesType& + xsdcAudioAttributes); + ::aidl::android::media::audio::common::AudioHalAttributesGroup convertAttributesGroupToAidl( + const ::android::audio::policy::engine::configuration::AttributesGroup& + xsdcAttributesGroup); + ::aidl::android::media::audio::common::AudioHalCapCriterion convertCapCriterionToAidl( + const ::android::audio::policy::engine::configuration::CriterionType& xsdcCriterion); + ::aidl::android::media::audio::common::AudioHalCapCriterionType convertCapCriterionTypeToAidl( + const ::android::audio::policy::engine::configuration::CriterionTypeType& + xsdcCriterionType); + std::string convertCriterionTypeValueToAidl( + const ::android::audio::policy::engine::configuration::ValueType& + xsdcCriterionTypeValue); + ::aidl::android::media::audio::common::AudioHalVolumeCurve::CurvePoint convertCurvePointToAidl( + const std::string& xsdcCurvePoint); + ::aidl::android::media::audio::common::AudioHalProductStrategy convertProductStrategyToAidl( + const ::android::audio::policy::engine::configuration::ProductStrategies:: + ProductStrategy& xsdcProductStrategy); + int convertProductStrategyNameToAidl(const std::string& xsdcProductStrategyName); + ::aidl::android::media::audio::common::AudioHalVolumeCurve convertVolumeCurveToAidl( + const ::android::audio::policy::engine::configuration::Volume& xsdcVolumeCurve); + ::aidl::android::media::audio::common::AudioHalVolumeGroup convertVolumeGroupToAidl( + const ::android::audio::policy::engine::configuration::VolumeGroupsType::VolumeGroup& + xsdcVolumeGroup); + + ::aidl::android::media::audio::common::AudioHalEngineConfig mAidlEngineConfig; + XmlConverter<::android::audio::policy::engine::configuration::Configuration> mConverter; + std::unordered_map + mAttributesReferenceMap; + std::unordered_map + mVolumesReferenceMap; + std::unordered_map mProductStrategyMap; + int mNextVendorStrategy = ::aidl::android::media::audio::common::AudioHalProductStrategy:: + VENDOR_STRATEGY_ID_START; + std::optional mDefaultProductStrategyId; +}; + +} // namespace aidl::android::hardware::audio::core::internal diff --git a/audio/aidl/default/include/core-impl/XmlConverter.h b/audio/aidl/default/include/core-impl/XmlConverter.h new file mode 100644 index 0000000000..ec23edb70a --- /dev/null +++ b/audio/aidl/default/include/core-impl/XmlConverter.h @@ -0,0 +1,142 @@ +/* + * 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. + */ + +#pragma once + +#include +#include +#include + +#include +#include + +namespace aidl::android::hardware::audio::core::internal { + +template +class XmlConverter { + public: + XmlConverter(const std::string& configFilePath, + std::function(const char*)> readXmlConfig) + : XmlConverter(configFilePath, + ::android::audio_is_readable_configuration_file(configFilePath.c_str()), + readXmlConfig) {} + + const ::android::status_t& getStatus() const { return mStatus; } + + const std::string& getError() const { return mErrorMessage; } + + const std::optional& getXsdcConfig() const { return mXsdcConfig; } + + private: + XmlConverter(const std::string& configFilePath, const bool& isReadableConfigFile, + const std::function(const char*)>& readXmlConfig) + : mXsdcConfig{isReadableConfigFile ? readXmlConfig(configFilePath.c_str()) : std::nullopt}, + mStatus(mXsdcConfig ? ::android::OK : ::android::NO_INIT), + mErrorMessage(generateError(configFilePath, isReadableConfigFile, mStatus)) {} + + static std::string generateError(const std::string& configFilePath, + const bool& isReadableConfigFile, + const ::android::status_t& status) { + std::string errorMessage; + if (status != ::android::OK) { + if (!isReadableConfigFile) { + errorMessage = "Could not read requested config file:" + configFilePath; + } else { + errorMessage = "Invalid config file: " + configFilePath; + } + } + return errorMessage; + } + + const std::optional mXsdcConfig; + const ::android::status_t mStatus; + const std::string mErrorMessage; +}; + +/** + * Converts a vector of an xsd wrapper type to a flat vector of the + * corresponding AIDL type. + * + * Wrapper types are used in order to have well-formed xIncludes. In the + * example below, Modules is the wrapper type for Module. + * + * ... + * ... + * + */ +template +static std::vector convertWrappedCollectionToAidl( + const std::vector& xsdcWrapperTypeVec, + std::function&(const W&)> getInnerTypeVec, + std::function convertToAidl) { + std::vector resultAidlTypeVec; + if (!xsdcWrapperTypeVec.empty()) { + /* + * xsdcWrapperTypeVec likely only contains one element; that is, it's + * likely that all the inner types that we need to convert are inside of + * xsdcWrapperTypeVec[0]. + */ + resultAidlTypeVec.reserve(getInnerTypeVec(xsdcWrapperTypeVec[0]).size()); + for (const W& xsdcWrapperType : xsdcWrapperTypeVec) { + std::transform(getInnerTypeVec(xsdcWrapperType).begin(), + getInnerTypeVec(xsdcWrapperType).end(), + std::back_inserter(resultAidlTypeVec), convertToAidl); + } + } + return resultAidlTypeVec; +} + +template +static std::vector convertCollectionToAidl(const std::vector& xsdcTypeVec, + std::function convertToAidl) { + std::vector resultAidlTypeVec; + resultAidlTypeVec.reserve(xsdcTypeVec.size()); + std::transform(xsdcTypeVec.begin(), xsdcTypeVec.end(), std::back_inserter(resultAidlTypeVec), + convertToAidl); + return resultAidlTypeVec; +} + +/** + * Generates a map of xsd references, keyed by reference name, given a + * vector of wrapper types for the reference. + * + * Wrapper types are used in order to have well-formed xIncludes. In the + * example below, Wrapper is the wrapper type for Reference. + * + * ... + * ... + * + */ +template +static std::unordered_map generateReferenceMap( + const std::vector& xsdcWrapperTypeVec) { + std::unordered_map resultMap; + if (!xsdcWrapperTypeVec.empty()) { + /* + * xsdcWrapperTypeVec likely only contains one element; that is, it's + * likely that all the inner types that we need to convert are inside of + * xsdcWrapperTypeVec[0]. + */ + resultMap.reserve(xsdcWrapperTypeVec[0].getReference().size()); + for (const W& xsdcWrapperType : xsdcWrapperTypeVec) { + for (const R& xsdcReference : xsdcWrapperType.getReference()) { + resultMap.insert({xsdcReference.getName(), xsdcReference}); + } + } + } + return resultMap; +} +} // namespace aidl::android::hardware::audio::core::internal diff --git a/audio/aidl/default/main.cpp b/audio/aidl/default/main.cpp index 15874a0489..8f6d35008f 100644 --- a/audio/aidl/default/main.cpp +++ b/audio/aidl/default/main.cpp @@ -17,13 +17,13 @@ #include #include -#include "core-impl/Config.h" -#include "core-impl/Module.h" - #include #include #include +#include "core-impl/Config.h" +#include "core-impl/Module.h" + using aidl::android::hardware::audio::core::Config; using aidl::android::hardware::audio::core::Module;