Loading system/bta/le_audio/broadcaster/broadcaster.cc +1 −4 Original line number Diff line number Diff line Loading @@ -874,8 +874,7 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks { } virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const source_metadata_t& source_metadata) override { std::vector<struct playback_track_metadata> source_metadata) override { LOG_INFO(); if (!instance) return; Loading @@ -894,8 +893,6 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks { */ instance->UpdateStreamingContextTypeOnAllSubgroups(contexts.to_ulong()); } do_update_metadata_promise.set_value(); } private: Loading system/bta/le_audio/broadcaster/broadcaster_test.cc +8 −15 Original line number Diff line number Diff line Loading @@ -512,21 +512,14 @@ TEST_F(BroadcasterTest, UpdateMetadataFromAudioTrackMetadata) { ON_CALL(*sm, GetBroadcastAnnouncement()) .WillByDefault(ReturnRef(announcement)); std::promise<void> do_update_metadata_promise; struct playback_track_metadata tracks_[] = { {AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0}, std::vector<struct playback_track_metadata> multitrack_source_metadata = { {{AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0}, {AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, 0}, {AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING, AUDIO_CONTENT_TYPE_SPEECH, 0}, {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}}; {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}}}; source_metadata_t multitrack_source_metadata = {.track_count = 4, .tracks = &tracks_[0]}; auto do_update_metadata_future = do_update_metadata_promise.get_future(); audio_receiver->OnAudioMetadataUpdate(std::move(do_update_metadata_promise), multitrack_source_metadata); do_update_metadata_future.wait_for(3s); audio_receiver->OnAudioMetadataUpdate(multitrack_source_metadata); // Verify ccid ASSERT_NE(ccid_list.size(), 0u); Loading system/bta/le_audio/client.cc +16 −18 Original line number Diff line number Diff line Loading @@ -3110,8 +3110,12 @@ class LeAudioClientImpl : public LeAudioClient { if ((available_contexts & AudioContexts(static_cast<T>(LeAudioContextType::RINGTONE))) .any()) .any()) { if (!in_call_) { return LeAudioContextType::MEDIA; } return LeAudioContextType::RINGTONE; } if ((available_contexts & AudioContexts(static_cast<T>(LeAudioContextType::MEDIA))) Loading Loading @@ -3163,7 +3167,8 @@ class LeAudioClientImpl : public LeAudioClient { return true; } void OnAudioMetadataUpdate(const source_metadata_t& source_metadata) { void OnAudioMetadataUpdate( std::vector<struct playback_track_metadata> source_metadata) { if (active_group_id_ == bluetooth::groups::kGroupUnknown) { LOG(WARNING) << ", cannot start streaming if no active group set"; return; Loading Loading @@ -3240,24 +3245,20 @@ class LeAudioClientImpl : public LeAudioClient { } } void OnAudioSourceMetadataUpdate(const sink_metadata_t& sink_metadata) { auto tracks = sink_metadata.tracks; auto track_count = sink_metadata.track_count; void OnAudioSourceMetadataUpdate( std::vector<struct record_track_metadata> sink_metadata) { bool is_audio_source_invalid = true; while (track_count) { for (auto& track : sink_metadata) { LOG_INFO( "%s: source=%d, gain=%f, destination device=%d, " "destination device address=%.32s", __func__, tracks->source, tracks->gain, tracks->dest_device, tracks->dest_device_address); __func__, track.source, track.gain, track.dest_device, track.dest_device_address); /* Don't differentiate source types, just check if it's valid */ if (is_audio_source_invalid && tracks->source != AUDIO_SOURCE_INVALID) if (is_audio_source_invalid && track.source != AUDIO_SOURCE_INVALID) is_audio_source_invalid = false; --track_count; ++tracks; } auto group = aseGroups_.FindById(active_group_id_); Loading Loading @@ -3822,10 +3823,8 @@ class LeAudioClientAudioSinkReceiverImpl } void OnAudioMetadataUpdate( std::promise<void> do_metadata_update_promise, const source_metadata_t& source_metadata) override { std::vector<struct playback_track_metadata> source_metadata) override { if (instance) instance->OnAudioMetadataUpdate(source_metadata); do_metadata_update_promise.set_value(); } }; Loading @@ -3840,10 +3839,9 @@ class LeAudioClientAudioSourceReceiverImpl if (instance) instance->OnAudioSourceResume(); } void OnAudioMetadataUpdate(std::promise<void> do_metadata_update_promise, const sink_metadata_t& sink_metadata) override { void OnAudioMetadataUpdate( std::vector<struct record_track_metadata> sink_metadata) override { if (instance) instance->OnAudioSourceMetadataUpdate(sink_metadata); do_metadata_update_promise.set_value(); } }; Loading system/bta/le_audio/client_audio.cc +12 −13 Original line number Diff line number Diff line Loading @@ -191,18 +191,18 @@ bool LeAudioClientAudioSource::SinkOnMetadataUpdateReq( return false; } std::vector<struct playback_track_metadata> metadata; for (size_t i = 0; i < source_metadata.track_count; i++) { metadata.push_back(source_metadata.tracks[i]); } // Call OnAudioSuspend and block till it returns. std::promise<void> do_update_metadata_promise; std::future<void> do_update_metadata_future = do_update_metadata_promise.get_future(); bt_status_t status = do_in_main_thread( FROM_HERE, base::BindOnce(&LeAudioClientAudioSinkReceiver::OnAudioMetadataUpdate, base::Unretained(audioSinkReceiver_), std::move(do_update_metadata_promise), source_metadata)); base::Unretained(audioSinkReceiver_), metadata)); if (status == BT_STATUS_SUCCESS) { do_update_metadata_future.wait(); return true; } Loading Loading @@ -262,18 +262,17 @@ bool LeAudioUnicastClientAudioSink::SourceOnMetadataUpdateReq( return false; } // Call OnAudioSuspend and block till it returns. std::promise<void> do_update_metadata_promise; std::future<void> do_update_metadata_future = do_update_metadata_promise.get_future(); std::vector<struct record_track_metadata> metadata; for (size_t i = 0; i < sink_metadata.track_count; i++) { metadata.push_back(sink_metadata.tracks[i]); } bt_status_t status = do_in_main_thread( FROM_HERE, base::BindOnce(&LeAudioClientAudioSourceReceiver::OnAudioMetadataUpdate, base::Unretained(audioSourceReceiver_), std::move(do_update_metadata_promise), sink_metadata)); base::Unretained(audioSourceReceiver_), metadata)); if (status == BT_STATUS_SUCCESS) { do_update_metadata_future.wait(); return true; } Loading system/bta/le_audio/client_audio.h +2 −4 Original line number Diff line number Diff line Loading @@ -29,8 +29,7 @@ class LeAudioClientAudioSinkReceiver { virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0; virtual void OnAudioResume(void) = 0; virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const source_metadata_t& source_metadata) = 0; std::vector<struct playback_track_metadata> source_metadata) = 0; }; class LeAudioClientAudioSourceReceiver { public: Loading @@ -38,8 +37,7 @@ class LeAudioClientAudioSourceReceiver { virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0; virtual void OnAudioResume(void) = 0; virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const sink_metadata_t& sink_metadata) = 0; std::vector<struct record_track_metadata> sink_metadata) = 0; }; /* Represents configuration of audio codec, as exchanged between le audio and Loading Loading
system/bta/le_audio/broadcaster/broadcaster.cc +1 −4 Original line number Diff line number Diff line Loading @@ -874,8 +874,7 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks { } virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const source_metadata_t& source_metadata) override { std::vector<struct playback_track_metadata> source_metadata) override { LOG_INFO(); if (!instance) return; Loading @@ -894,8 +893,6 @@ class LeAudioBroadcasterImpl : public LeAudioBroadcaster, public BigCallbacks { */ instance->UpdateStreamingContextTypeOnAllSubgroups(contexts.to_ulong()); } do_update_metadata_promise.set_value(); } private: Loading
system/bta/le_audio/broadcaster/broadcaster_test.cc +8 −15 Original line number Diff line number Diff line Loading @@ -512,21 +512,14 @@ TEST_F(BroadcasterTest, UpdateMetadataFromAudioTrackMetadata) { ON_CALL(*sm, GetBroadcastAnnouncement()) .WillByDefault(ReturnRef(announcement)); std::promise<void> do_update_metadata_promise; struct playback_track_metadata tracks_[] = { {AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0}, std::vector<struct playback_track_metadata> multitrack_source_metadata = { {{AUDIO_USAGE_GAME, AUDIO_CONTENT_TYPE_SONIFICATION, 0}, {AUDIO_USAGE_MEDIA, AUDIO_CONTENT_TYPE_MUSIC, 0}, {AUDIO_USAGE_VOICE_COMMUNICATION_SIGNALLING, AUDIO_CONTENT_TYPE_SPEECH, 0}, {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}}; {AUDIO_USAGE_UNKNOWN, AUDIO_CONTENT_TYPE_UNKNOWN, 0}}}; source_metadata_t multitrack_source_metadata = {.track_count = 4, .tracks = &tracks_[0]}; auto do_update_metadata_future = do_update_metadata_promise.get_future(); audio_receiver->OnAudioMetadataUpdate(std::move(do_update_metadata_promise), multitrack_source_metadata); do_update_metadata_future.wait_for(3s); audio_receiver->OnAudioMetadataUpdate(multitrack_source_metadata); // Verify ccid ASSERT_NE(ccid_list.size(), 0u); Loading
system/bta/le_audio/client.cc +16 −18 Original line number Diff line number Diff line Loading @@ -3110,8 +3110,12 @@ class LeAudioClientImpl : public LeAudioClient { if ((available_contexts & AudioContexts(static_cast<T>(LeAudioContextType::RINGTONE))) .any()) .any()) { if (!in_call_) { return LeAudioContextType::MEDIA; } return LeAudioContextType::RINGTONE; } if ((available_contexts & AudioContexts(static_cast<T>(LeAudioContextType::MEDIA))) Loading Loading @@ -3163,7 +3167,8 @@ class LeAudioClientImpl : public LeAudioClient { return true; } void OnAudioMetadataUpdate(const source_metadata_t& source_metadata) { void OnAudioMetadataUpdate( std::vector<struct playback_track_metadata> source_metadata) { if (active_group_id_ == bluetooth::groups::kGroupUnknown) { LOG(WARNING) << ", cannot start streaming if no active group set"; return; Loading Loading @@ -3240,24 +3245,20 @@ class LeAudioClientImpl : public LeAudioClient { } } void OnAudioSourceMetadataUpdate(const sink_metadata_t& sink_metadata) { auto tracks = sink_metadata.tracks; auto track_count = sink_metadata.track_count; void OnAudioSourceMetadataUpdate( std::vector<struct record_track_metadata> sink_metadata) { bool is_audio_source_invalid = true; while (track_count) { for (auto& track : sink_metadata) { LOG_INFO( "%s: source=%d, gain=%f, destination device=%d, " "destination device address=%.32s", __func__, tracks->source, tracks->gain, tracks->dest_device, tracks->dest_device_address); __func__, track.source, track.gain, track.dest_device, track.dest_device_address); /* Don't differentiate source types, just check if it's valid */ if (is_audio_source_invalid && tracks->source != AUDIO_SOURCE_INVALID) if (is_audio_source_invalid && track.source != AUDIO_SOURCE_INVALID) is_audio_source_invalid = false; --track_count; ++tracks; } auto group = aseGroups_.FindById(active_group_id_); Loading Loading @@ -3822,10 +3823,8 @@ class LeAudioClientAudioSinkReceiverImpl } void OnAudioMetadataUpdate( std::promise<void> do_metadata_update_promise, const source_metadata_t& source_metadata) override { std::vector<struct playback_track_metadata> source_metadata) override { if (instance) instance->OnAudioMetadataUpdate(source_metadata); do_metadata_update_promise.set_value(); } }; Loading @@ -3840,10 +3839,9 @@ class LeAudioClientAudioSourceReceiverImpl if (instance) instance->OnAudioSourceResume(); } void OnAudioMetadataUpdate(std::promise<void> do_metadata_update_promise, const sink_metadata_t& sink_metadata) override { void OnAudioMetadataUpdate( std::vector<struct record_track_metadata> sink_metadata) override { if (instance) instance->OnAudioSourceMetadataUpdate(sink_metadata); do_metadata_update_promise.set_value(); } }; Loading
system/bta/le_audio/client_audio.cc +12 −13 Original line number Diff line number Diff line Loading @@ -191,18 +191,18 @@ bool LeAudioClientAudioSource::SinkOnMetadataUpdateReq( return false; } std::vector<struct playback_track_metadata> metadata; for (size_t i = 0; i < source_metadata.track_count; i++) { metadata.push_back(source_metadata.tracks[i]); } // Call OnAudioSuspend and block till it returns. std::promise<void> do_update_metadata_promise; std::future<void> do_update_metadata_future = do_update_metadata_promise.get_future(); bt_status_t status = do_in_main_thread( FROM_HERE, base::BindOnce(&LeAudioClientAudioSinkReceiver::OnAudioMetadataUpdate, base::Unretained(audioSinkReceiver_), std::move(do_update_metadata_promise), source_metadata)); base::Unretained(audioSinkReceiver_), metadata)); if (status == BT_STATUS_SUCCESS) { do_update_metadata_future.wait(); return true; } Loading Loading @@ -262,18 +262,17 @@ bool LeAudioUnicastClientAudioSink::SourceOnMetadataUpdateReq( return false; } // Call OnAudioSuspend and block till it returns. std::promise<void> do_update_metadata_promise; std::future<void> do_update_metadata_future = do_update_metadata_promise.get_future(); std::vector<struct record_track_metadata> metadata; for (size_t i = 0; i < sink_metadata.track_count; i++) { metadata.push_back(sink_metadata.tracks[i]); } bt_status_t status = do_in_main_thread( FROM_HERE, base::BindOnce(&LeAudioClientAudioSourceReceiver::OnAudioMetadataUpdate, base::Unretained(audioSourceReceiver_), std::move(do_update_metadata_promise), sink_metadata)); base::Unretained(audioSourceReceiver_), metadata)); if (status == BT_STATUS_SUCCESS) { do_update_metadata_future.wait(); return true; } Loading
system/bta/le_audio/client_audio.h +2 −4 Original line number Diff line number Diff line Loading @@ -29,8 +29,7 @@ class LeAudioClientAudioSinkReceiver { virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0; virtual void OnAudioResume(void) = 0; virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const source_metadata_t& source_metadata) = 0; std::vector<struct playback_track_metadata> source_metadata) = 0; }; class LeAudioClientAudioSourceReceiver { public: Loading @@ -38,8 +37,7 @@ class LeAudioClientAudioSourceReceiver { virtual void OnAudioSuspend(std::promise<void> do_suspend_promise) = 0; virtual void OnAudioResume(void) = 0; virtual void OnAudioMetadataUpdate( std::promise<void> do_update_metadata_promise, const sink_metadata_t& sink_metadata) = 0; std::vector<struct record_track_metadata> sink_metadata) = 0; }; /* Represents configuration of audio codec, as exchanged between le audio and Loading