1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <aidl/android/hardware/bluetooth/audio/LeAudioCodecCapabilitiesSetting.h> 20 #include <android-base/logging.h> 21 22 #include <unordered_map> 23 24 #include "aidl_android_hardware_bluetooth_audio_setting.h" 25 26 namespace aidl { 27 namespace android { 28 namespace hardware { 29 namespace bluetooth { 30 namespace audio { 31 32 class BluetoothLeAudioCodecsProvider { 33 public: 34 static std::optional<setting::LeAudioOffloadSetting> 35 ParseFromLeAudioOffloadSettingFile(); 36 static std::vector<LeAudioCodecCapabilitiesSetting> 37 GetLeAudioCodecCapabilities( 38 const std::optional<setting::LeAudioOffloadSetting>& 39 le_audio_offload_setting); 40 static void ClearLeAudioCodecCapabilities(); 41 42 private: 43 static inline std::unordered_map<std::string, setting::Configuration> 44 configuration_map_; 45 static inline std::unordered_map<std::string, setting::CodecConfiguration> 46 codec_configuration_map_; 47 static inline std::unordered_map<std::string, setting::StrategyConfiguration> 48 strategy_configuration_map_; 49 50 static std::vector<setting::Scenario> GetScenarios( 51 const std::optional<setting::LeAudioOffloadSetting>& 52 le_audio_offload_setting); 53 static void UpdateConfigurationsToMap( 54 const std::optional<setting::LeAudioOffloadSetting>& 55 le_audio_offload_setting); 56 static void UpdateCodecConfigurationsToMap( 57 const std::optional<setting::LeAudioOffloadSetting>& 58 le_audio_offload_setting); 59 static void UpdateStrategyConfigurationsToMap( 60 const std::optional<setting::LeAudioOffloadSetting>& 61 le_audio_offload_setting); 62 63 static std::vector<LeAudioCodecCapabilitiesSetting> 64 ComposeLeAudioCodecCapabilities( 65 const std::vector<setting::Scenario>& supported_scenarios); 66 67 static UnicastCapability GetUnicastCapability( 68 const std::string& coding_direction); 69 template <class T> 70 static inline UnicastCapability ComposeUnicastCapability( 71 const CodecType& codec_type, const AudioLocation& audio_location, 72 const uint8_t& device_cnt, const uint8_t& channel_count, 73 const T& capability); 74 75 static inline Lc3Capabilities ComposeLc3Capability( 76 const setting::CodecConfiguration& codec_configuration); 77 78 static inline AudioLocation GetAudioLocation( 79 const setting::AudioLocation& audio_location); 80 static inline CodecType GetCodecType(const setting::CodecType& codec_type); 81 82 static inline bool IsValidCodecConfiguration( 83 const setting::CodecConfiguration& codec_configuration); 84 static inline bool IsValidStrategyConfiguration( 85 const setting::StrategyConfiguration& strategy_configuration); 86 }; 87 88 } // namespace audio 89 } // namespace bluetooth 90 } // namespace hardware 91 } // namespace android 92 } // namespace aidl 93