2016-06-30 21:18:56 +08:00
|
|
|
.. -*- coding: utf-8; mode: rst -*-
|
|
|
|
|
2016-07-02 00:42:29 +08:00
|
|
|
.. _VIDIOC_G_FMT:
|
2016-06-30 21:18:56 +08:00
|
|
|
|
|
|
|
************************************************
|
|
|
|
ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT
|
|
|
|
************************************************
|
|
|
|
|
|
|
|
*man VIDIOC_G_FMT(2)*
|
|
|
|
|
|
|
|
VIDIOC_S_FMT
|
|
|
|
VIDIOC_TRY_FMT
|
|
|
|
Get or set the data format, try a format
|
|
|
|
|
|
|
|
|
|
|
|
Synopsis
|
|
|
|
========
|
|
|
|
|
|
|
|
.. c: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 :c:type:`struct 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
|
2016-07-02 01:33:56 +08:00
|
|
|
:ref:`VIDIOC_G_FMT` ioctl with a pointer to this structure the driver fills
|
2016-06-30 21:18:56 +08:00
|
|
|
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
|
2016-07-02 01:33:56 +08:00
|
|
|
application. When the application calls the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl with
|
2016-06-30 21:18:56 +08:00
|
|
|
a pointer to a :c:type:`struct 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
|
2016-07-02 01:33:56 +08:00
|
|
|
prepare for data exchange. Finally the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl returns
|
|
|
|
the current format parameters as :ref:`VIDIOC_G_FMT` does. Very simple,
|
2016-06-30 21:18:56 +08:00
|
|
|
inflexible devices may even ignore all input and always return the
|
|
|
|
default parameters. However all V4L2 devices exchanging data with the
|
2016-07-02 01:33:56 +08:00
|
|
|
application must implement the :ref:`VIDIOC_G_FMT` and :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`
|
2016-06-30 21:18:56 +08:00
|
|
|
ioctl. When the requested buffer type is not supported drivers return an
|
2016-07-02 01:33:56 +08:00
|
|
|
EINVAL error code on a :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` attempt. When I/O is already in
|
2016-06-30 21:18:56 +08:00
|
|
|
progress or the resource is not available for other reasons drivers
|
|
|
|
return the EBUSY error code.
|
|
|
|
|
2016-07-02 01:33:56 +08:00
|
|
|
The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl is equivalent to :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` with one
|
2016-06-30 21:18:56 +08:00
|
|
|
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.
|
|
|
|
|
2016-07-02 01:33:56 +08:00
|
|
|
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.
|
2016-06-30 21:18:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
.. _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.
|
|
|
|
|
|
|
|
|
|
|
|
.. ------------------------------------------------------------------------------
|
|
|
|
.. 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
|
|
|
|
.. ------------------------------------------------------------------------------
|