The v4l2 plugin (used for webcam capture) is currently disabled
because of a compilation error (according to a comment in the
Makefile).

The error is a missing "#ifndef __linux__", probably forgotten and
unnoticed as it doesn't affect Linux. This diff fixes it and reenables
v4l2, using the libv4l.

Example of a one-liner to test the plugin with a webcam:

gst-launch-1.0 v4l2src ! videoconvert ! ximagesink

OK?

Off topic, unfortunately this diff is not enough to fix net/dino: now
it finds a valid video device but the screen is black on the other
end.

Index: Makefile
===================================================================
RCS file: /cvs/ports/multimedia/gstreamer1/plugins-good/Makefile,v
diff -u -p -r1.89 Makefile
--- Makefile    1 May 2025 06:55:57 -0000       1.89
+++ Makefile    14 Jul 2025 09:47:45 -0000
@@ -1,6 +1,7 @@
 COMMENT=               good elements for GStreamer
 
 DISTNAME=              gst-plugins-good-${V}
+REVISION=              0
 
 SITES=                 ${SITE_GST:=gst-plugins-good/}
 
@@ -9,11 +10,12 @@ COMPILER_LANGS=              c c++
 
 WANTLIB += ${COMPILER_LIBCXX} FLAC X11 Xdamage Xext Xfixes Xtst
 WANTLIB += bz2 cairo cairo-gobject gdk-3 gdk_pixbuf-2.0 gio-2.0
-WANTLIB += glib-2.0 gobject-2.0 gstaudio-1.0 gstbase-1.0 gstfft-1.0
-WANTLIB += gstgl-1.0 gstnet-1.0 gstpbutils-1.0 gstreamer-1.0 gstriff-1.0
-WANTLIB += gstrtp-1.0 gstrtsp-1.0 gstsdp-1.0 gsttag-1.0 gstvideo-1.0
+WANTLIB += glib-2.0 gobject-2.0 gstallocators-1.0 gstaudio-1.0 
+WANTLIB += gstbase-1.0 gstfft-1.0 gstgl-1.0 gstnet-1.0
+WANTLIB += gstpbutils-1.0 gstreamer-1.0 gstriff-1.0 gstrtp-1.0
+WANTLIB += gstrtsp-1.0 gstsdp-1.0 gsttag-1.0 gstvideo-1.0
 WANTLIB += gtk-3 intl jpeg m mp3lame nettle opencore-amrnb opencore-amrwb
-WANTLIB += orc-0.4 png shout speex tag twolame vpx wavpack xml2
+WANTLIB += orc-0.4 png shout speex tag twolame v4l2 vpx wavpack xml2
 WANTLIB += z
 
 LIB_DEPENDS=           multimedia/gstreamer1/plugins-base=${V} \
@@ -25,6 +27,7 @@ LIB_DEPENDS=          multimedia/gstreamer1/plug
                        audio/taglib \
                        audio/twolame \
                        audio/wavpack \
+                       multimedia/libv4l \
                        multimedia/libvpx \
                        net/libshout \
                        x11/gtk+3
@@ -52,10 +55,6 @@ CONFIGURE_ARGS=              -Daalib=disabled \
                        -Dwaveform=disabled \
                        -Dv4l2-gudev=disabled \
                        -Drpicamsrc=disabled
-
-# XXX
-# ../gst-plugins-good-1.26.1/sys/v4l2/gstv4l2object.c:601:25: error: use of 
undeclared identifier 'v4l2_ioctl_wrapper'
-CONFIGURE_ARGS +=      -Dv4l2=disabled
 
 .if ${MACHINE_ARCH} == "amd64"
 BUILD_DEPENDS +=       devel/nasm
Index: patches/patch-sys_v4l2_gstv4l2object_c
===================================================================
RCS file: 
/cvs/ports/multimedia/gstreamer1/plugins-good/patches/patch-sys_v4l2_gstv4l2object_c,v
diff -u -p -r1.14 patch-sys_v4l2_gstv4l2object_c
--- patches/patch-sys_v4l2_gstv4l2object_c      27 Jun 2025 10:12:15 -0000      
1.14
+++ patches/patch-sys_v4l2_gstv4l2object_c      14 Jul 2025 09:47:45 -0000
@@ -1,6 +1,15 @@
 Index: sys/v4l2/gstv4l2object.c
 --- sys/v4l2/gstv4l2object.c.orig
 +++ sys/v4l2/gstv4l2object.c
+@@ -595,7 +595,7 @@ gst_v4l2_object_new (GstElement * element,
+     v4l2object->fd_open = v4l2_fd_open;
+     v4l2object->close = v4l2_close;
+     v4l2object->dup = v4l2_dup;
+-#ifdef __GLIBC__
++#if !defined(__linux__) || defined( __GLIBC__)
+     v4l2object->ioctl = v4l2_ioctl;
+ #else
+     v4l2object->ioctl = v4l2_ioctl_wrapper;
 @@ -5332,7 +5332,9 @@ gst_v4l2_object_probe_caps (GstV4l2Object * v4l2object
      if (v4l2object->ioctl (v4l2object->video_fd, VIDIOC_CROPCAP, &cropcap) < 
0) {
  
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/multimedia/gstreamer1/plugins-good/pkg/PLIST,v
diff -u -p -r1.6 PLIST
--- pkg/PLIST   1 May 2025 06:55:57 -0000       1.6
+++ pkg/PLIST   14 Jul 2025 09:47:45 -0000
@@ -58,6 +58,7 @@
 @so lib/gstreamer-${API}/libgsttaglib.so
 @so lib/gstreamer-${API}/libgsttwolame.so
 @so lib/gstreamer-${API}/libgstudp.so
+@so lib/gstreamer-${API}/libgstvideo4linux2.so
 @so lib/gstreamer-${API}/libgstvideobox.so
 @so lib/gstreamer-${API}/libgstvideocrop.so
 @so lib/gstreamer-${API}/libgstvideofilter.so

Reply via email to