From c5608b933ac07353580fe3136a794772ebe246a2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Tue, 23 Nov 2021 12:08:37 -0500
Subject: [PATCH] videomanager: add deviceId to RequestKeyFrame

Change-Id: Ie8cdb2a771a64dbdb9384fbbfadb255bec64d9c6
---
 bin/jni/jni_interface.i               | 2 +-
 bin/jni/videomanager.i                | 4 ++--
 src/jami/videomanager_interface.h     | 4 ++--
 src/media/video/video_rtp_session.cpp | 5 +++++
 src/media/video/video_rtp_session.h   | 5 +++--
 src/media/video/video_sender.cpp      | 6 ------
 6 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/bin/jni/jni_interface.i b/bin/jni/jni_interface.i
index ead1d7abc9..6016cd59e9 100644
--- a/bin/jni/jni_interface.i
+++ b/bin/jni/jni_interface.i
@@ -311,7 +311,7 @@ void init(ConfigurationCallback* confM, Callback* callM, PresenceCallback* presM
         exportable_callback<VideoSignal::GetCameraInfo>(bind(&VideoCallback::getCameraInfo, videoM, _1, _2, _3, _4)),
         exportable_callback<VideoSignal::SetParameters>(bind(&VideoCallback::setParameters, videoM, _1, _2, _3, _4, _5)),
         exportable_callback<VideoSignal::SetBitrate>(bind(&VideoCallback::setBitrate, videoM, _1, _2)),
-        exportable_callback<VideoSignal::RequestKeyFrame>(bind(&VideoCallback::requestKeyFrame, videoM)),
+        exportable_callback<VideoSignal::RequestKeyFrame>(bind(&VideoCallback::requestKeyFrame, videoM, _1)),
         exportable_callback<VideoSignal::StartCapture>(bind(&VideoCallback::startCapture, videoM, _1)),
         exportable_callback<VideoSignal::StopCapture>(bind(&VideoCallback::stopCapture, videoM, _1)),
         exportable_callback<VideoSignal::DecodingStarted>(bind(&VideoCallback::decodingStarted, videoM, _1, _2, _3, _4, _5)),
diff --git a/bin/jni/videomanager.i b/bin/jni/videomanager.i
index 9fbf5c4627..bcacce95c8 100644
--- a/bin/jni/videomanager.i
+++ b/bin/jni/videomanager.i
@@ -45,7 +45,7 @@ public:
     virtual void getCameraInfo(const std::string& device, std::vector<int> *formats, std::vector<unsigned> *sizes, std::vector<unsigned> *rates) {}
     virtual void setParameters(const std::string&, const int format, const int width, const int height, const int rate) {}
     virtual void setBitrate(const std::string&, const int bitrate) {}
-    virtual void requestKeyFrame(){}
+    virtual void requestKeyFrame(const std::string& camid){}
     virtual void startCapture(const std::string& camid) {}
     virtual void stopCapture(const std::string& camid) {}
     virtual void decodingStarted(const std::string& id, const std::string& shm_path, int w, int h, bool is_mixer) {}
@@ -443,7 +443,7 @@ public:
     virtual void getCameraInfo(const std::string& device, std::vector<int> *formats, std::vector<unsigned> *sizes, std::vector<unsigned> *rates){}
     virtual void setParameters(const std::string&, const int format, const int width, const int height, const int rate) {}
     virtual void setBitrate(const std::string&, const int bitrate) {}
-    virtual void requestKeyFrame(){}
+    virtual void requestKeyFrame(const std::string& camid){}
     virtual void startCapture(const std::string& camid) {}
     virtual void stopCapture(const std::string& camid) {}
     virtual void decodingStarted(const std::string& id, const std::string& shm_path, int w, int h, bool is_mixer) {}
diff --git a/src/jami/videomanager_interface.h b/src/jami/videomanager_interface.h
index 50c4a3c76b..f3a103158f 100644
--- a/src/jami/videomanager_interface.h
+++ b/src/jami/videomanager_interface.h
@@ -283,12 +283,12 @@ struct DRING_PUBLIC VideoSignal
     struct DRING_PUBLIC RequestKeyFrame
     {
         constexpr static const char* name = "RequestKeyFrame";
-        using cb_type = void();
+        using cb_type = void(const std::string& /*device*/);
     };
     struct DRING_PUBLIC SetBitrate
     {
         constexpr static const char* name = "SetBitrate";
-        using cb_type = void(const std::string& device, const int bitrate);
+        using cb_type = void(const std::string& /*device*/, const int bitrate);
     };
 #endif
     struct DRING_PUBLIC StartCapture
diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp
index 746ad91b09..cd656a1a25 100644
--- a/src/media/video/video_rtp_session.cpp
+++ b/src/media/video/video_rtp_session.cpp
@@ -306,8 +306,13 @@ void
 VideoRtpSession::forceKeyFrame()
 {
     std::lock_guard<std::recursive_mutex> lock(mutex_);
+#if __ANDROID__
+    if (videoLocal_)
+        emitSignal<DRing::VideoSignal::RequestKeyFrame>(videoLocal_->getName());
+#else
     if (sender_)
         sender_->forceKeyFrame();
+#endif
 }
 
 void
diff --git a/src/media/video/video_rtp_session.h b/src/media/video/video_rtp_session.h
index 041978ece3..7d619200fa 100644
--- a/src/media/video/video_rtp_session.h
+++ b/src/media/video/video_rtp_session.h
@@ -39,6 +39,7 @@ class MediaRecorder;
 namespace jami {
 namespace video {
 
+class VideoInput;
 class VideoMixer;
 class VideoSender;
 class VideoReceiveThread;
@@ -100,7 +101,7 @@ public:
 
     bool hasConference() { return conference_; }
 
-    std::shared_ptr<VideoFrameActiveWriter>& getVideoLocal() { return videoLocal_; }
+    std::shared_ptr<VideoInput>& getVideoLocal() { return videoLocal_; }
 
     std::shared_ptr<VideoMixer>& getVideoMixer() { return videoMixer_; }
 
@@ -129,7 +130,7 @@ private:
         = std::make_shared<VideoFrameActiveWriter>();
     Conference* conference_ {nullptr};
     std::shared_ptr<VideoMixer> videoMixer_;
-    std::shared_ptr<VideoFrameActiveWriter> videoLocal_;
+    std::shared_ptr<VideoInput> videoLocal_;
     uint16_t initSeqVal_ = 0;
 
     std::function<void(void)> requestKeyFrameCallback_;
diff --git a/src/media/video/video_sender.cpp b/src/media/video/video_sender.cpp
index 4fe65b0979..48a19d6382 100644
--- a/src/media/video/video_sender.cpp
+++ b/src/media/video/video_sender.cpp
@@ -82,12 +82,6 @@ VideoSender::encodeAndSendVideo(const std::shared_ptr<VideoFrame>& input_frame)
     }
 
     if (auto packet = input_frame->packet()) {
-#if __ANDROID__
-        if (forceKeyFrame_) {
-            emitSignal<DRing::VideoSignal::RequestKeyFrame>();
-            --forceKeyFrame_;
-        }
-#endif
         videoEncoder_->send(*packet);
     } else {
         bool is_keyframe = forceKeyFrame_ > 0
-- 
GitLab