diff mbox series

[v3,6/9] h264: add hardware encoders

Message ID 20250418112953.1744442-7-dietmar@proxmox.com (mailing list archive)
State New
Headers show
Series Add VNC Open H.264 Encoding | expand

Commit Message

Dietmar Maurer April 18, 2025, 11:29 a.m. UTC
Signed-off-by: Dietmar Maurer <dietmar@proxmox.com>
---
 ui/vnc-enc-h264.c | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)
diff mbox series

Patch

diff --git a/ui/vnc-enc-h264.c b/ui/vnc-enc-h264.c
index 0f89cafbf6..840674dbdb 100644
--- a/ui/vnc-enc-h264.c
+++ b/ui/vnc-enc-h264.c
@@ -29,15 +29,17 @@ 
 
 static char *get_available_encoder(const char *encoder_list)
 {
+    char *ret = NULL;
+    char **encoder_array = NULL;
+
     g_assert(encoder_list != NULL);
 
     if (!strcmp(encoder_list, "")) {
         /* use default list */
-        encoder_list = "x264enc openh264enc";
+        encoder_list = "nvh264enc vaapih264enc x264enc openh264enc";
     }
 
-    char *ret = NULL;
-    char **encoder_array = g_strsplit(encoder_list, " ", -1);
+    encoder_array = g_strsplit(encoder_list, " ", -1);
 
     int i = 0;
     do {
@@ -69,7 +71,19 @@  static GstElement *create_encoder(const char *encoder_name)
         return NULL;
     }
 
-    if (!strcmp(encoder_name, "x264enc")) {
+    if (!strcmp(encoder_name, "nvh264enc")) {
+        g_object_set(
+            encoder,
+            "preset", 8,         /* p1 - fastest */
+            "multi-pass", 1,     /* multipass disabled */
+            "tune", 2,           /* low latency */
+            "zerolatency", true, /* low latency */
+            /* avoid access unit delimiters (Nal Unit Type 9) - not required */
+            "aud", false,
+            NULL);
+    } else if (!strcmp(encoder_name, "vaapih264enc")) {
+        g_object_set(encoder, "tune", 1, NULL); /* high compression */
+    } else if (!strcmp(encoder_name, "x264enc")) {
         g_object_set(
             encoder,
             "tune", 4, /* zerolatency */