From: Kirill A. Korinsky Subject: net/dino: need test with fix of video calls To: OpenBSD ports Date: Sat, 06 Jun 2026 19:37:51 +0200 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 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