Loading system/bta/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -560,6 +560,7 @@ cc_test { "le_audio/client_audio_test.cc", "le_audio/client_parser.cc", "le_audio/client_parser_test.cc", "le_audio/content_control_id_keeper.cc", "le_audio/devices.cc", "le_audio/devices_test.cc", "le_audio/le_audio_set_configuration_provider_json.cc", Loading system/bta/le_audio/devices.cc +29 −2 Original line number Diff line number Diff line Loading @@ -839,6 +839,33 @@ uint8_t LeAudioDeviceGroup::GetFirstFreeCisId(CisType cis_type) { return kInvalidCisId; } types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupStrategy(void) { /* Simple strategy picker */ LOG_INFO(" Group %d size %d", group_id_, Size()); if (Size() > 1) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } LOG_INFO("audio location 0x%04lx", snk_audio_locations_.to_ulong()); if (!(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) || !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } auto device = GetFirstDevice(); auto channel_cnt = device->GetLc3SupportedChannelCount(types::kLeAudioDirectionSink); LOG_INFO("Channel count for group %d is %d (device %s)", group_id_, channel_cnt, device->address_.ToString().c_str()); if (channel_cnt == 1) { return types::LeAudioConfigurationStrategy::STEREO_TWO_CISES_PER_DEVICE; } return types::LeAudioConfigurationStrategy::STEREO_ONE_CIS_PER_DEVICE; } void LeAudioDeviceGroup::CigGenerateCisIds( types::LeAudioContextType context_type) { LOG_INFO("Group %p, group_id: %d, context_type: %s", this, group_id_, Loading @@ -855,8 +882,8 @@ void LeAudioDeviceGroup::CigGenerateCisIds( uint8_t cis_count_bidir = 0; uint8_t cis_count_unidir_sink = 0; uint8_t cis_count_unidir_source = 0; get_cis_count(confs, &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); get_cis_count(confs, GetGroupStrategy(), &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); uint8_t idx = 0; while (cis_count_bidir > 0) { Loading system/bta/le_audio/devices.h +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ class LeAudioDeviceGroup { LeAudioDevice* GetFirstDevice(void); LeAudioDevice* GetFirstDeviceWithActiveContext( types::LeAudioContextType context_type); le_audio::types::LeAudioConfigurationStrategy GetGroupStrategy(void); LeAudioDevice* GetNextDevice(LeAudioDevice* leAudioDevice); LeAudioDevice* GetNextDeviceWithActiveContext( LeAudioDevice* leAudioDevice, types::LeAudioContextType context_type); Loading system/bta/le_audio/le_audio_types.cc +13 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ static uint8_t min_req_devices_cnt( } void get_cis_count(const AudioSetConfigurations* audio_set_confs, types::LeAudioConfigurationStrategy strategy, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source) { for (auto audio_set_conf : *audio_set_confs) { Loading @@ -78,7 +79,15 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, uint8_t unidir_sink_count = 0; uint8_t unidir_source_count = 0; LOG_INFO("%s ", audio_set_conf->name.c_str()); bool stategy_mismatch = false; for (auto ent : (*audio_set_conf).confs) { if (ent.strategy != strategy) { LOG_INFO("Strategy does not match (%d != %d)- skip this configuration", static_cast<int>(ent.strategy), static_cast<int>(strategy)); stategy_mismatch = true; break; } if (ent.direction == kLeAudioDirectionSink) { snk_src_pair.first += ent.device_cnt; } Loading @@ -87,6 +96,10 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, } } if (stategy_mismatch) { continue; } bidir_count = std::min(snk_src_pair.first, snk_src_pair.second); unidir_sink_count = ((snk_src_pair.first - bidir_count) > 0) ? (snk_src_pair.first - bidir_count) Loading system/bta/le_audio/le_audio_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ static constexpr uint32_t kChannelAllocationStereo = /* Declarations */ void get_cis_count(const AudioSetConfigurations* audio_set_configurations, types::LeAudioConfigurationStrategy strategy, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source); bool check_if_may_cover_scenario( Loading Loading
system/bta/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -560,6 +560,7 @@ cc_test { "le_audio/client_audio_test.cc", "le_audio/client_parser.cc", "le_audio/client_parser_test.cc", "le_audio/content_control_id_keeper.cc", "le_audio/devices.cc", "le_audio/devices_test.cc", "le_audio/le_audio_set_configuration_provider_json.cc", Loading
system/bta/le_audio/devices.cc +29 −2 Original line number Diff line number Diff line Loading @@ -839,6 +839,33 @@ uint8_t LeAudioDeviceGroup::GetFirstFreeCisId(CisType cis_type) { return kInvalidCisId; } types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupStrategy(void) { /* Simple strategy picker */ LOG_INFO(" Group %d size %d", group_id_, Size()); if (Size() > 1) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } LOG_INFO("audio location 0x%04lx", snk_audio_locations_.to_ulong()); if (!(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) || !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } auto device = GetFirstDevice(); auto channel_cnt = device->GetLc3SupportedChannelCount(types::kLeAudioDirectionSink); LOG_INFO("Channel count for group %d is %d (device %s)", group_id_, channel_cnt, device->address_.ToString().c_str()); if (channel_cnt == 1) { return types::LeAudioConfigurationStrategy::STEREO_TWO_CISES_PER_DEVICE; } return types::LeAudioConfigurationStrategy::STEREO_ONE_CIS_PER_DEVICE; } void LeAudioDeviceGroup::CigGenerateCisIds( types::LeAudioContextType context_type) { LOG_INFO("Group %p, group_id: %d, context_type: %s", this, group_id_, Loading @@ -855,8 +882,8 @@ void LeAudioDeviceGroup::CigGenerateCisIds( uint8_t cis_count_bidir = 0; uint8_t cis_count_unidir_sink = 0; uint8_t cis_count_unidir_source = 0; get_cis_count(confs, &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); get_cis_count(confs, GetGroupStrategy(), &cis_count_bidir, &cis_count_unidir_sink, &cis_count_unidir_source); uint8_t idx = 0; while (cis_count_bidir > 0) { Loading
system/bta/le_audio/devices.h +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ class LeAudioDeviceGroup { LeAudioDevice* GetFirstDevice(void); LeAudioDevice* GetFirstDeviceWithActiveContext( types::LeAudioContextType context_type); le_audio::types::LeAudioConfigurationStrategy GetGroupStrategy(void); LeAudioDevice* GetNextDevice(LeAudioDevice* leAudioDevice); LeAudioDevice* GetNextDeviceWithActiveContext( LeAudioDevice* leAudioDevice, types::LeAudioContextType context_type); Loading
system/bta/le_audio/le_audio_types.cc +13 −0 Original line number Diff line number Diff line Loading @@ -70,6 +70,7 @@ static uint8_t min_req_devices_cnt( } void get_cis_count(const AudioSetConfigurations* audio_set_confs, types::LeAudioConfigurationStrategy strategy, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source) { for (auto audio_set_conf : *audio_set_confs) { Loading @@ -78,7 +79,15 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, uint8_t unidir_sink_count = 0; uint8_t unidir_source_count = 0; LOG_INFO("%s ", audio_set_conf->name.c_str()); bool stategy_mismatch = false; for (auto ent : (*audio_set_conf).confs) { if (ent.strategy != strategy) { LOG_INFO("Strategy does not match (%d != %d)- skip this configuration", static_cast<int>(ent.strategy), static_cast<int>(strategy)); stategy_mismatch = true; break; } if (ent.direction == kLeAudioDirectionSink) { snk_src_pair.first += ent.device_cnt; } Loading @@ -87,6 +96,10 @@ void get_cis_count(const AudioSetConfigurations* audio_set_confs, } } if (stategy_mismatch) { continue; } bidir_count = std::min(snk_src_pair.first, snk_src_pair.second); unidir_sink_count = ((snk_src_pair.first - bidir_count) > 0) ? (snk_src_pair.first - bidir_count) Loading
system/bta/le_audio/le_audio_types.h +1 −0 Original line number Diff line number Diff line Loading @@ -667,6 +667,7 @@ static constexpr uint32_t kChannelAllocationStereo = /* Declarations */ void get_cis_count(const AudioSetConfigurations* audio_set_configurations, types::LeAudioConfigurationStrategy strategy, uint8_t* cis_count_bidir, uint8_t* cis_count_unidir_sink, uint8_t* cis_count_unidir_source); bool check_if_may_cover_scenario( Loading