Re: [PATCH] videodev2.h: drop V4L2_CAP_ASYNCIO

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Hans,

On Wed, Aug 03, 2022 at 01:39:04PM +0200, Hans Verkuil wrote:
> On 03/08/2022 13:22, Laurent Pinchart wrote:
> > On Wed, Aug 03, 2022 at 12:04:02PM +0200, Hans Verkuil wrote:
> >> The V4L2_CAP_ASYNCIO capability was never implemented (and in fact
> >> it isn't clear what it is supposed to do in the first place).
> >>
> >> Drop it from the capabilities list. Keep it in videodev2.h defined
> >> to 0 with the other defines under ifndef __KERNEL__ for backwards
> >> compatibility.
> >>
> >> This will free up a capability bit for other future uses. And having
> >> an unused and undefined I/O method is just plain confusing.
> >>
> >> Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
> >> ---
> >>  Documentation/userspace-api/media/v4l/async.rst          | 9 ---------
> >>  Documentation/userspace-api/media/v4l/dev-raw-vbi.rst    | 2 +-
> >>  Documentation/userspace-api/media/v4l/dev-sdr.rst        | 2 +-
> >>  Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst | 2 +-
> >>  Documentation/userspace-api/media/v4l/hist-v4l2.rst      | 2 +-
> >>  Documentation/userspace-api/media/v4l/io.rst             | 4 +---
> >>  .../userspace-api/media/v4l/vidioc-querycap.rst          | 3 ---
> >>  include/uapi/linux/videodev2.h                           | 2 +-
> >>  8 files changed, 6 insertions(+), 20 deletions(-)
> >>  delete mode 100644 Documentation/userspace-api/media/v4l/async.rst
> >>
> >> diff --git a/Documentation/userspace-api/media/v4l/async.rst b/Documentation/userspace-api/media/v4l/async.rst
> >> deleted file mode 100644
> >> index d6960ff5c382..000000000000
> >> --- a/Documentation/userspace-api/media/v4l/async.rst
> >> +++ /dev/null
> >> @@ -1,9 +0,0 @@
> >> -.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
> >> -
> >> -.. _async:
> >> -
> >> -****************
> >> -Asynchronous I/O
> >> -****************
> >> -
> >> -This method is not defined yet.
> >> diff --git a/Documentation/userspace-api/media/v4l/dev-raw-vbi.rst b/Documentation/userspace-api/media/v4l/dev-raw-vbi.rst
> >> index 58f97c3a7792..2bec20d87928 100644
> >> --- a/Documentation/userspace-api/media/v4l/dev-raw-vbi.rst
> >> +++ b/Documentation/userspace-api/media/v4l/dev-raw-vbi.rst
> >> @@ -41,7 +41,7 @@ Devices supporting the raw VBI capturing or output API set the
> >>  in the ``capabilities`` field of struct
> >>  :c:type:`v4l2_capability` returned by the
> >>  :ref:`VIDIOC_QUERYCAP` ioctl. At least one of the
> >> -read/write, streaming or asynchronous I/O methods must be supported. VBI
> >> +read/write or streaming I/O methods must be supported. VBI
> >>  devices may or may not have a tuner or modulator.
> >>  
> >>  Supplemental Functions
> >> diff --git a/Documentation/userspace-api/media/v4l/dev-sdr.rst b/Documentation/userspace-api/media/v4l/dev-sdr.rst
> >> index 928884dfe09d..dfdeddbca41f 100644
> >> --- a/Documentation/userspace-api/media/v4l/dev-sdr.rst
> >> +++ b/Documentation/userspace-api/media/v4l/dev-sdr.rst
> >> @@ -34,7 +34,7 @@ Devices supporting the SDR transmitter interface set the
> >>  device has an Digital to Analog Converter (DAC), which is a mandatory
> >>  element for the SDR transmitter.
> >>  
> >> -At least one of the read/write, streaming or asynchronous I/O methods
> >> +At least one of the read/write or streaming I/O methods
> >>  must be supported.
> >>  
> >>  
> >> diff --git a/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst b/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst
> >> index 97ec2b115c71..44415822c7c5 100644
> >> --- a/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst
> >> +++ b/Documentation/userspace-api/media/v4l/dev-sliced-vbi.rst
> >> @@ -36,7 +36,7 @@ Devices supporting the sliced VBI capturing or output API set the
> >>  respectively, in the ``capabilities`` field of struct
> >>  :c:type:`v4l2_capability` returned by the
> >>  :ref:`VIDIOC_QUERYCAP` ioctl. At least one of the
> >> -read/write, streaming or asynchronous :ref:`I/O methods <io>` must be
> >> +read/write or streaming :ref:`I/O methods <io>` must be
> >>  supported. Sliced VBI devices may have a tuner or modulator.
> >>  
> >>  Supplemental Functions
> >> diff --git a/Documentation/userspace-api/media/v4l/hist-v4l2.rst b/Documentation/userspace-api/media/v4l/hist-v4l2.rst
> >> index 28a2750d5c8c..dbc04374dc22 100644
> >> --- a/Documentation/userspace-api/media/v4l/hist-v4l2.rst
> >> +++ b/Documentation/userspace-api/media/v4l/hist-v4l2.rst
> >> @@ -316,7 +316,7 @@ This unnamed version was finally merged into Linux 2.5.46.
> >>      There are new fields to identify the driver, a new RDS device
> >>      function ``V4L2_CAP_RDS_CAPTURE``, the ``V4L2_CAP_AUDIO`` flag
> >>      indicates if the device has any audio connectors, another I/O
> >> -    capability ``V4L2_CAP_ASYNCIO`` can be flagged. In response to these
> >> +    capability V4L2_CAP_ASYNCIO can be flagged. In response to these
> >>      changes the ``type`` field became a bit set and was merged into the
> >>      ``flags`` field. ``V4L2_FLAG_TUNER`` was renamed to
> >>      ``V4L2_CAP_TUNER``, ``V4L2_CAP_VIDEO_OVERLAY`` replaced
> >> diff --git a/Documentation/userspace-api/media/v4l/io.rst b/Documentation/userspace-api/media/v4l/io.rst
> >> index ce0cece6f35f..4b1964df9d73 100644
> >> --- a/Documentation/userspace-api/media/v4l/io.rst
> >> +++ b/Documentation/userspace-api/media/v4l/io.rst
> >> @@ -17,8 +17,7 @@ read or write will fail at any time.
> >>  
> >>  Other methods must be negotiated. To select the streaming I/O method
> >>  with memory mapped or user buffers applications call the
> >> -:ref:`VIDIOC_REQBUFS` ioctl. The asynchronous I/O
> >> -method is not defined yet.
> >> +:ref:`VIDIOC_REQBUFS` ioctl.
> >>  
> >>  Video overlay can be considered another I/O method, although the
> >>  application does not directly receive the image data. It is selected by
> >> @@ -46,6 +45,5 @@ The following sections describe the various I/O methods in more detail.
> >>      mmap
> >>      userp
> >>      dmabuf
> >> -    async
> >>      buffer
> >>      field-order
> >> diff --git a/Documentation/userspace-api/media/v4l/vidioc-querycap.rst b/Documentation/userspace-api/media/v4l/vidioc-querycap.rst
> >> index 63e23f6f95ee..6c57b8428356 100644
> >> --- a/Documentation/userspace-api/media/v4l/vidioc-querycap.rst
> >> +++ b/Documentation/userspace-api/media/v4l/vidioc-querycap.rst
> >> @@ -244,9 +244,6 @@ specification the ioctl returns an ``EINVAL`` error code.
> >>        - 0x01000000
> >>        - The device supports the :c:func:`read()` and/or
> >>  	:c:func:`write()` I/O methods.
> >> -    * - ``V4L2_CAP_ASYNCIO``
> >> -      - 0x02000000
> >> -      - The device supports the :ref:`asynchronous <async>` I/O methods.
> >>      * - ``V4L2_CAP_STREAMING``
> >>        - 0x04000000
> >>        - The device supports the :ref:`streaming <mmap>` I/O method.
> >> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> >> index 01e630f2ec78..1af12e5928aa 100644
> >> --- a/include/uapi/linux/videodev2.h
> >> +++ b/include/uapi/linux/videodev2.h
> >> @@ -502,7 +502,6 @@ struct v4l2_capability {
> >>  #define V4L2_CAP_META_CAPTURE		0x00800000  /* Is a metadata capture device */
> >>  
> >>  #define V4L2_CAP_READWRITE              0x01000000  /* read/write systemcalls */
> >> -#define V4L2_CAP_ASYNCIO                0x02000000  /* async I/O */
> >>  #define V4L2_CAP_STREAMING              0x04000000  /* streaming I/O ioctls */
> >>  #define V4L2_CAP_META_OUTPUT		0x08000000  /* Is a metadata output device */
> >>  
> >> @@ -2682,6 +2681,7 @@ struct v4l2_create_buffers {
> >>  #ifndef __KERNEL__
> >>  #define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
> >>  #define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
> >> +#define V4L2_CAP_ASYNCIO 0
> > 
> > I'm fine dropping V4L2_CAP_ASYNCIO, but this particular change doesn't
> > sound right. Applications that would do, for instance,
> > 
> > 	if (caps & V4L2_CAP_ASYNCIO) {
> > 		...
> > 	}
> > 
> > could now get a warning from the compiler that the condition is always
> > false.
> 
> Isn't that better than failing to compile?

Yes, but it's worse than compiling without warning :-) Especially for
projects that compile with -Werror by default.

> When it is used in applications it is typically used to log the caps:
> 
> 		if (vid_cap.capabilities & V4L2_CAP_ASYNCIO){
> 			printf("    Supports async i/o: Yes\n");
> 		} else {
> 			printf("    Supports async i/o: No\n");
> 		}
> 
> (https://gist.github.com/tugstugi/2627647, found with a quick google search).
> 
> Just dropping the cap altogether will cause all these applications to fail to
> compile, and I don't think that's the right thing to do.
> 
> I do think that a comment should be added in videodev2.h stating that that
> capability was never actually used and applications should remove support for
> it (or something along those lines). So if they see the warning, then they can
> look up in the header what they should do to fix it.
> 
> If you have a better suggestion, then I'm all ears :-)

We could keep it defined with its current value. The drawback is that it
will indeed not push applications to drop usage of V4L2_CAP_ASYNCIO if
they don't notice anything.

libcamera doesn't use that flag so I'm not too concerned personally :-)
v4l-utils should be fixed though, but it carries a copy of videodev2.h,
so it won't be directly affected.

> >>  #endif
> >>  
> >>  #endif /* _UAPI__LINUX_VIDEODEV2_H */

-- 
Regards,

Laurent Pinchart



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux