#11570 closed defect (fixed)

v4l2 1.30 breaks build of 7.1.1

Reported by: bbhtt Owned by:
Priority: normal Component: avdevice
Version: git-master Keywords:
Cc: bbhtt Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

7.1.1 build is broken with v4l2 1.30

libavdevice/v4l2.c: In function ‘device_open’:
libavdevice/v4l2.c:141:17: error: assignment to ‘int (*)(int,  long unsigned int, ...)’ from incompatible pointer type ‘int (*)(int,  int, ...)’ [-Wincompatible-pointer-types]
  141 |     s->ioctl_f  = prefix ## ioctl;      \
      |                 ^
libavdevice/v4l2.c:149:9: note: in expansion of macro ‘SET_WRAPPERS’
  149 |         SET_WRAPPERS(v4l2_);
      |         ^~~~~~~~~~~~
In file included from libavdevice/v4l2.c:52:
/usr/include/libv4l2.h:67:19: note: ‘v4l2_ioctl’ declared here
   67 | LIBV4L_PUBLIC int v4l2_ioctl(int fd, int request, ...);
      |                   ^~~~~~~~~~

See the attached file for the full build log.

How to reproduce: Build with v4l2 1.30

Attachments (1)

8de07b11-build.20250501-170943.log (185.3 KB ) - added by bbhtt 15 months ago.
Full build log

Download all attachments as: .zip

Change History (6)

by bbhtt, 15 months ago

Full build log

comment:2 by bbhtt, 14 months ago

Ok I think I see what is happening, ffmpeg is setting HAVE_POSIX_IOCTL to 0 in config.h which is triggering the wrong v4l2_ioctl definition to get chosen from libv4l2.h (it's a simple ifdef there). There is an clash in the names. It's debatable who should fix it, but I temporarily patched it on the ffmpeg side:

diff --git a/configure b/configure
index ffa407d53d..aa73b1c067 100755
--- a/configure
+++ b/configure
@@ -2522,7 +2522,7 @@ HAVE_LIST="
     opencl_videotoolbox
     perl
     pod2man
-    posix_ioctl
+    ffmpeg_posix_ioctl
     texi2html
     xmllint
     zlib_gzip
@@ -7181,7 +7181,7 @@ xmllint --version  > /dev/null 2>&1 && enable xmllint   || disable xmllint
 check_headers linux/fb.h
 check_headers linux/videodev2.h
 test_code cc linux/videodev2.h "struct v4l2_frmsizeenum vfse; vfse.discrete.width = 0;" && enable_sanitized struct_v4l2_frmivalenum_discrete
-test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable posix_ioctl
+test_code cc sys/ioctl.h "int ioctl(int, int, ...)" && enable ffmpeg_posix_ioctl
 
 # check V4L2 codecs available in the API
 if enabled v4l2_m2m; then
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index 0ae6872338..be42aaaf88 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -111,7 +111,7 @@ struct video_data {
     int (*open_f)(const char *file, int oflag, ...);
     int (*close_f)(int fd);
     int (*dup_f)(int fd);
-#if HAVE_POSIX_IOCTL
+#if HAVE_FFMPEG_POSIX_IOCTL
     int (*ioctl_f)(int fd, int request, ...);
 #else
     int (*ioctl_f)(int fd, unsigned long int request, ...);
Last edited 14 months ago by bbhtt (previous) (diff)

comment:3 by bbhtt, 14 months ago

Version: unspecifiedgit-master

comment:4 by bbhtt, 12 months ago

This was fixed via https://github.com/FFmpeg/FFmpeg/commit/5fea5e3e11d6ff425db48f44489916399822aece would've been nice to mention or close this bug, anyways...

comment:5 by bbhtt, 12 months ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.