diff --git a/media/server/gstplayer/include/tasks/generic/AttachSource.h b/media/server/gstplayer/include/tasks/generic/AttachSource.h index f6d8144fe..0f77545d4 100644 --- a/media/server/gstplayer/include/tasks/generic/AttachSource.h +++ b/media/server/gstplayer/include/tasks/generic/AttachSource.h @@ -47,6 +47,7 @@ class AttachSource : public IPlayerTask private: void addSource() const; + void reattachAudioSource() const; GenericPlayerContext &m_context; std::shared_ptr m_gstWrapper; diff --git a/media/server/gstplayer/source/tasks/generic/AttachSource.cpp b/media/server/gstplayer/source/tasks/generic/AttachSource.cpp index 86d3e53b8..8396a4d1b 100644 --- a/media/server/gstplayer/source/tasks/generic/AttachSource.cpp +++ b/media/server/gstplayer/source/tasks/generic/AttachSource.cpp @@ -59,6 +59,10 @@ void AttachSource::execute() const { addSource(); } + else if (m_attachedSource->getType() == MediaSourceType::AUDIO) + { + reattachAudioSource(); + } else { RIALTO_SERVER_LOG_ERROR("cannot update caps"); @@ -106,4 +110,14 @@ void AttachSource::addSource() const if (caps) m_gstWrapper->gstCapsUnref(caps); } + +void AttachSource::reattachAudioSource() const +{ + if (!m_player.reattachSource(m_attachedSource)) + { + RIALTO_SERVER_LOG_ERROR("Reattaching source failed!"); + return; + } + RIALTO_SERVER_LOG_MIL("Audio source reattached"); +} } // namespace firebolt::rialto::server::tasks::generic diff --git a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/AttachSourceTest.cpp b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/AttachSourceTest.cpp index fe39e7f95..746827b33 100644 --- a/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/AttachSourceTest.cpp +++ b/tests/unittests/media/server/gstplayer/genericPlayer/tasksTests/AttachSourceTest.cpp @@ -161,9 +161,17 @@ TEST_F(AttachSourceTest, shouldFailToAttachUnknownSource) triggerAttachUnknownSource(); } -TEST_F(AttachSourceTest, shouldSkipSwitchAudioSourceWhenSourceIsNotRemoved) +TEST_F(AttachSourceTest, shouldSwitchAudioSourceWhenSourceIsReattached) { setContextStreamInfo(firebolt::rialto::MediaSourceType::AUDIO); + shouldReattachAudioSource(); + triggerReattachAudioSource(); +} + +TEST_F(AttachSourceTest, shouldFailToSwitchAudioSourceWhenSourceIsReattached) +{ + setContextStreamInfo(firebolt::rialto::MediaSourceType::AUDIO); + shouldFailToReattachAudioSource(); triggerReattachAudioSource(); }