.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later
.. c:namespace:: V4L

.. _VIDIOC_SUBDEV_G_CLIENT_CAP:

************************************************************
ioctl VIDIOC_SUBDEV_G_CLIENT_CAP, VIDIOC_SUBDEV_S_CLIENT_CAP
************************************************************

Name
====

VIDIOC_SUBDEV_G_CLIENT_CAP - VIDIOC_SUBDEV_S_CLIENT_CAP - Get or set client
capabilities.

Synopsis
========

.. c:macro:: VIDIOC_SUBDEV_G_CLIENT_CAP

``int ioctl(int fd, VIDIOC_SUBDEV_G_CLIENT_CAP, struct v4l2_subdev_client_capability *argp)``

.. c:macro:: VIDIOC_SUBDEV_S_CLIENT_CAP

``int ioctl(int fd, VIDIOC_SUBDEV_S_CLIENT_CAP, struct v4l2_subdev_client_capability *argp)``

Arguments
=========

``fd``
    File descriptor returned by :ref:`open() <func-open>`.

``argp``
    Pointer to struct :c:type:`v4l2_subdev_client_capability`.

Description
===========

These ioctls are used to get and set the client (the application using the
subdevice ioctls) capabilities. The client capabilities are stored in the file
handle of the opened subdev device node, and the client must set the
capabilities for each opened subdev separately.

By default no client capabilities are set when a subdev device node is opened.

The purpose of the client capabilities are to inform the kernel of the behavior
of the client, mainly related to maintaining compatibility with different
kernel and userspace versions.

The ``VIDIOC_SUBDEV_G_CLIENT_CAP`` ioctl returns the current client capabilities
associated with the file handle ``fd``.

The ``VIDIOC_SUBDEV_S_CLIENT_CAP`` ioctl sets client capabilities for the file
handle ``fd``. The new capabilities fully replace the current capabilities, the
ioctl can therefore also be used to remove capabilities that have previously
been set.

``VIDIOC_SUBDEV_S_CLIENT_CAP`` modifies the struct
:c:type:`v4l2_subdev_client_capability` to reflect the capabilities that have
been accepted. A common case for the kernel not accepting a capability is that
the kernel is older than the headers the userspace uses, and thus the capability
is unknown to the kernel.

.. flat-table:: Client Capabilities
    :header-rows:  1

    * - Capability
      - Description
    * - ``V4L2_SUBDEV_CLIENT_CAP_STREAMS``
      - The client is aware of streams. Setting this flag enables the use
        of 'stream' fields (referring to the stream number) with various
        ioctls. If this is not set (which is the default), the 'stream' fields
        will be forced to 0 by the kernel.
    * - ``V4L2_SUBDEV_CLIENT_CAP_INTERVAL_USES_WHICH``
      - The client is aware of the :c:type:`v4l2_subdev_frame_interval`
        ``which`` field. If this is not set (which is the default), the
        ``which`` field is forced to ``V4L2_SUBDEV_FORMAT_ACTIVE`` by the
        kernel.

Return Value
============

On success 0 is returned, on error -1 and the ``errno`` variable is set
appropriately. The generic error codes are described at the
:ref:`Generic Error Codes <gen-errors>` chapter.

ENOIOCTLCMD
   The kernel does not support this ioctl.
