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 {