blob: ee6f11978fd61e682e492cbc9b8cd5c22e6cef4d [file] [log] [blame]
Markus Heiser5377d912016-06-30 15:18:56 +02001.. -*- coding: utf-8; mode: rst -*-
2
Mauro Carvalho Chehabaf4a4d02016-07-01 13:42:29 -03003.. _VIDIOC_G_FMT:
Markus Heiser5377d912016-06-30 15:18:56 +02004
5************************************************
6ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT
7************************************************
8
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -03009Name
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030010====
Markus Heiser5377d912016-06-30 15:18:56 +020011
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030012VIDIOC_G_FMT - VIDIOC_S_FMT - VIDIOC_TRY_FMT - Get or set the data format, try a format
Markus Heiser5377d912016-06-30 15:18:56 +020013
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030014
15Synopsis
Markus Heiser5377d912016-06-30 15:18:56 +020016========
17
Mauro Carvalho Chehabb7e67f62016-07-02 09:49:16 -030018.. cpp:function:: int ioctl( int fd, int request, struct v4l2_format *argp )
Markus Heiser5377d912016-06-30 15:18:56 +020019
Mauro Carvalho Chehab586027c2016-07-05 07:58:48 -030020
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030021Arguments
Markus Heiser5377d912016-06-30 15:18:56 +020022=========
23
24``fd``
25 File descriptor returned by :ref:`open() <func-open>`.
26
27``request``
28 VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT
29
30``argp``
31
32
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -030033Description
Markus Heiser5377d912016-06-30 15:18:56 +020034===========
35
36These ioctls are used to negotiate the format of data (typically image
37format) exchanged between driver and application.
38
39To query the current parameters applications set the ``type`` field of a
Mauro Carvalho Chehabacf309a2016-07-03 13:28:28 -030040struct :ref:`struct v4l2_format <v4l2-format>` to the respective buffer (stream)
Markus Heiser5377d912016-06-30 15:18:56 +020041type. For example video capture devices use
42``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or
43``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``. When the application calls the
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030044:ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctl with a pointer to this structure the driver fills
Markus Heiser5377d912016-06-30 15:18:56 +020045the respective member of the ``fmt`` union. In case of video capture
46devices that is either the struct
47:ref:`v4l2_pix_format <v4l2-pix-format>` ``pix`` or the struct
48:ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>` ``pix_mp``
49member. When the requested buffer type is not supported drivers return
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030050an ``EINVAL`` error code.
Markus Heiser5377d912016-06-30 15:18:56 +020051
52To change the current format parameters applications initialize the
53``type`` field and all fields of the respective ``fmt`` union member.
54For details see the documentation of the various devices types in
55:ref:`devices`. Good practice is to query the current parameters
56first, and to modify only those parameters not suitable for the
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030057application. When the application calls the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl with
Mauro Carvalho Chehabacf309a2016-07-03 13:28:28 -030058a pointer to a :ref:`struct v4l2_format <v4l2-format>` structure the driver
Markus Heiser5377d912016-06-30 15:18:56 +020059checks and adjusts the parameters against hardware abilities. Drivers
60should not return an error code unless the ``type`` field is invalid,
61this is a mechanism to fathom device capabilities and to approach
62parameters acceptable for both the application and driver. On success
63the driver may program the hardware, allocate resources and generally
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030064prepare for data exchange. Finally the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl returns
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030065the current format parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does. Very simple,
Markus Heiser5377d912016-06-30 15:18:56 +020066inflexible devices may even ignore all input and always return the
67default parameters. However all V4L2 devices exchanging data with the
Mauro Carvalho Chehab4e03cb72016-07-03 10:02:29 -030068application must implement the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`
Markus Heiser5377d912016-06-30 15:18:56 +020069ioctl. When the requested buffer type is not supported drivers return an
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030070EINVAL error code on a :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` attempt. When I/O is already in
Markus Heiser5377d912016-06-30 15:18:56 +020071progress or the resource is not available for other reasons drivers
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030072return the ``EBUSY`` error code.
Markus Heiser5377d912016-06-30 15:18:56 +020073
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030074The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl is equivalent to :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` with one
Markus Heiser5377d912016-06-30 15:18:56 +020075exception: it does not change driver state. It can also be called at any
Mauro Carvalho Chehabcdb4af02016-07-03 11:53:09 -030076time, never returning ``EBUSY``. This function is provided to negotiate
Markus Heiser5377d912016-06-30 15:18:56 +020077parameters, to learn about hardware limitations, without disabling I/O
78or possibly time consuming hardware preparations. Although strongly
79recommended drivers are not required to implement this ioctl.
80
Mauro Carvalho Chehab2212ff22016-07-01 14:33:56 -030081The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical to what
82:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` returns for the same input or output.
Markus Heiser5377d912016-06-30 15:18:56 +020083
84
85.. _v4l2-format:
86
87.. flat-table:: struct v4l2_format
88 :header-rows: 0
89 :stub-columns: 0
90
91
92 - .. row 1
93
94 - __u32
95
96 - ``type``
97
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -030098 -
Markus Heiser5377d912016-06-30 15:18:56 +020099 - Type of the data stream, see :ref:`v4l2-buf-type`.
100
101 - .. row 2
102
103 - union
104
105 - ``fmt``
106
107 - .. row 3
108
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300109 -
Markus Heiser5377d912016-06-30 15:18:56 +0200110 - struct :ref:`v4l2_pix_format <v4l2-pix-format>`
111
112 - ``pix``
113
114 - Definition of an image format, see :ref:`pixfmt`, used by video
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300115 capture and output devices.
Markus Heiser5377d912016-06-30 15:18:56 +0200116
117 - .. row 4
118
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300119 -
Markus Heiser5377d912016-06-30 15:18:56 +0200120 - struct :ref:`v4l2_pix_format_mplane <v4l2-pix-format-mplane>`
121
122 - ``pix_mp``
123
124 - Definition of an image format, see :ref:`pixfmt`, used by video
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300125 capture and output devices that support the
126 :ref:`multi-planar version of the API <planar-apis>`.
Markus Heiser5377d912016-06-30 15:18:56 +0200127
128 - .. row 5
129
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300130 -
Markus Heiser5377d912016-06-30 15:18:56 +0200131 - struct :ref:`v4l2_window <v4l2-window>`
132
133 - ``win``
134
135 - Definition of an overlaid image, see :ref:`overlay`, used by
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300136 video overlay devices.
Markus Heiser5377d912016-06-30 15:18:56 +0200137
138 - .. row 6
139
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300140 -
Markus Heiser5377d912016-06-30 15:18:56 +0200141 - struct :ref:`v4l2_vbi_format <v4l2-vbi-format>`
142
143 - ``vbi``
144
145 - Raw VBI capture or output parameters. This is discussed in more
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300146 detail in :ref:`raw-vbi`. Used by raw VBI capture and output
147 devices.
Markus Heiser5377d912016-06-30 15:18:56 +0200148
149 - .. row 7
150
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300151 -
Markus Heiser5377d912016-06-30 15:18:56 +0200152 - struct :ref:`v4l2_sliced_vbi_format <v4l2-sliced-vbi-format>`
153
154 - ``sliced``
155
156 - Sliced VBI capture or output parameters. See :ref:`sliced` for
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300157 details. Used by sliced VBI capture and output devices.
Markus Heiser5377d912016-06-30 15:18:56 +0200158
159 - .. row 8
160
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300161 -
Markus Heiser5377d912016-06-30 15:18:56 +0200162 - struct :ref:`v4l2_sdr_format <v4l2-sdr-format>`
163
164 - ``sdr``
165
166 - Definition of a data format, see :ref:`pixfmt`, used by SDR
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300167 capture and output devices.
Markus Heiser5377d912016-06-30 15:18:56 +0200168
169 - .. row 9
170
Mauro Carvalho Chehab0579e6e2016-07-04 16:25:48 -0300171 -
Markus Heiser5377d912016-06-30 15:18:56 +0200172 - __u8
173
Mauro Carvalho Chehab8968da92016-07-13 08:43:30 -0300174 - ``raw_data``\ [200]
Markus Heiser5377d912016-06-30 15:18:56 +0200175
176 - Place holder for future extensions.
177
178
Mauro Carvalho Chehab15e7d612016-07-05 15:14:35 -0300179Return Value
Markus Heiser5377d912016-06-30 15:18:56 +0200180============
181
182On success 0 is returned, on error -1 and the ``errno`` variable is set
183appropriately. The generic error codes are described at the
184:ref:`Generic Error Codes <gen-errors>` chapter.
185
186EINVAL
187 The struct :ref:`v4l2_format <v4l2-format>` ``type`` field is
188 invalid or the requested buffer type not supported.