Loading system/bta/le_audio/client_parser_test.cc +2 −2 Original line number Diff line number Diff line Loading @@ -548,7 +548,7 @@ TEST(LeAudioClientParserTest, testParsePacsVendorCodecRecords) { } TEST(LeAudioClientParserTest, testParseAudioLocationsInvalidLength) { types::AudioLocations locations = codec_spec_conf::kLeAudioLocationNotAllowed; types::AudioLocations locations = codec_spec_conf::kLeAudioLocationMonoAudio; const uint8_t value1[] = { 0x01, 0x02, Loading @@ -563,7 +563,7 @@ TEST(LeAudioClientParserTest, testParseAudioLocationsInvalidLength) { } TEST(LeAudioClientParserTest, testParseAudioLocations) { types::AudioLocations locations = codec_spec_conf::kLeAudioLocationNotAllowed; types::AudioLocations locations = codec_spec_conf::kLeAudioLocationMonoAudio; const uint8_t value1[] = {0x01, 0x02, 0x03, 0x04}; ParseAudioLocations(locations, sizeof(value1), value1); ASSERT_EQ(locations, 0x04030201u); Loading system/bta/le_audio/device_groups.cc +7 −6 Original line number Diff line number Diff line Loading @@ -832,8 +832,8 @@ LeAudioDeviceGroup::GetAudioSetConfigurationRequirements(types::LeAudioContextTy ? device->snk_audio_locations_ : device->src_audio_locations_; if (dev_locations.none()) { log::warn("Device {} has no locations for direction: {}", device->address_, (int)direction); continue; log::warn("Device {} has no specified locations for direction: {}", device->address_, (int)direction); } has_location.get(direction) = true; Loading Loading @@ -932,8 +932,8 @@ types::BidirectionalPair<AudioContexts> LeAudioDeviceGroup::GetLatestAvailableCo } bool LeAudioDeviceGroup::ReloadAudioLocations(void) { AudioLocations updated_snk_audio_locations_ = codec_spec_conf::kLeAudioLocationNotAllowed; AudioLocations updated_src_audio_locations_ = codec_spec_conf::kLeAudioLocationNotAllowed; AudioLocations updated_snk_audio_locations_ = codec_spec_conf::kLeAudioLocationMonoAudio; AudioLocations updated_src_audio_locations_ = codec_spec_conf::kLeAudioLocationMonoAudio; for (const auto& device : leAudioDevices_) { if (device.expired() || Loading Loading @@ -1048,7 +1048,8 @@ types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupSinkStrategy() c log::debug("audio location 0x{:04x}", snk_audio_locations_.to_ulong()); if (!(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) || !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight) || snk_audio_locations_.none()) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } Loading Loading @@ -1341,7 +1342,7 @@ bool CheckIfStrategySupported(types::LeAudioConfigurationStrategy strategy, switch (strategy) { case types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE: return audio_locations.any(); return true; case types::LeAudioConfigurationStrategy::STEREO_TWO_CISES_PER_DEVICE: if ((audio_locations.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) && (audio_locations.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { Loading system/bta/le_audio/devices.cc +5 −0 Original line number Diff line number Diff line Loading @@ -298,6 +298,11 @@ bool LeAudioDevice::ConfigureAses(const set_configurations::AudioSetConfiguratio return true; } // No locations bits means mono audio if (audio_locations.none()) { return true; } // Filter-out not matching audio locations return (cfg.codec.params.GetAsCoreCodecConfig().audio_channel_allocation.value() & audio_locations.to_ulong()) != 0; Loading system/bta/le_audio/devices_test.cc +18 −0 Original line number Diff line number Diff line Loading @@ -596,6 +596,14 @@ protected: bit_pos++; } if (split_allocations.empty()) { // Add a single ASE mono configuration endpoint_cfg.codec.params.Add(codec_spec_conf::kLeAudioLtvTypeAudioChannelAllocation, (uint32_t)codec_spec_conf::kLeAudioLocationMonoAudio); ase_confs.push_back(endpoint_cfg); continue; } // Pick a number of allocations from the list (depending on supported // channel counts per ASE) and create an ASE configuration. while (split_allocations.size()) { Loading Loading @@ -1598,6 +1606,16 @@ TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_mono_microphone TestGroupAseConfiguration(LeAudioContextType::RINGTONE, &data, 1); } TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_mono_microphone_loc0) { LeAudioDevice* banded_headset = AddTestDevice(2, 1, 0, 0, false, false, codec_spec_conf::kLeAudioLocationStereo, codec_spec_conf::kLeAudioLocationMonoAudio); TestGroupAseConfigurationData data({banded_headset, kLeAudioCodecChannelCountTwoChannel, kLeAudioCodecChannelCountSingleChannel, 2, 1}); TestGroupAseConfiguration(LeAudioContextType::RINGTONE, &data, 1); } TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_stereo_microphone) { LeAudioDevice* banded_headset = AddTestDevice(2, 2); TestGroupAseConfigurationData data( Loading system/bta/le_audio/le_audio_types.h +1 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ constexpr uint8_t kLeAudioCodecFrameDur7500us = 0x00; constexpr uint8_t kLeAudioCodecFrameDur10000us = 0x01; /* Audio Allocations */ constexpr uint32_t kLeAudioLocationNotAllowed = 0x00000000; constexpr uint32_t kLeAudioLocationMonoAudio = 0x00000000; constexpr uint32_t kLeAudioLocationFrontLeft = 0x00000001; constexpr uint32_t kLeAudioLocationFrontRight = 0x00000002; constexpr uint32_t kLeAudioLocationFrontCenter = 0x00000004; Loading Loading
system/bta/le_audio/client_parser_test.cc +2 −2 Original line number Diff line number Diff line Loading @@ -548,7 +548,7 @@ TEST(LeAudioClientParserTest, testParsePacsVendorCodecRecords) { } TEST(LeAudioClientParserTest, testParseAudioLocationsInvalidLength) { types::AudioLocations locations = codec_spec_conf::kLeAudioLocationNotAllowed; types::AudioLocations locations = codec_spec_conf::kLeAudioLocationMonoAudio; const uint8_t value1[] = { 0x01, 0x02, Loading @@ -563,7 +563,7 @@ TEST(LeAudioClientParserTest, testParseAudioLocationsInvalidLength) { } TEST(LeAudioClientParserTest, testParseAudioLocations) { types::AudioLocations locations = codec_spec_conf::kLeAudioLocationNotAllowed; types::AudioLocations locations = codec_spec_conf::kLeAudioLocationMonoAudio; const uint8_t value1[] = {0x01, 0x02, 0x03, 0x04}; ParseAudioLocations(locations, sizeof(value1), value1); ASSERT_EQ(locations, 0x04030201u); Loading
system/bta/le_audio/device_groups.cc +7 −6 Original line number Diff line number Diff line Loading @@ -832,8 +832,8 @@ LeAudioDeviceGroup::GetAudioSetConfigurationRequirements(types::LeAudioContextTy ? device->snk_audio_locations_ : device->src_audio_locations_; if (dev_locations.none()) { log::warn("Device {} has no locations for direction: {}", device->address_, (int)direction); continue; log::warn("Device {} has no specified locations for direction: {}", device->address_, (int)direction); } has_location.get(direction) = true; Loading Loading @@ -932,8 +932,8 @@ types::BidirectionalPair<AudioContexts> LeAudioDeviceGroup::GetLatestAvailableCo } bool LeAudioDeviceGroup::ReloadAudioLocations(void) { AudioLocations updated_snk_audio_locations_ = codec_spec_conf::kLeAudioLocationNotAllowed; AudioLocations updated_src_audio_locations_ = codec_spec_conf::kLeAudioLocationNotAllowed; AudioLocations updated_snk_audio_locations_ = codec_spec_conf::kLeAudioLocationMonoAudio; AudioLocations updated_src_audio_locations_ = codec_spec_conf::kLeAudioLocationMonoAudio; for (const auto& device : leAudioDevices_) { if (device.expired() || Loading Loading @@ -1048,7 +1048,8 @@ types::LeAudioConfigurationStrategy LeAudioDeviceGroup::GetGroupSinkStrategy() c log::debug("audio location 0x{:04x}", snk_audio_locations_.to_ulong()); if (!(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) || !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { !(snk_audio_locations_.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight) || snk_audio_locations_.none()) { return types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE; } Loading Loading @@ -1341,7 +1342,7 @@ bool CheckIfStrategySupported(types::LeAudioConfigurationStrategy strategy, switch (strategy) { case types::LeAudioConfigurationStrategy::MONO_ONE_CIS_PER_DEVICE: return audio_locations.any(); return true; case types::LeAudioConfigurationStrategy::STEREO_TWO_CISES_PER_DEVICE: if ((audio_locations.to_ulong() & codec_spec_conf::kLeAudioLocationAnyLeft) && (audio_locations.to_ulong() & codec_spec_conf::kLeAudioLocationAnyRight)) { Loading
system/bta/le_audio/devices.cc +5 −0 Original line number Diff line number Diff line Loading @@ -298,6 +298,11 @@ bool LeAudioDevice::ConfigureAses(const set_configurations::AudioSetConfiguratio return true; } // No locations bits means mono audio if (audio_locations.none()) { return true; } // Filter-out not matching audio locations return (cfg.codec.params.GetAsCoreCodecConfig().audio_channel_allocation.value() & audio_locations.to_ulong()) != 0; Loading
system/bta/le_audio/devices_test.cc +18 −0 Original line number Diff line number Diff line Loading @@ -596,6 +596,14 @@ protected: bit_pos++; } if (split_allocations.empty()) { // Add a single ASE mono configuration endpoint_cfg.codec.params.Add(codec_spec_conf::kLeAudioLtvTypeAudioChannelAllocation, (uint32_t)codec_spec_conf::kLeAudioLocationMonoAudio); ase_confs.push_back(endpoint_cfg); continue; } // Pick a number of allocations from the list (depending on supported // channel counts per ASE) and create an ASE configuration. while (split_allocations.size()) { Loading Loading @@ -1598,6 +1606,16 @@ TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_mono_microphone TestGroupAseConfiguration(LeAudioContextType::RINGTONE, &data, 1); } TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_mono_microphone_loc0) { LeAudioDevice* banded_headset = AddTestDevice(2, 1, 0, 0, false, false, codec_spec_conf::kLeAudioLocationStereo, codec_spec_conf::kLeAudioLocationMonoAudio); TestGroupAseConfigurationData data({banded_headset, kLeAudioCodecChannelCountTwoChannel, kLeAudioCodecChannelCountSingleChannel, 2, 1}); TestGroupAseConfiguration(LeAudioContextType::RINGTONE, &data, 1); } TEST_P(LeAudioAseConfigurationTest, test_banded_headset_ringtone_stereo_microphone) { LeAudioDevice* banded_headset = AddTestDevice(2, 2); TestGroupAseConfigurationData data( Loading
system/bta/le_audio/le_audio_types.h +1 −1 Original line number Diff line number Diff line Loading @@ -127,7 +127,7 @@ constexpr uint8_t kLeAudioCodecFrameDur7500us = 0x00; constexpr uint8_t kLeAudioCodecFrameDur10000us = 0x01; /* Audio Allocations */ constexpr uint32_t kLeAudioLocationNotAllowed = 0x00000000; constexpr uint32_t kLeAudioLocationMonoAudio = 0x00000000; constexpr uint32_t kLeAudioLocationFrontLeft = 0x00000001; constexpr uint32_t kLeAudioLocationFrontRight = 0x00000002; constexpr uint32_t kLeAudioLocationFrontCenter = 0x00000004; Loading