Download raw body.
gstreamer/plugins-good: Reenable the v4l2 plugin
On Mon, Jul 14, 2025 at 12:18:34PM +0200, Alexandre Ratchov wrote:
> 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?
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
>
--
Antoine
gstreamer/plugins-good: Reenable the v4l2 plugin