/* * 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