From 7dfb47df997081d431eb41616a205d4a593bb1f7 Mon Sep 17 00:00:00 2001
From: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Date: Thu, 8 Oct 2015 12:08:51 -0400
Subject: [PATCH] conference: attach mixer sink if source restarted

If video_rtp_session is restarted due to bitrate changement
we need to setup again conferencepipeline. Otherwise videomixer sink
would be never attached and video never send.

Issue: #81547
Change-Id: I6de180afab5a7dd320fe3b31a1d61735106d76d1
---
 src/media/video/video_rtp_session.cpp | 25 ++++++++++++++++---------
 src/media/video/video_rtp_session.h   |  1 +
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index f19ec1ebc8..c2c7ff20f8 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -120,6 +120,8 @@ VideoRtpSession::restartSender()
         if (videoLocal_)
             videoLocal_->attach(sender_.get());
     }
+
+    setupVideoPipeline();
 }
 
 void VideoRtpSession::startReceiver()
@@ -170,15 +172,7 @@ void VideoRtpSession::start(std::unique_ptr<IceSocket> rtp_sock,
     startSender();
     startReceiver();
 
-    // Setup video pipeline
-    if (conference_)
-        setupConferenceVideoPipeline(*conference_);
-    else if (sender_) {
-        if (videoLocal_)
-            videoLocal_->attach(sender_.get());
-    } else {
-        videoLocal_.reset();
-    }
+    setupVideoPipeline();
 }
 
 void VideoRtpSession::stop()
@@ -211,6 +205,19 @@ void VideoRtpSession::forceKeyFrame()
         sender_->forceKeyFrame();
 }
 
+void
+VideoRtpSession::setupVideoPipeline()
+{
+    if (conference_)
+        setupConferenceVideoPipeline(*conference_);
+    else if (sender_) {
+        if (videoLocal_)
+            videoLocal_->attach(sender_.get());
+    } else {
+        videoLocal_.reset();
+    }
+}
+
 void VideoRtpSession::setupConferenceVideoPipeline(Conference& conference)
 {
     RING_DBG("[call:%s] Setup video pipeline on conference %s", callID_.c_str(),
diff --git a/src/media/video/video_rtp_session.h b/src/media/video/video_rtp_session.h
index 45e0b5c384..ca469b828f 100644
--- a/src/media/video/video_rtp_session.h
+++ b/src/media/video/video_rtp_session.h
@@ -74,6 +74,7 @@ public:
 
 private:
     void setupConferenceVideoPipeline(Conference& conference);
+    void setupVideoPipeline();
     void startSender();
     void startReceiver();
 
-- 
GitLab