From 80ce5c391ca2b5f3a1f3230f7d222c1f7620049a Mon Sep 17 00:00:00 2001
From: agsantos <aline.gondimsantos@savoirfairelinux.com>
Date: Wed, 28 Oct 2020 12:12:45 -0400
Subject: [PATCH] plugins: restart sender when (un)toggling mediahandler

Change-Id: I278c35162e9001f9540454ff8bbe50eadd5105a6
---
 src/plugin/callservicesmanager.h | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/plugin/callservicesmanager.h b/src/plugin/callservicesmanager.h
index 13cd337385..f4929f4861 100644
--- a/src/plugin/callservicesmanager.h
+++ b/src/plugin/callservicesmanager.h
@@ -23,6 +23,7 @@
 #include "noncopyable.h"
 #include "logger.h"
 #include "manager.h"
+#include "sip/sipcall.h"
 // Plugin Manager
 #include "pluginmanager.h"
 #include "streamdata.h"
@@ -129,7 +130,7 @@ public:
                                 const std::string& callId,
                                 const bool toggle)
     {
-        if (mediaHandlerId.empty())
+        if (mediaHandlerId.empty() || callId.empty())
             return;
 
         auto find = mediaHandlerToggled_.find(callId);
@@ -151,6 +152,18 @@ public:
                                 != mediaHandlerToggled_[callId].end())
                                 mediaHandlerToggled_[callId].erase(mediaHandlerId);
                         }
+
+                        /* In the case when the mediaHandler receives a hardware format
+                         * frame and converts it to main memory, we need to restart the
+                         * sender to unlink ours encoder and decoder.
+                         *
+                         * When we deactivate a mediaHandler, we try to relink the encoder
+                         * and decoder by restarting the sender.
+                         */
+                        Manager::instance()
+                            .callFactory.getCall<SIPCall>(callId)
+                            ->getVideoRtp()
+                            .restartSender();
                     }
                 }
             }
-- 
GitLab