| .. -*- coding: utf-8; mode: rst -*- |
| |
| .. _vidioc-querycap: |
| |
| ********************* |
| ioctl VIDIOC_QUERYCAP |
| ********************* |
| |
| *man VIDIOC_QUERYCAP(2)* |
| |
| Query device capabilities |
| |
| |
| Synopsis |
| ======== |
| |
| .. c:function:: int ioctl( int fd, int request, struct v4l2_capability *argp ) |
| |
| Arguments |
| ========= |
| |
| ``fd`` |
| File descriptor returned by :ref:`open() <func-open>`. |
| |
| ``request`` |
| VIDIOC_QUERYCAP |
| |
| ``argp`` |
| |
| |
| Description |
| =========== |
| |
| All V4L2 devices support the ``VIDIOC_QUERYCAP`` ioctl. It is used to |
| identify kernel devices compatible with this specification and to obtain |
| information about driver and hardware capabilities. The ioctl takes a |
| pointer to a struct :ref:`v4l2_capability <v4l2-capability>` which is |
| filled by the driver. When the driver is not compatible with this |
| specification the ioctl returns an EINVAL error code. |
| |
| |
| .. _v4l2-capability: |
| |
| .. flat-table:: struct v4l2_capability |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 1 1 2 |
| |
| |
| - .. row 1 |
| |
| - __u8 |
| |
| - ``driver``\ [16] |
| |
| - Name of the driver, a unique NUL-terminated ASCII string. For |
| example: "bttv". Driver specific applications can use this |
| information to verify the driver identity. It is also useful to |
| work around known bugs, or to identify drivers in error reports. |
| |
| Storing strings in fixed sized arrays is bad practice but |
| unavoidable here. Drivers and applications should take precautions |
| to never read or write beyond the end of the array and to make |
| sure the strings are properly NUL-terminated. |
| |
| - .. row 2 |
| |
| - __u8 |
| |
| - ``card``\ [32] |
| |
| - Name of the device, a NUL-terminated UTF-8 string. For example: |
| "Yoyodyne TV/FM". One driver may support different brands or |
| models of video hardware. This information is intended for users, |
| for example in a menu of available devices. Since multiple TV |
| cards of the same brand may be installed which are supported by |
| the same driver, this name should be combined with the character |
| device file name (e. g. ``/dev/video2``) or the ``bus_info`` |
| string to avoid ambiguities. |
| |
| - .. row 3 |
| |
| - __u8 |
| |
| - ``bus_info``\ [32] |
| |
| - Location of the device in the system, a NUL-terminated ASCII |
| string. For example: "PCI:0000:05:06.0". This information is |
| intended for users, to distinguish multiple identical devices. If |
| no such information is available the field must simply count the |
| devices controlled by the driver ("platform:vivi-000"). The |
| bus_info must start with "PCI:" for PCI boards, "PCIe:" for PCI |
| Express boards, "usb-" for USB devices, "I2C:" for i2c devices, |
| "ISA:" for ISA devices, "parport" for parallel port devices and |
| "platform:" for platform devices. |
| |
| - .. row 4 |
| |
| - __u32 |
| |
| - ``version`` |
| |
| - Version number of the driver. |
| |
| Starting with kernel 3.1, the version reported is provided by the |
| V4L2 subsystem following the kernel numbering scheme. However, it |
| may not always return the same version as the kernel if, for |
| example, a stable or distribution-modified kernel uses the V4L2 |
| stack from a newer kernel. |
| |
| The version number is formatted using the ``KERNEL_VERSION()`` |
| macro: |
| |
| - .. row 5 |
| |
| - :cspan:`2` |
| |
| |
| .. code-block:: c |
| |
| #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) |
| |
| __u32 version = KERNEL_VERSION(0, 8, 1); |
| |
| printf ("Version: %u.%u.%u\\n", |
| (version >> 16) & 0xFF, |
| (version >> 8) & 0xFF, |
| version & 0xFF); |
| |
| - .. row 6 |
| |
| - __u32 |
| |
| - ``capabilities`` |
| |
| - Available capabilities of the physical device as a whole, see |
| :ref:`device-capabilities`. The same physical device can export |
| multiple devices in /dev (e.g. /dev/videoX, /dev/vbiY and |
| /dev/radioZ). The ``capabilities`` field should contain a union of |
| all capabilities available around the several V4L2 devices |
| exported to userspace. For all those devices the ``capabilities`` |
| field returns the same set of capabilities. This allows |
| applications to open just one of the devices (typically the video |
| device) and discover whether video, vbi and/or radio are also |
| supported. |
| |
| - .. row 7 |
| |
| - __u32 |
| |
| - ``device_caps`` |
| |
| - Device capabilities of the opened device, see |
| :ref:`device-capabilities`. Should contain the available |
| capabilities of that specific device node. So, for example, |
| ``device_caps`` of a radio device will only contain radio related |
| capabilities and no video or vbi capabilities. This field is only |
| set if the ``capabilities`` field contains the |
| ``V4L2_CAP_DEVICE_CAPS`` capability. Only the ``capabilities`` |
| field can have the ``V4L2_CAP_DEVICE_CAPS`` capability, |
| ``device_caps`` will never set ``V4L2_CAP_DEVICE_CAPS``. |
| |
| - .. row 8 |
| |
| - __u32 |
| |
| - ``reserved``\ [3] |
| |
| - Reserved for future extensions. Drivers must set this array to |
| zero. |
| |
| |
| |
| .. _device-capabilities: |
| |
| .. flat-table:: Device Capabilities Flags |
| :header-rows: 0 |
| :stub-columns: 0 |
| :widths: 3 1 4 |
| |
| |
| - .. row 1 |
| |
| - ``V4L2_CAP_VIDEO_CAPTURE`` |
| |
| - 0x00000001 |
| |
| - The device supports the single-planar API through the |
| :ref:`Video Capture <capture>` interface. |
| |
| - .. row 2 |
| |
| - ``V4L2_CAP_VIDEO_CAPTURE_MPLANE`` |
| |
| - 0x00001000 |
| |
| - The device supports the :ref:`multi-planar API <planar-apis>` |
| through the :ref:`Video Capture <capture>` interface. |
| |
| - .. row 3 |
| |
| - ``V4L2_CAP_VIDEO_OUTPUT`` |
| |
| - 0x00000002 |
| |
| - The device supports the single-planar API through the |
| :ref:`Video Output <output>` interface. |
| |
| - .. row 4 |
| |
| - ``V4L2_CAP_VIDEO_OUTPUT_MPLANE`` |
| |
| - 0x00002000 |
| |
| - The device supports the :ref:`multi-planar API <planar-apis>` |
| through the :ref:`Video Output <output>` interface. |
| |
| - .. row 5 |
| |
| - ``V4L2_CAP_VIDEO_M2M`` |
| |
| - 0x00004000 |
| |
| - The device supports the single-planar API through the Video |
| Memory-To-Memory interface. |
| |
| - .. row 6 |
| |
| - ``V4L2_CAP_VIDEO_M2M_MPLANE`` |
| |
| - 0x00008000 |
| |
| - The device supports the :ref:`multi-planar API <planar-apis>` |
| through the Video Memory-To-Memory interface. |
| |
| - .. row 7 |
| |
| - ``V4L2_CAP_VIDEO_OVERLAY`` |
| |
| - 0x00000004 |
| |
| - The device supports the :ref:`Video Overlay <overlay>` |
| interface. A video overlay device typically stores captured images |
| directly in the video memory of a graphics card, with hardware |
| clipping and scaling. |
| |
| - .. row 8 |
| |
| - ``V4L2_CAP_VBI_CAPTURE`` |
| |
| - 0x00000010 |
| |
| - The device supports the :ref:`Raw VBI Capture <raw-vbi>` |
| interface, providing Teletext and Closed Caption data. |
| |
| - .. row 9 |
| |
| - ``V4L2_CAP_VBI_OUTPUT`` |
| |
| - 0x00000020 |
| |
| - The device supports the :ref:`Raw VBI Output <raw-vbi>` |
| interface. |
| |
| - .. row 10 |
| |
| - ``V4L2_CAP_SLICED_VBI_CAPTURE`` |
| |
| - 0x00000040 |
| |
| - The device supports the :ref:`Sliced VBI Capture <sliced>` |
| interface. |
| |
| - .. row 11 |
| |
| - ``V4L2_CAP_SLICED_VBI_OUTPUT`` |
| |
| - 0x00000080 |
| |
| - The device supports the :ref:`Sliced VBI Output <sliced>` |
| interface. |
| |
| - .. row 12 |
| |
| - ``V4L2_CAP_RDS_CAPTURE`` |
| |
| - 0x00000100 |
| |
| - The device supports the :ref:`RDS <rds>` capture interface. |
| |
| - .. row 13 |
| |
| - ``V4L2_CAP_VIDEO_OUTPUT_OVERLAY`` |
| |
| - 0x00000200 |
| |
| - The device supports the :ref:`Video Output Overlay <osd>` (OSD) |
| interface. Unlike the *Video Overlay* interface, this is a |
| secondary function of video output devices and overlays an image |
| onto an outgoing video signal. When the driver sets this flag, it |
| must clear the ``V4L2_CAP_VIDEO_OVERLAY`` flag and vice |
| versa. [1]_ |
| |
| - .. row 14 |
| |
| - ``V4L2_CAP_HW_FREQ_SEEK`` |
| |
| - 0x00000400 |
| |
| - The device supports the |
| :ref:`VIDIOC_S_HW_FREQ_SEEK <vidioc-s-hw-freq-seek>` ioctl |
| for hardware frequency seeking. |
| |
| - .. row 15 |
| |
| - ``V4L2_CAP_RDS_OUTPUT`` |
| |
| - 0x00000800 |
| |
| - The device supports the :ref:`RDS <rds>` output interface. |
| |
| - .. row 16 |
| |
| - ``V4L2_CAP_TUNER`` |
| |
| - 0x00010000 |
| |
| - The device has some sort of tuner to receive RF-modulated video |
| signals. For more information about tuner programming see |
| :ref:`tuner`. |
| |
| - .. row 17 |
| |
| - ``V4L2_CAP_AUDIO`` |
| |
| - 0x00020000 |
| |
| - The device has audio inputs or outputs. It may or may not support |
| audio recording or playback, in PCM or compressed formats. PCM |
| audio support must be implemented as ALSA or OSS interface. For |
| more information on audio inputs and outputs see :ref:`audio`. |
| |
| - .. row 18 |
| |
| - ``V4L2_CAP_RADIO`` |
| |
| - 0x00040000 |
| |
| - This is a radio receiver. |
| |
| - .. row 19 |
| |
| - ``V4L2_CAP_MODULATOR`` |
| |
| - 0x00080000 |
| |
| - The device has some sort of modulator to emit RF-modulated |
| video/audio signals. For more information about modulator |
| programming see :ref:`tuner`. |
| |
| - .. row 20 |
| |
| - ``V4L2_CAP_SDR_CAPTURE`` |
| |
| - 0x00100000 |
| |
| - The device supports the :ref:`SDR Capture <sdr>` interface. |
| |
| - .. row 21 |
| |
| - ``V4L2_CAP_EXT_PIX_FORMAT`` |
| |
| - 0x00200000 |
| |
| - The device supports the struct |
| :ref:`v4l2_pix_format <v4l2-pix-format>` extended fields. |
| |
| - .. row 22 |
| |
| - ``V4L2_CAP_SDR_OUTPUT`` |
| |
| - 0x00400000 |
| |
| - The device supports the :ref:`SDR Output <sdr>` interface. |
| |
| - .. row 23 |
| |
| - ``V4L2_CAP_READWRITE`` |
| |
| - 0x01000000 |
| |
| - The device supports the :ref:`read() <rw>` and/or |
| :ref:`write() <rw>` I/O methods. |
| |
| - .. row 24 |
| |
| - ``V4L2_CAP_ASYNCIO`` |
| |
| - 0x02000000 |
| |
| - The device supports the :ref:`asynchronous <async>` I/O methods. |
| |
| - .. row 25 |
| |
| - ``V4L2_CAP_STREAMING`` |
| |
| - 0x04000000 |
| |
| - The device supports the :ref:`streaming <mmap>` I/O method. |
| |
| - .. row 26 |
| |
| - ``V4L2_CAP_DEVICE_CAPS`` |
| |
| - 0x80000000 |
| |
| - The driver fills the ``device_caps`` field. This capability can |
| only appear in the ``capabilities`` field and never in the |
| ``device_caps`` field. |
| |
| |
| |
| 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. |
| |
| .. [1] |
| The struct :ref:`v4l2_framebuffer <v4l2-framebuffer>` lacks an |
| enum :ref:`v4l2_buf_type <v4l2-buf-type>` field, therefore the |
| type of overlay is implied by the driver capabilities. |
| |
| |
| .. ------------------------------------------------------------------------------ |
| .. This file was automatically converted from DocBook-XML with the dbxml |
| .. library (https://github.com/return42/sphkerneldoc). The origin XML comes |
| .. from the linux kernel, refer to: |
| .. |
| .. * https://github.com/torvalds/linux/tree/master/Documentation/DocBook |
| .. ------------------------------------------------------------------------------ |