Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
Subject:
net/dino: need test with fix of video calls
To:
OpenBSD ports <ports@openbsd.org>
Date:
Sat, 06 Jun 2026 19:37:51 +0200

Download raw body.

Thread
  • Kirill A. Korinsky:

    net/dino: need test with fix of video calls

ports@,

here a diff which fixes video calls between Dino <-> Monal.

I did my best to make it universal with available codecs, so, I assume other
clients should works as well.

Can anyone test it against other client? I interested did I fix something or broke?

Thanks.

Index: Makefile
===================================================================
RCS file: /home/cvs/ports/net/dino/Makefile,v
diff -u -p -r1.41 Makefile
--- Makefile	19 Dec 2025 13:42:07 -0000	1.41
+++ Makefile	6 Jun 2026 17:25:54 -0000
@@ -1,6 +1,6 @@
 COMMENT=	XMPP desktop client
 VERSION=	0.5.1
-REVISION=	1
+REVISION=	2
 DISTNAME=	dino-${VERSION}
 CATEGORIES=	net x11
 
@@ -22,7 +22,10 @@ MODULES=	devel/meson
 BUILD_DEPENDS=	devel/gettext,-tools \
 		lang/vala
 RUN_DEPENDS=	devel/desktop-file-utils \
+		multimedia/gstreamer1/libav \
+		multimedia/gstreamer1/plugins-bad \
 		multimedia/gstreamer1/plugins-good \
+		multimedia/gstreamer1/plugins-ugly \
 		x11/gtk+4,-guic
 LIB_DEPENDS=	audio/libcanberra,-main \
 		devel/libgee \
@@ -45,7 +48,10 @@ WANTLIB += graphene-1.0 gstapp-1.0 gstba
 WANTLIB += gstvideo-1.0 gtk-4 icuuc intl m nice pango-1.0 qrencode
 WANTLIB += omemo-c soup-3.0 sqlite3 srtp2
 
-CONFIGURE_ARGS=	-Dplugin-notification-sound=enabled \
+CONFIGURE_ARGS=	-Dplugin-rtp-h264=enabled \
+		-Dplugin-rtp-vaapi=enabled \
+		-Dplugin-rtp-vp9=enabled \
+		-Dplugin-notification-sound=enabled \
 		-Dplugin-rtp-webrtc-audio-processing=disabled
 
 .include <bsd.port.mk>
Index: patches/patch-plugins_rtp_src_codec_util_vala
===================================================================
RCS file: patches/patch-plugins_rtp_src_codec_util_vala
diff -N patches/patch-plugins_rtp_src_codec_util_vala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-plugins_rtp_src_codec_util_vala	6 Jun 2026 17:28:55 -0000
@@ -0,0 +1,144 @@
+Enable codecs which exists in OpenBSD
+
+Based on:
+ - https://github.com/dino/dino/pull/1742
+ - https://github.com/dino/dino/pull/1781
+
+Index: plugins/rtp/src/codec_util.vala
+--- plugins/rtp/src/codec_util.vala.orig
++++ plugins/rtp/src/codec_util.vala
+@@ -102,7 +102,8 @@ public class Dino.Plugins.Rtp.CodecUtil {
+                         "msdkh264enc",
+ #endif
+ #if ENABLE_VAAPI
+-                        "vaapih264enc",
++                        "vah264lpenc",
++                        "vah264enc",
+ #endif
+                         "x264enc"
+                     };
+@@ -112,7 +113,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+                         "msdkvp9enc",
+ #endif
+ #if ENABLE_VAAPI
+-                        "vaapivp9enc",
++                        "vavp9enc",
+ #endif
+                         "vp9enc"
+                     };
+@@ -122,7 +123,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+                         "msdkvp8enc",
+ #endif
+ #if ENABLE_VAAPI
+-                        "vaapivp8enc",
++                        "vavp8enc",
+ #endif
+                         "vp8enc"
+                     };
+@@ -153,10 +154,10 @@ public class Dino.Plugins.Rtp.CodecUtil {
+ #if ENABLE_MSDK
+                         "msdkh264dec",
+ #endif
++                        "avdec_h264",
+ #if ENABLE_VAAPI
+-                        "vaapih264dec",
++                        "vah264dec",
+ #endif
+-                        null
+                     };
+                 case "vp9":
+                     return new string[] {
+@@ -164,7 +165,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+                         "msdkvp9dec",
+ #endif
+ #if ENABLE_VAAPI
+-                        "vaapivp9dec",
++                        "vavp9dec",
+ #endif
+                         "vp9dec"
+                     };
+@@ -174,7 +175,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+                         "msdkvp8dec",
+ #endif
+ #if ENABLE_VAAPI
+-                        "vaapivp8dec",
++                        "vavp8dec",
+ #endif
+                         "vp8dec"
+                     };
+@@ -185,22 +186,22 @@ public class Dino.Plugins.Rtp.CodecUtil {
+ 
+     public static string? get_encode_prefix(string media, string codec, string encode, JingleRtp.PayloadType? payload_type) {
+         if (encode == "msdkh264enc") return "capsfilter caps=video/x-raw,format=NV12 ! ";
+-        if (encode == "vaapih264enc") return "capsfilter caps=video/x-raw,format=NV12 ! ";
++        if (encode == "vah264lpenc" || encode == "vah264enc") return "capsfilter caps=video/x-raw,format=NV12 ! ";
+         return null;
+     }
+ 
+     public static string? get_encode_args(string media, string codec, string encode, JingleRtp.PayloadType? payload_type) {
+         // H264
+         if (encode == "msdkh264enc") return @" rate-control=vbr";
+-        if (encode == "vaapih264enc") return @" rate-control=vbr";
++        if (encode == "vah264lpenc" || encode == "vah264enc") return @" rate-control=vbr";
+         if (encode == "x264enc") return @" byte-stream=1 speed-preset=ultrafast tune=zerolatency bframes=0 cabac=false dct8x8=false";
+ 
+         // VP8
+-        if (encode == "vaapivp8enc" || encode == "msdkvp8enc") return " rate-control=vbr target-percentage=90";
++        if (encode == "vavp8enc" || encode == "msdkvp8enc") return " rate-control=vbr target-percentage=90";
+         if (encode == "vp8enc") return " deadline=1 error-resilient=3 lag-in-frames=0 resize-allowed=true threads=8 dropframe-threshold=30 end-usage=vbr cpu-used=4";
+ 
+         // VP9
+-        if (encode == "msdkvp9enc" || encode == "vaapivp9enc") return " rate-control=vbr target-percentage=90";
++        if (encode == "msdkvp9enc" || encode == "vavp9enc") return " rate-control=vbr target-percentage=90";
+         if (encode == "vp9enc") return " deadline=1 error-resilient=3 lag-in-frames=0 resize-allowed=true threads=8 dropframe-threshold=30 end-usage=vbr cpu-used=4";
+ 
+         // OPUS
+@@ -229,12 +230,13 @@ public class Dino.Plugins.Rtp.CodecUtil {
+ 
+         switch (encode_name) {
+             case "msdkh264enc":
+-            case "vaapih264enc":
++            case "vah264lpenc":
++            case "vah264enc":
+             case "x264enc":
+             case "msdkvp9enc":
+-            case "vaapivp9enc":
++            case "vavp9enc":
+             case "msdkvp8enc":
+-            case "vaapivp8enc":
++            case "vavp8enc":
+                 bitrate = uint.min(2048000, bitrate);
+                 encode.set("bitrate", bitrate);
+                 return bitrate;
+@@ -265,12 +267,13 @@ public class Dino.Plugins.Rtp.CodecUtil {
+     }
+ 
+     public static string? get_decode_prefix(string media, string codec, string decode, JingleRtp.PayloadType? payload_type) {
++        if (decode == "vah264dec" || decode == "avdec_h264") return "h264parse ! ";
+         return null;
+     }
+ 
+     public static string? get_decode_args(string media, string codec, string decode, JingleRtp.PayloadType? payload_type) {
+         if (decode == "opusdec" && payload_type != null && payload_type.parameters.has("useinbandfec", "1")) return " use-inband-fec=true";
+-        if (decode == "vaapivp9dec" || decode == "vaapivp8dec" || decode == "vaapih264dec") return " max-errors=100";
++        if (decode == "vavp9dec" || decode == "vavp8dec" || decode == "vah264dec") return " max-errors=100";
+         if (decode == "vp8dec" || decode == "vp9dec") return " threads=8";
+         return null;
+     }
+@@ -280,6 +283,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+     }
+ 
+     public static string? get_depay_args(string media, string codec, string encode, JingleRtp.PayloadType? payload_type) {
++        if (codec == "h264") return " request-keyframe=true wait-for-keyframe=true";
+ #if GST_1_18
+         if (codec == "vp8") return " wait-for-keyframe=true";
+ #endif
+@@ -295,7 +299,7 @@ public class Dino.Plugins.Rtp.CodecUtil {
+             supported_elements.add(element_name);
+             return true;
+         } else {
+-            warning("%s is not installed or supported on this system", element_name);
++            info("%s is not installed or supported on this system", element_name);
+             unsupported_elements.add(element_name);
+             return false;
+         }


-- 
wbr, Kirill