Skip to content
  • Dmitry V. Levin's avatar
    Replace struct v4l2_buffer with a reliable alternative definition · 1b57b224
    Dmitry V. Levin authored
    Starting with Linux kernel commit v5.6-rc1~93^2~102, the definition
    of struct v4l2_buffer provided by the kernel depends on the flavour
    of struct timeval provided by libc.  This effectively means that we
    cannot use the definition provided by the kernel, neither in the decoder
    nor in tests.
    
    * kernel_v4l2_types.h: New file.
    * Makefile.am (libstrace_a_SOURCES): Add it.
    * types/v4l2.h (struct_v4l2_buffer): Remove.
    * v4l2.c: Include "kernel_v4l2_types.h".
    Replace struct_v4l2_buffer with kernel_v4l2_buffer_t.
    (VIDIOC_QUERYBUF, VIDIOC_QBUF, VIDIOC_DQBUF, VIDIOC_PREPARE_BUF):
    Redefine.
    (print_v4l2_buffer): Use print_timeval64_data_size to print timestamp
    field.
    * linux/32/ioctls_inc_align16.h (VIDIOC_QUERYBUF, VIDIOC_QBUF,
    VIDIOC_DQBUF, VIDIOC_PREPARE_BUF): Update.
    * linux/32/ioctls_inc_align32.h: Likewise.
    * linux/32/ioctls_inc_align64.h: Likewise.
    * xlat/v4l2_ioctl_cmds.in (VIDIOC_QUERYBUF, VIDIOC_QBUF,
    VIDIOC_DQBUF, VIDIOC_PREPARE_BUF): Comment out.
    * tests/ioctl_v4l2.c: Include "kernel_v4l2_types.h".
    (main): Replace struct_v4l2_buffer with kernel_v4l2_buffer_t.
    (VIDIOC_QUERYBUF, VIDIOC_QBUF, VIDIOC_DQBUF, VIDIOC_PREPARE_BUF):
    Redefine.
    * tests/ioctl_v4l2-success.c: Likewise.
    
    Resolves: https://github.com/strace/strace/issues/133
    1b57b224