diff --git a/bin/dbus/cx.ring.Ring.VideoManager.xml b/bin/dbus/cx.ring.Ring.VideoManager.xml index c3f73bf51ff0ae2e6ae99fae3d9bcb2b4e28fb22..4b637dc6029f9d79eb291b47712456337fbcf0fb 100644 --- a/bin/dbus/cx.ring.Ring.VideoManager.xml +++ b/bin/dbus/cx.ring.Ring.VideoManager.xml @@ -117,6 +117,20 @@ </arg> </method> + <method name="getEncodingAccelerated" tp:name-for-bindings="getEncodingAccelerated"> + <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="Bool"/> + <arg type="b" name="state" direction="out"> + <tp:docstring>Returns true if hardware encoding is enabled, false otherwise</tp:docstring> + </arg> + </method> + + <method name="setEncodingAccelerated" tp:name-for-bindings="setEncodingAccelerated"> + <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="Bool"/> + <arg type="b" name="state" direction="in"> + <tp:docstring>Toggle hardware encoding</tp:docstring> + </arg> + </method> + <method name="setDeviceOrientation" tp:name-for-bindings="setDeviceOrientation"> <arg type="s" name="name" direction="in"> <tp:docstring>Device name</tp:docstring> diff --git a/bin/dbus/dbusvideomanager.cpp b/bin/dbus/dbusvideomanager.cpp index 0ccda3f53dc010e635e54446702a4b01098614df..febe4a00835f307ffd342a752f04beee2f11f1a4 100644 --- a/bin/dbus/dbusvideomanager.cpp +++ b/bin/dbus/dbusvideomanager.cpp @@ -109,6 +109,18 @@ DBusVideoManager::setDecodingAccelerated(const bool& state) DRing::setDecodingAccelerated(state); } +auto +DBusVideoManager::getEncodingAccelerated() -> decltype(DRing::getEncodingAccelerated()) +{ + return DRing::getEncodingAccelerated(); +} + +void +DBusVideoManager::setEncodingAccelerated(const bool& state) +{ + DRing::setEncodingAccelerated(state); +} + void DBusVideoManager::setDeviceOrientation(const std::string& name, const int& angle) { diff --git a/bin/dbus/dbusvideomanager.h b/bin/dbus/dbusvideomanager.h index ea3b7f61f10423a6c2d3f819bdc9f7b83520d208..1cd3b7088f44341376500dfe5fd1957a4b49db4c 100644 --- a/bin/dbus/dbusvideomanager.h +++ b/bin/dbus/dbusvideomanager.h @@ -65,6 +65,8 @@ class DRING_PUBLIC DBusVideoManager : bool hasCameraStarted(); bool getDecodingAccelerated(); void setDecodingAccelerated(const bool& state); + bool getEncodingAccelerated(); + void setEncodingAccelerated(const bool& state); void setDeviceOrientation(const std::string& name, const int& angle); std::map<std::string, std::string> getRenderer(const std::string& callId); std::string startLocalRecorder(const bool& audioOnly, const std::string& filepath); diff --git a/bin/jni/videomanager.i b/bin/jni/videomanager.i index 05128aced68ebded3355a4e78d76255d2b852141..239b2f54ccda4b8731565b7b714791878ca83449 100644 --- a/bin/jni/videomanager.i +++ b/bin/jni/videomanager.i @@ -51,6 +51,10 @@ public: virtual void decodingStopped(const std::string& id, const std::string& shm_path, bool is_mixer) {} virtual std::string startLocalRecorder(const bool& audioOnly, const std::string& filepath) {} virtual void stopLocalRecorder(const std::string& filepath) {} + virtual bool getDecodingAccelerated() {} + virtual void setDecodingAccelerated(bool state) {} + virtual bool getEncodingAccelerated() {} + virtual void setEncodingAccelerated(bool state) {} virtual void setDeviceOrientation(const std::string&, int angle) {} }; %} @@ -407,6 +411,10 @@ void setDeviceOrientation(const std::string& name, int angle); uint8_t* obtainFrame(int length); void releaseFrame(uint8_t* frame); void registerSinkTarget(const std::string& sinkId, const DRing::SinkTarget& target); +bool getDecodingAccelerated(); +void setDecodingAccelerated(bool state); +bool getEncodingAccelerated(); +void setEncodingAccelerated(bool state); } class VideoCallback { diff --git a/bin/nodejs/videomanager.i b/bin/nodejs/videomanager.i index 82fed9556a299c8762381a28c439aed19e396935..bb3b0e14edf515447835d37a857506568028e18f 100644 --- a/bin/nodejs/videomanager.i +++ b/bin/nodejs/videomanager.i @@ -38,6 +38,10 @@ public: virtual void decodingStopped(const std::string& id, const std::string& shm_path, bool is_mixer) {} virtual std::string startLocalRecorder(const bool& audioOnly, const std::string& filepath) {} virtual void stopLocalRecorder(const std::string& filepath) {} + virtual bool getDecodingAccelerated() {} + virtual void setDecodingAccelerated(bool state) {} + virtual bool getEncodingAccelerated() {} + virtual void setEncodingAccelerated(bool state) {} virtual void setDeviceOrientation(const std::string& name, int angle) {} }; %} @@ -60,6 +64,10 @@ std::map<std::string, std::string> getSettings(const std::string& name); void applySettings(const std::string& name, const std::map<std::string, std::string>& settings); void registerSinkTarget(const std::string& sinkId, const DRing::SinkTarget& target); +bool getDecodingAccelerated(); +void setDecodingAccelerated(bool state); +bool getEncodingAccelerated(); +void setEncodingAccelerated(bool state); void setDeviceOrientation(const std::string& name, int angle); } diff --git a/src/client/videomanager.cpp b/src/client/videomanager.cpp index 1f498c3064b2b73a2ac9460a01f7f78afd51cc13..55e16e0eb698b27025a3422d3f57e2885a57e87a 100644 --- a/src/client/videomanager.cpp +++ b/src/client/videomanager.cpp @@ -546,6 +546,25 @@ setDecodingAccelerated(bool state) #endif } +bool +getEncodingAccelerated() +{ +#ifdef RING_ACCEL + return ring::Manager::instance().videoPreferences.getEncodingAccelerated(); +#else + return false; +#endif +} + +void +setEncodingAccelerated(bool state) +{ +#ifdef RING_ACCEL + RING_DBG("%s hardware acceleration", (state ? "Enabling" : "Disabling")); + ring::Manager::instance().videoPreferences.setEncodingAccelerated(state); +#endif +} + #if defined(__ANDROID__) || defined(RING_UWP) || (defined(TARGET_OS_IOS) && TARGET_OS_IOS) void addVideoDevice(const std::string &node, std::vector<std::map<std::string, std::string>> const * devInfo) diff --git a/src/dring/videomanager_interface.h b/src/dring/videomanager_interface.h index da6a7855b21468b5eb4486912845ea72b0565be8..96a014e0bdceeb5597b4d1d777e176a48eec3185 100644 --- a/src/dring/videomanager_interface.h +++ b/src/dring/videomanager_interface.h @@ -195,6 +195,8 @@ DRING_PUBLIC void publishFrame(); DRING_PUBLIC bool getDecodingAccelerated(); DRING_PUBLIC void setDecodingAccelerated(bool state); +DRING_PUBLIC bool getEncodingAccelerated(); +DRING_PUBLIC void setEncodingAccelerated(bool state); // Video signal type definitions struct DRING_PUBLIC VideoSignal {