diff options
author | Shobhit Adlakha <ShobhitAd@users.noreply.github.com> | 2019-08-28 15:44:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-28 15:44:40 -0400 |
commit | 75768a68f8bf22ddfc6a06fac2d799a74da0ce83 (patch) | |
tree | afa825caf38db171d9d4fe5001fa2e60b3f95ce7 | |
parent | c42cbc9cf60754baac573193f7f8ca8222157c2e (diff) | |
parent | 92e68450a16b70f2c4b11edb3df6f8cd449f6523 (diff) | |
download | sdl_core-75768a68f8bf22ddfc6a06fac2d799a74da0ce83.tar.gz |
Merge pull request #2956 from smartdevicelink/fix/pipe_audiostream_cutoff
Pipe audio streaming cutoff issue
4 files changed, 35 insertions, 0 deletions
diff --git a/src/components/media_manager/include/media_manager/streamer_adapter.h b/src/components/media_manager/include/media_manager/streamer_adapter.h index 16696e81d1..a35e680b6a 100644 --- a/src/components/media_manager/include/media_manager/streamer_adapter.h +++ b/src/components/media_manager/include/media_manager/streamer_adapter.h @@ -60,6 +60,7 @@ class StreamerAdapter : public MediaAdapterImpl { virtual void SendData(int32_t application_key, const ::protocol_handler::RawMessagePtr msg); virtual bool is_app_performing_activity(int32_t application_key) const; + virtual size_t GetMsgQueueSize(); protected: // TODO(AN): APPLINK-15203 Use MessageLoopThread diff --git a/src/components/media_manager/src/media_manager_impl.cc b/src/components/media_manager/src/media_manager_impl.cc index 90b891133d..bc93f2f764 100644 --- a/src/components/media_manager/src/media_manager_impl.cc +++ b/src/components/media_manager/src/media_manager_impl.cc @@ -311,6 +311,34 @@ void MediaManagerImpl::FramesProcessed(int32_t application_key, if (protocol_handler_) { protocol_handler_->SendFramesNumber(application_key, frame_number); } + + application_manager::ApplicationSharedPtr app = + application_manager_.application(application_key); + + if (app) { + auto audio_stream = std::dynamic_pointer_cast<StreamerAdapter>( + streamer_[protocol_handler::ServiceType::kAudio]); + auto video_stream = std::dynamic_pointer_cast<StreamerAdapter>( + streamer_[protocol_handler::ServiceType::kMobileNav]); + + if (audio_stream.use_count() != 0) { + size_t audio_queue_size = audio_stream->GetMsgQueueSize(); + LOG4CXX_DEBUG(logger_, + "# Messages in audio queue = " << audio_queue_size); + if (audio_queue_size > 0) { + app->WakeUpStreaming(protocol_handler::ServiceType::kAudio); + } + } + + if (video_stream.use_count() != 0) { + size_t video_queue_size = video_stream->GetMsgQueueSize(); + LOG4CXX_DEBUG(logger_, + "# Messages in video queue = " << video_queue_size); + if (video_queue_size > 0) { + app->WakeUpStreaming(protocol_handler::ServiceType::kMobileNav); + } + } + } } const MediaManagerSettings& MediaManagerImpl::settings() const { diff --git a/src/components/media_manager/src/streamer_adapter.cc b/src/components/media_manager/src/streamer_adapter.cc index 37cb1426dc..3ef12e3ed5 100644 --- a/src/components/media_manager/src/streamer_adapter.cc +++ b/src/components/media_manager/src/streamer_adapter.cc @@ -74,6 +74,10 @@ void StreamerAdapter::StartActivity(int32_t application_key) { current_application_ = application_key; } +size_t StreamerAdapter::GetMsgQueueSize() { + return messages_.size(); +} + void StreamerAdapter::StopActivity(int32_t application_key) { LOG4CXX_AUTO_TRACE(logger); if (!is_app_performing_activity(application_key)) { diff --git a/src/components/media_manager/test/media_manager_impl_test.cc b/src/components/media_manager/test/media_manager_impl_test.cc index 9d721fd7cf..cd299d736c 100644 --- a/src/components/media_manager/test/media_manager_impl_test.cc +++ b/src/components/media_manager/test/media_manager_impl_test.cc @@ -403,6 +403,8 @@ TEST_F(MediaManagerImplTest, const int32_t frame_number = 10; EXPECT_CALL(mock_protocol_handler, SendFramesNumber(kApplicationKey, frame_number)); + EXPECT_CALL(app_mngr_, application(kConnectionKey)) + .WillOnce(Return(mock_app_)); media_manager_impl_->FramesProcessed(kApplicationKey, frame_number); } |