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