| .. -*- coding: utf-8; mode: rst -*- |
| |
| .. _VIDIOC_G_FMT: |
| |
| ************************************************ |
| ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT |
| ************************************************ |
| |
| Name |
| ==== |
| |
| VIDIOC_G_FMT - VIDIOC_S_FMT - VIDIOC_TRY_FMT - Get or set the data format, try a format |
| |
| |
| Synopsis |
| ======== |
| |
| .. cpp:function:: int ioctl( int fd, int request, struct v4l2_format *argp ) |
| |
| |
| Arguments |
| ========= |
| |
| ``fd`` |
| File descriptor returned by :ref:`open() <func-open>`. |
| |
| ``request`` |
| VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT |
| |
| ``argp`` |
| |
| |
| Description |
| =========== |
| |
| These ioctls are used to negotiate the format of data (typically image |
| format) exchanged between driver and application. |
| |
| To query the current parameters applications set the ``type`` field of a |
| struct :ref:`struct v4l2_format <v4l2-format>` to the respective buffer (stream) |
| type. For example video capture devices use |
| ``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or |
| ``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``. When the application calls the |
| :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctl with a pointer to this structure the driver fills |
| the respective member of the ``fmt`` union. In case of video capture |
| devices that is either the struct |
| :ref:`v4l2_pix_format <v4l2-pix-format>` ``pix`` or the struct |
| :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` ``pix_mp`` |
| member. When the requested buffer type is not supported drivers return |
| an ``EINVAL`` error code. |
| |
| To change the current format parameters applications initialize the |
| ``type`` field and all fields of the respective ``fmt`` union member. |
| For details see the documentation of the various devices types in |
| :ref:`devices`. Good practice is to query the current parameters |
| first, and to modify only those parameters not suitable for the |
| application. When the application calls the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl with |
| a pointer to a :ref:`struct v4l2_format <v4l2-format>` structure the driver |
| checks and adjusts the parameters against hardware abilities. Drivers |
| should not return an error code unless the ``type`` field is invalid, |
| this is a mechanism to fathom device capabilities and to approach |
| parameters acceptable for both the application and driver. On success |
| the driver may program the hardware, allocate resources and generally |
| prepare for data exchange. Finally the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl returns |
| the current format parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does. Very simple, |
| inflexible devices may even ignore all input and always return the |
| default parameters. However all V4L2 devices exchanging data with the |
| application must implement the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` |
| ioctl. When the requested buffer type is not supported drivers return an |
| EINVAL error code on a :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` attempt. When I/O is already in |
| progress or the resource is not available for other reasons drivers |
| return the ``EBUSY`` error code. |
| |
| The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl is equivalent to :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` with one |
| exception: it does not change driver state. It can also be called at any |
| time, never returning ``EBUSY``. This function is provided to negotiate |
| parameters, to learn about hardware limitations, without disabling I/O |
| or possibly time consuming hardware preparations. Although strongly |
| recommended drivers are not required to implement this ioctl. |
| |
| The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical to what |
| :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` returns for the same input or output. |
| |
| |
| .. _v4l2-format: |
| |
| .. flat-table:: struct v4l2_format |
| :header-rows: 0 |
| :stub-columns: 0 |
| |
| |
| - .. row 1 |
| |
| - __u32 |
| |
| - ``type`` |
| |
| - |
| - Type of the data stream, see :ref:`v4l2-buf-type`. |
| |
| - .. row 2 |
| |
| - union |
| |
| - ``fmt`` |
| |
| - .. row 3 |
| |
| - |
| - struct :ref:`v4l2_pix_format <v4l2-pix-format>` |
| |
| - ``pix`` |
| |
| - Definition of an image format, see :ref:`pixfmt`, used by video |
| capture and output devices. |
| |
| - .. row 4 |
| |
| - |
| - struct :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` |
| |
| - ``pix_mp`` |
| |
| - Definition of an image format, see :ref:`pixfmt`, used by video |
| capture and output devices that support the |
| :ref:`multi-planar version of the API <planar-apis>`. |
| |
| - .. row 5 |
| |
| - |
| - struct :ref:`v4l2_window <v4l2-window>` |
| |
| - ``win`` |
| |
| - Definition of an overlaid image, see :ref:`overlay`, used by |
| video overlay devices. |
| |
| - .. row 6 |
| |
| - |
| - struct :ref:`v4l2_vbi_format <v4l2-vbi-format>` |
| |
| - ``vbi`` |
| |
| - Raw VBI capture or output parameters. This is discussed in more |
| detail in :ref:`raw-vbi`. Used by raw VBI capture and output |
| devices. |
| |
| - .. row 7 |
| |
| - |
| - struct :ref:`v4l2_sliced_vbi_format <v4l2-sliced-vbi-format>` |
| |
| - ``sliced`` |
| |
| - Sliced VBI capture or output parameters. See :ref:`sliced` for |
| details. Used by sliced VBI capture and output devices. |
| |
| - .. row 8 |
| |
| - |
| - struct :ref:`v4l2_sdr_format <v4l2-sdr-format>` |
| |
| - ``sdr`` |
| |
| - Definition of a data format, see :ref:`pixfmt`, used by SDR |
| capture and output devices. |
| |
| - .. row 9 |
| |
| - |
| - __u8 |
| |
| - ``raw_data``\ [200] |
| |
| - Place holder for future extensions. |
| |
| |
| 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. |
| |
| EINVAL |
| The struct :ref:`v4l2_format <v4l2-format>` ``type`` field is |
| invalid or the requested buffer type not supported. |