Loading system/bta/le_audio/devices.cc +12 −0 Original line number Diff line number Diff line Loading @@ -1413,6 +1413,18 @@ bool LeAudioDeviceGroup::IsAudioSetConfigurationSupported( } } // when disabling 32k dual mic, for later join case, we need to // make sure the device is always choosing the config that its // sampling rate matches with the sampling rate which is used // when all devices in the group are connected. bool dual_bidirection_swb_supported_ = osi_property_get_bool( "bluetooth.leaudio.dual_bidirection_swb.supported", true); if (Size() > 1 && !dual_bidirection_swb_supported_ && AudioSetConfigurationProvider::Get()->CheckConfigurationIsBiDirSwb( *audio_set_conf)) { return false; } LOG_DEBUG("Chosen ASE Configuration for group: %d, configuration: %s", this->group_id_, audio_set_conf->name.c_str()); return true; Loading system/bta/le_audio/le_audio_set_configuration_provider.h +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ class AudioSetConfigurationProvider { static void Cleanup(); virtual const set_configurations::AudioSetConfigurations* GetConfigurations( ::le_audio::types::LeAudioContextType content_type) const; virtual bool CheckConfigurationIsBiDirSwb( const set_configurations::AudioSetConfiguration& set_configuration) const; private: struct impl; Loading system/bta/le_audio/le_audio_set_configuration_provider_json.cc +22 −9 Original line number Diff line number Diff line Loading @@ -71,10 +71,8 @@ struct AudioSetConfigurationProviderJson { static constexpr auto kDefaultScenario = "Media"; AudioSetConfigurationProviderJson(types::CodecLocation location) { dual_swb_bidirection_supported_ = osi_property_get_bool( "persist.bluetooth.leaudio_dual_bidirection_swb." "supported", true); dual_bidirection_swb_supported_ = osi_property_get_bool( "bluetooth.leaudio.dual_bidirection_swb.supported", true); ASSERT_LOG(LoadContent(kLeAudioSetConfigs, kLeAudioSetScenarios, location), ": Unable to load le audio set configuration files."); } Loading Loading @@ -166,7 +164,7 @@ struct AudioSetConfigurationProviderJson { /* property to check if bidirectional sampling frequency >= 32k dual mic is * supported or not */ bool dual_swb_bidirection_supported_; bool dual_bidirection_swb_supported_; static const bluetooth::le_audio::CodecSpecificConfiguration* LookupCodecSpecificParam( Loading Loading @@ -435,7 +433,7 @@ struct AudioSetConfigurationProviderJson { } } if (!dual_swb_bidirection_supported_) { if (!dual_bidirection_swb_supported_) { if ((dual_dev_one_chan_stereo_sink_swb && dual_dev_one_chan_stereo_source_swb) || (single_dev_one_chan_stereo_sink_swb && Loading Loading @@ -525,9 +523,11 @@ struct AudioSetConfigurationProviderJson { LOG_DEBUG(": Updating %d config entries.", flat_configs->size()); for (auto const& flat_cfg : *flat_configs) { configurations_.insert({flat_cfg->name()->str(), AudioSetConfigurationFromFlat( flat_cfg, &codec_cfgs, &qos_cfgs, location)}); auto configuration = AudioSetConfigurationFromFlat(flat_cfg, &codec_cfgs, &qos_cfgs, location); if (!configuration.confs.empty()) { configurations_.insert({flat_cfg->name()->str(), configuration}); } } return true; Loading Loading @@ -740,4 +740,17 @@ AudioSetConfigurationProvider::GetConfigurations( return nullptr; } bool AudioSetConfigurationProvider::CheckConfigurationIsBiDirSwb( const set_configurations::AudioSetConfiguration& set_configuration) const { uint8_t dir = 0; for (const auto& conf : set_configuration.confs) { if (conf.codec.GetConfigSamplingFrequency() >= le_audio::LeAudioCodecConfiguration::kSampleRate32000) { dir |= conf.direction; } } return dir == le_audio::types::kLeAudioDirectionBoth; } } // namespace le_audio Loading
system/bta/le_audio/devices.cc +12 −0 Original line number Diff line number Diff line Loading @@ -1413,6 +1413,18 @@ bool LeAudioDeviceGroup::IsAudioSetConfigurationSupported( } } // when disabling 32k dual mic, for later join case, we need to // make sure the device is always choosing the config that its // sampling rate matches with the sampling rate which is used // when all devices in the group are connected. bool dual_bidirection_swb_supported_ = osi_property_get_bool( "bluetooth.leaudio.dual_bidirection_swb.supported", true); if (Size() > 1 && !dual_bidirection_swb_supported_ && AudioSetConfigurationProvider::Get()->CheckConfigurationIsBiDirSwb( *audio_set_conf)) { return false; } LOG_DEBUG("Chosen ASE Configuration for group: %d, configuration: %s", this->group_id_, audio_set_conf->name.c_str()); return true; Loading
system/bta/le_audio/le_audio_set_configuration_provider.h +2 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,8 @@ class AudioSetConfigurationProvider { static void Cleanup(); virtual const set_configurations::AudioSetConfigurations* GetConfigurations( ::le_audio::types::LeAudioContextType content_type) const; virtual bool CheckConfigurationIsBiDirSwb( const set_configurations::AudioSetConfiguration& set_configuration) const; private: struct impl; Loading
system/bta/le_audio/le_audio_set_configuration_provider_json.cc +22 −9 Original line number Diff line number Diff line Loading @@ -71,10 +71,8 @@ struct AudioSetConfigurationProviderJson { static constexpr auto kDefaultScenario = "Media"; AudioSetConfigurationProviderJson(types::CodecLocation location) { dual_swb_bidirection_supported_ = osi_property_get_bool( "persist.bluetooth.leaudio_dual_bidirection_swb." "supported", true); dual_bidirection_swb_supported_ = osi_property_get_bool( "bluetooth.leaudio.dual_bidirection_swb.supported", true); ASSERT_LOG(LoadContent(kLeAudioSetConfigs, kLeAudioSetScenarios, location), ": Unable to load le audio set configuration files."); } Loading Loading @@ -166,7 +164,7 @@ struct AudioSetConfigurationProviderJson { /* property to check if bidirectional sampling frequency >= 32k dual mic is * supported or not */ bool dual_swb_bidirection_supported_; bool dual_bidirection_swb_supported_; static const bluetooth::le_audio::CodecSpecificConfiguration* LookupCodecSpecificParam( Loading Loading @@ -435,7 +433,7 @@ struct AudioSetConfigurationProviderJson { } } if (!dual_swb_bidirection_supported_) { if (!dual_bidirection_swb_supported_) { if ((dual_dev_one_chan_stereo_sink_swb && dual_dev_one_chan_stereo_source_swb) || (single_dev_one_chan_stereo_sink_swb && Loading Loading @@ -525,9 +523,11 @@ struct AudioSetConfigurationProviderJson { LOG_DEBUG(": Updating %d config entries.", flat_configs->size()); for (auto const& flat_cfg : *flat_configs) { configurations_.insert({flat_cfg->name()->str(), AudioSetConfigurationFromFlat( flat_cfg, &codec_cfgs, &qos_cfgs, location)}); auto configuration = AudioSetConfigurationFromFlat(flat_cfg, &codec_cfgs, &qos_cfgs, location); if (!configuration.confs.empty()) { configurations_.insert({flat_cfg->name()->str(), configuration}); } } return true; Loading Loading @@ -740,4 +740,17 @@ AudioSetConfigurationProvider::GetConfigurations( return nullptr; } bool AudioSetConfigurationProvider::CheckConfigurationIsBiDirSwb( const set_configurations::AudioSetConfiguration& set_configuration) const { uint8_t dir = 0; for (const auto& conf : set_configuration.confs) { if (conf.codec.GetConfigSamplingFrequency() >= le_audio::LeAudioCodecConfiguration::kSampleRate32000) { dir |= conf.direction; } } return dir == le_audio::types::kLeAudioDirectionBoth; } } // namespace le_audio