diff --git a/bin/jni/jni_interface.i b/bin/jni/jni_interface.i index fc35f93a2..c0e8c0e72 100644 --- a/bin/jni/jni_interface.i +++ b/bin/jni/jni_interface.i @@ -286,6 +286,7 @@ void init(ConfigurationCallback* confM, Callback* callM, PresenceCallback* presM const std::map videoEvHandlers = { exportable_callback(bind(&VideoCallback::getCameraInfo, videoM, _1, _2, _3, _4)), exportable_callback(bind(&VideoCallback::setParameters, videoM, _1, _2, _3, _4, _5)), + exportable_callback(bind(&VideoCallback::setBitrate, videoM, _1, _2)), exportable_callback(bind(&VideoCallback::requestKeyFrame, videoM)), exportable_callback(bind(&VideoCallback::startCapture, videoM, _1)), exportable_callback(bind(&VideoCallback::stopCapture, videoM)), diff --git a/bin/jni/videomanager.i b/bin/jni/videomanager.i index 8a605c750..ae578dbdb 100644 --- a/bin/jni/videomanager.i +++ b/bin/jni/videomanager.i @@ -43,7 +43,8 @@ class VideoCallback { public: virtual ~VideoCallback(){} virtual void getCameraInfo(const std::string& device, std::vector *formats, std::vector *sizes, std::vector *rates) {} - virtual void setParameters(const std::string, const int format, const int width, const int height, const int rate) {} + 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 startCapture(const std::string& camid) {} virtual void stopCapture() {} @@ -421,7 +422,8 @@ class VideoCallback { public: virtual ~VideoCallback(){} virtual void getCameraInfo(const std::string& device, std::vector *formats, std::vector *sizes, std::vector *rates){} - virtual void setParameters(const std::string, const int format, const int width, const int height, const int rate) {} + 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 startCapture(const std::string& camid) {} virtual void stopCapture() {} diff --git a/src/client/ring_signal.cpp b/src/client/ring_signal.cpp index 667c59caf..90a75c532 100644 --- a/src/client/ring_signal.cpp +++ b/src/client/ring_signal.cpp @@ -110,6 +110,7 @@ getSignalHandlers() exported_callback(), exported_callback(), exported_callback(), + exported_callback(), #endif exported_callback(), exported_callback(), diff --git a/src/dring/videomanager_interface.h b/src/dring/videomanager_interface.h index 6dea0fbbc..817aebee7 100644 --- a/src/dring/videomanager_interface.h +++ b/src/dring/videomanager_interface.h @@ -224,6 +224,10 @@ struct DRING_PUBLIC VideoSignal { constexpr static const char* name = "RequestKeyFrame"; using cb_type = void(); }; + struct DRING_PUBLIC SetBitrate { + constexpr static const char* name = "SetBitrate"; + using cb_type = void(const std::string& device, const int bitrate); + }; #endif struct DRING_PUBLIC StartCapture { constexpr static const char* name = "StartCapture"; diff --git a/src/media/video/video_input.cpp b/src/media/video/video_input.cpp index a57d3ff00..a2e807f36 100644 --- a/src/media/video/video_input.cpp +++ b/src/media/video/video_input.cpp @@ -482,7 +482,8 @@ VideoInput::switchInput(const std::string& resource) return futureDecOpts_; } -DeviceParams VideoInput::getParams() const +const DeviceParams& +VideoInput::getParams() const { return decOpts_; } MediaStream diff --git a/src/media/video/video_input.h b/src/media/video/video_input.h index 9d6f521ea..f77c717e6 100644 --- a/src/media/video/video_input.h +++ b/src/media/video/video_input.h @@ -67,7 +67,7 @@ public: int getWidth() const; int getHeight() const; AVPixelFormat getPixelFormat() const; - DeviceParams getParams() const; + const DeviceParams& getParams() const; MediaStream getInfo() const; std::shared_future switchInput(const std::string& resource); diff --git a/src/media/video/video_rtp_session.cpp b/src/media/video/video_rtp_session.cpp index 3ed0edd5c..a55346124 100644 --- a/src/media/video/video_rtp_session.cpp +++ b/src/media/video/video_rtp_session.cpp @@ -447,6 +447,11 @@ VideoRtpSession::adaptQualityAndBitrate() if(oldBitrate != videoBitrateInfo_.videoBitrateCurrent) { storeVideoBitrateInfo(); +#if __ANDROID__ + auto input_device = std::static_pointer_cast(videoLocal_); + emitSignal(input_device->getParams().name, (int)videoBitrateInfo_.videoBitrateCurrent); +#endif + // If encoder no longer exist do nothing if(sender_ && sender_->setBitrate(videoBitrateInfo_.videoBitrateCurrent) == 0) lastMediaRestart_ = now;