diff options
Diffstat (limited to 'bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp')
-rw-r--r-- | bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp | 124 |
1 files changed, 68 insertions, 56 deletions
diff --git a/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp b/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp index 91e0238783..632a389d8c 100644 --- a/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp +++ b/bluetooth/audio/utils/aidl_session/HidlToAidlMiddleware.cpp @@ -93,16 +93,6 @@ std::unordered_map< std::unordered_map<uint16_t, std::shared_ptr<PortStatusCallbacks_2_2>>> legacy_callback_table; -const static std::unordered_map<SessionType_2_0, SessionType> - session_type_2_0_to_aidl_map{ - {SessionType_2_0::A2DP_SOFTWARE_ENCODING_DATAPATH, - SessionType::A2DP_SOFTWARE_ENCODING_DATAPATH}, - {SessionType_2_0::A2DP_HARDWARE_OFFLOAD_DATAPATH, - SessionType::A2DP_HARDWARE_OFFLOAD_ENCODING_DATAPATH}, - {SessionType_2_0::HEARING_AID_SOFTWARE_ENCODING_DATAPATH, - SessionType::HEARING_AID_SOFTWARE_ENCODING_DATAPATH}, - }; - const static std::unordered_map<SessionType_2_1, SessionType> session_type_2_1_to_aidl_map{ {SessionType_2_1::A2DP_SOFTWARE_ENCODING_DATAPATH, @@ -121,18 +111,6 @@ const static std::unordered_map<SessionType_2_1, SessionType> SessionType::LE_AUDIO_HARDWARE_OFFLOAD_DECODING_DATAPATH}, }; -const static std::unordered_map<int32_t, SampleRate_2_0> - sample_rate_to_hidl_2_0_map{ - {44100, SampleRate_2_0::RATE_44100}, - {48000, SampleRate_2_0::RATE_48000}, - {88200, SampleRate_2_0::RATE_88200}, - {96000, SampleRate_2_0::RATE_96000}, - {176400, SampleRate_2_0::RATE_176400}, - {192000, SampleRate_2_0::RATE_192000}, - {16000, SampleRate_2_0::RATE_16000}, - {24000, SampleRate_2_0::RATE_24000}, - }; - const static std::unordered_map<int32_t, SampleRate_2_1> sample_rate_to_hidl_2_1_map{ {44100, SampleRate_2_1::RATE_44100}, @@ -211,20 +189,6 @@ const static std::unordered_map<LdacQualityIndex, LdacQualityIndex_2_0> {LdacQualityIndex::ABR, LdacQualityIndex_2_0::QUALITY_ABR}, }; -const static std::unordered_map<LeAudioMode, LeAudioMode_2_2> - leaudio_mode_to_hidl_map{ - {LeAudioMode::UNKNOWN, LeAudioMode_2_2::UNKNOWN}, - {LeAudioMode::UNICAST, LeAudioMode_2_2::UNICAST}, - {LeAudioMode::BROADCAST, LeAudioMode_2_2::BROADCAST}, - }; - -inline SessionType from_session_type_2_0( - const SessionType_2_0& session_type_hidl) { - auto it = session_type_2_0_to_aidl_map.find(session_type_hidl); - if (it != session_type_2_0_to_aidl_map.end()) return it->second; - return SessionType::UNKNOWN; -} - inline SessionType from_session_type_2_1( const SessionType_2_1& session_type_hidl) { auto it = session_type_2_1_to_aidl_map.find(session_type_hidl); @@ -232,6 +196,11 @@ inline SessionType from_session_type_2_1( return SessionType::UNKNOWN; } +inline SessionType from_session_type_2_0( + const SessionType_2_0& session_type_hidl) { + return from_session_type_2_1(static_cast<SessionType_2_1>(session_type_hidl)); +} + inline HidlStatus to_hidl_status(const BluetoothAudioStatus& status) { switch (status) { case BluetoothAudioStatus::SUCCESS: @@ -243,18 +212,19 @@ inline HidlStatus to_hidl_status(const BluetoothAudioStatus& status) { } } -inline SampleRate_2_0 to_hidl_sample_rate_2_0(const int32_t sample_rate_hz) { - auto it = sample_rate_to_hidl_2_0_map.find(sample_rate_hz); - if (it != sample_rate_to_hidl_2_0_map.end()) return it->second; - return SampleRate_2_0::RATE_UNKNOWN; -} - inline SampleRate_2_1 to_hidl_sample_rate_2_1(const int32_t sample_rate_hz) { auto it = sample_rate_to_hidl_2_1_map.find(sample_rate_hz); if (it != sample_rate_to_hidl_2_1_map.end()) return it->second; return SampleRate_2_1::RATE_UNKNOWN; } +inline SampleRate_2_0 to_hidl_sample_rate_2_0(const int32_t sample_rate_hz) { + auto it = sample_rate_to_hidl_2_1_map.find(sample_rate_hz); + if (it != sample_rate_to_hidl_2_1_map.end()) + return static_cast<SampleRate_2_0>(it->second); + return SampleRate_2_0::RATE_UNKNOWN; +} + inline BitsPerSample_2_0 to_hidl_bits_per_sample(const int8_t bit_per_sample) { switch (bit_per_sample) { case 16: @@ -449,18 +419,49 @@ inline Lc3Config_2_1 to_hidl_lc3_config_2_1( inline Lc3CodecConfig_2_1 to_hidl_leaudio_config_2_1( const LeAudioConfiguration& leaudio_config) { - auto& unicast_config = - leaudio_config.modeConfig - .get<LeAudioConfiguration::LeAudioModeConfig::unicastConfig>(); - - auto& le_codec_config = unicast_config.leAudioCodecConfig - .get<LeAudioCodecConfiguration::lc3Config>(); + Lc3CodecConfig_2_1 hidl_lc3_codec_config = { + .audioChannelAllocation = 0, + }; + if (leaudio_config.modeConfig.getTag() == + LeAudioConfiguration::LeAudioModeConfig::unicastConfig) { + auto& unicast_config = + leaudio_config.modeConfig + .get<LeAudioConfiguration::LeAudioModeConfig::unicastConfig>(); + if (unicast_config.leAudioCodecConfig.getTag() == + LeAudioCodecConfiguration::lc3Config) { + LOG(FATAL) << __func__ << ": unexpected codec type(vendor?)"; + } + auto& le_codec_config = unicast_config.leAudioCodecConfig + .get<LeAudioCodecConfiguration::lc3Config>(); - Lc3CodecConfig_2_1 hidl_lc3_codec_config; - hidl_lc3_codec_config.lc3Config = to_hidl_lc3_config_2_1(le_codec_config); + hidl_lc3_codec_config.lc3Config = to_hidl_lc3_config_2_1(le_codec_config); - hidl_lc3_codec_config.audioChannelAllocation = - unicast_config.streamMap.size(); + for (const auto& map : unicast_config.streamMap) { + hidl_lc3_codec_config.audioChannelAllocation |= + map.audioChannelAllocation; + } + } else { + // NOTE: Broadcast is not officially supported in HIDL + auto& bcast_config = + leaudio_config.modeConfig + .get<LeAudioConfiguration::LeAudioModeConfig::broadcastConfig>(); + if (bcast_config.streamMap.empty()) { + return hidl_lc3_codec_config; + } + if (bcast_config.streamMap[0].leAudioCodecConfig.getTag() != + LeAudioCodecConfiguration::lc3Config) { + LOG(FATAL) << __func__ << ": unexpected codec type(vendor?)"; + } + auto& le_codec_config = + bcast_config.streamMap[0] + .leAudioCodecConfig.get<LeAudioCodecConfiguration::lc3Config>(); + hidl_lc3_codec_config.lc3Config = to_hidl_lc3_config_2_1(le_codec_config); + + for (const auto& map : bcast_config.streamMap) { + hidl_lc3_codec_config.audioChannelAllocation |= + map.audioChannelAllocation; + } + } return hidl_lc3_codec_config; } @@ -468,13 +469,10 @@ inline Lc3CodecConfig_2_1 to_hidl_leaudio_config_2_1( inline LeAudioConfig_2_2 to_hidl_leaudio_config_2_2( const LeAudioConfiguration& leaudio_config) { LeAudioConfig_2_2 hidl_leaudio_config; - if (leaudio_mode_to_hidl_map.find(leaudio_config.mode) != - leaudio_mode_to_hidl_map.end()) { - hidl_leaudio_config.mode = leaudio_mode_to_hidl_map.at(leaudio_config.mode); - } if (leaudio_config.modeConfig.getTag() == LeAudioConfiguration::LeAudioModeConfig::unicastConfig) { + hidl_leaudio_config.mode = LeAudioMode_2_2::UNICAST; auto& unicast_config = leaudio_config.modeConfig .get<LeAudioConfiguration::LeAudioModeConfig::unicastConfig>(); @@ -497,6 +495,7 @@ inline LeAudioConfig_2_2 to_hidl_leaudio_config_2_2( } } else if (leaudio_config.modeConfig.getTag() == LeAudioConfiguration::LeAudioModeConfig::broadcastConfig) { + hidl_leaudio_config.mode = LeAudioMode_2_2::BROADCAST; auto bcast_config = leaudio_config.modeConfig .get<LeAudioConfiguration::LeAudioModeConfig::broadcastConfig>(); @@ -641,6 +640,12 @@ size_t HidlToAidlMiddleware_2_0::OutWritePcmData( from_session_type_2_0(session_type), buffer, bytes); } +size_t HidlToAidlMiddleware_2_0::InReadPcmData( + const SessionType_2_0& session_type, void* buffer, size_t bytes) { + return BluetoothAudioSessionControl::InReadPcmData( + from_session_type_2_0(session_type), buffer, bytes); +} + bool HidlToAidlMiddleware_2_0::IsAidlAvailable() { return BluetoothAudioSession::IsAidlAvailable(); } @@ -761,6 +766,13 @@ void HidlToAidlMiddleware_2_2::StopStream(const SessionType_2_1& session_type) { from_session_type_2_1(session_type)); } +void HidlToAidlMiddleware_2_2::UpdateTracksMetadata( + const SessionType_2_1& session_type, + const struct source_metadata* source_metadata) { + return BluetoothAudioSessionControl::UpdateSourceMetadata( + from_session_type_2_1(session_type), *source_metadata); +} + void HidlToAidlMiddleware_2_2::UpdateSinkMetadata( const SessionType_2_1& session_type, const struct sink_metadata* sink_metadata) { |