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