Opened 15 months ago
Closed 12 months ago
#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)
Change History (6)
by , 15 months ago
| Attachment: | 8de07b11-build.20250501-170943.log added |
|---|
comment:1 by , 14 months ago
The posix ioctl check in https://github.com/FFmpeg/FFmpeg/commit/00b64fca55a3a009c9d0e391c85f4fd3291e5d12 and https://git.linuxtv.org/v4l-utils.git/tree/meson.build#n367 seems correct to me and the ifdefs are also correct https://git.linuxtv.org/v4l-utils.git/tree/lib/include/libv4l2.h#n66
comment:2 by , 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, ...);
comment:3 by , 14 months ago
| Version: | unspecified → git-master |
|---|
comment:4 by , 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 , 12 months ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |



Full build log