/* * 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 "aidl/android/hardware/bluetooth/audio/CodecInfo.h" #include "aidl/android/hardware/bluetooth/audio/CodecSpecificConfigurationLtv.h" #include "aidl/android/hardware/bluetooth/audio/SessionType.h" #include "aidl_android_hardware_bluetooth_audio_setting.h" namespace aidl { namespace android { namespace hardware { namespace bluetooth { namespace audio { class BluetoothLeAudioCodecsProvider { public: static std::optional ParseFromLeAudioOffloadSettingFile(); static std::vector GetLeAudioCodecCapabilities( const std::optional& le_audio_offload_setting); static void ClearLeAudioCodecCapabilities(); static std::unordered_map> GetLeAudioCodecInfo(const std::optional& le_audio_offload_setting); private: static inline std::vector supported_scenarios_; static inline std::unordered_map configuration_map_; static inline std::unordered_map codec_configuration_map_; static inline std::unordered_map strategy_configuration_map_; static inline std::unordered_map> session_codecs_map_; static std::vector GetScenarios( const std::optional& le_audio_offload_setting); static void UpdateConfigurationsToMap( const std::optional& le_audio_offload_setting); static void UpdateCodecConfigurationsToMap( const std::optional& le_audio_offload_setting); static void UpdateStrategyConfigurationsToMap( const std::optional& le_audio_offload_setting); static void LoadConfigurationToMap( const std::optional& le_audio_offload_setting); static std::vector ComposeLeAudioCodecCapabilities( const std::vector& supported_scenarios); static UnicastCapability GetUnicastCapability( const std::string& coding_direction); static BroadcastCapability GetBroadcastCapability( const std::string& coding_direction); template static inline UnicastCapability ComposeUnicastCapability( const CodecType& codec_type, const AudioLocation& audio_location, const std::optional< CodecSpecificConfigurationLtv::AudioChannelAllocation>& audio_channel_allocation, const uint8_t& device_cnt, const uint8_t& channel_count, const T& capability); template static inline BroadcastCapability ComposeBroadcastCapability( const CodecType& codec_type, const AudioLocation& audio_location, const std::optional< CodecSpecificConfigurationLtv::AudioChannelAllocation>& audio_channel_allocation, const uint8_t& channel_count, const std::vector& capability); static inline Lc3Capabilities ComposeLc3Capability( const setting::CodecConfiguration& codec_configuration); static inline AptxAdaptiveLeCapabilities ComposeAptxAdaptiveLeCapability( const setting::CodecConfiguration& codec_configuration); static inline AudioLocation GetAudioLocation( const setting::AudioLocation& audio_location); static inline CodecType GetCodecType(const setting::CodecType& codec_type); static inline bool IsValidCodecConfiguration( const setting::CodecConfiguration& codec_configuration); static inline bool IsValidStrategyConfiguration( const setting::StrategyConfiguration& strategy_configuration); }; } // namespace audio } // namespace bluetooth } // namespace hardware } // namespace android } // namespace aidl