Merge remote-tracking branch 'iommu/next'
[deliverable/linux.git] / Documentation / media / uapi / v4l / vidioc-g-fmt.rst
CommitLineData
5377d91f
MH
1.. -*- coding: utf-8; mode: rst -*-
2
af4a4d0d 3.. _VIDIOC_G_FMT:
5377d91f
MH
4
5************************************************
6ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT
7************************************************
8
15e7d615 9Name
586027ce 10====
5377d91f 11
586027ce 12VIDIOC_G_FMT - VIDIOC_S_FMT - VIDIOC_TRY_FMT - Get or set the data format, try a format
5377d91f 13
15e7d615
MCC
14
15Synopsis
5377d91f
MH
16========
17
41d80465
MCC
18.. c:function:: int ioctl( int fd, VIDIOC_G_FMT, struct v4l2_format *argp )
19 :name: VIDIOC_G_FMT
5377d91f 20
41d80465
MCC
21.. c:function:: int ioctl( int fd, VIDIOC_S_FMT, struct v4l2_format *argp )
22 :name: VIDIOC_S_FMT
23
24.. c:function:: int ioctl( int fd, VIDIOC_TRY_FMT, struct v4l2_format *argp )
25 :name: VIDIOC_TRY_FMT
586027ce 26
15e7d615 27Arguments
5377d91f
MH
28=========
29
30``fd``
31 File descriptor returned by :ref:`open() <func-open>`.
32
5377d91f
MH
33``argp``
34
35
15e7d615 36Description
5377d91f
MH
37===========
38
39These ioctls are used to negotiate the format of data (typically image
40format) exchanged between driver and application.
41
42To query the current parameters applications set the ``type`` field of a
fc78c7c7 43struct :c:type:`v4l2_format` to the respective buffer (stream)
5377d91f
MH
44type. For example video capture devices use
45``V4L2_BUF_TYPE_VIDEO_CAPTURE`` or
46``V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE``. When the application calls the
4e03cb76 47:ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` ioctl with a pointer to this structure the driver fills
5377d91f
MH
48the respective member of the ``fmt`` union. In case of video capture
49devices that is either the struct
e8be7e97
MCC
50:c:type:`v4l2_pix_format` ``pix`` or the struct
51:c:type:`v4l2_pix_format_mplane` ``pix_mp``
5377d91f 52member. When the requested buffer type is not supported drivers return
cdb4af0f 53an ``EINVAL`` error code.
5377d91f
MH
54
55To change the current format parameters applications initialize the
56``type`` field and all fields of the respective ``fmt`` union member.
57For details see the documentation of the various devices types in
58:ref:`devices`. Good practice is to query the current parameters
59first, and to modify only those parameters not suitable for the
2212ff25 60application. When the application calls the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl with
fc78c7c7 61a pointer to a struct :c:type:`v4l2_format` structure the driver
5377d91f
MH
62checks and adjusts the parameters against hardware abilities. Drivers
63should not return an error code unless the ``type`` field is invalid,
64this is a mechanism to fathom device capabilities and to approach
65parameters acceptable for both the application and driver. On success
66the driver may program the hardware, allocate resources and generally
2212ff25 67prepare for data exchange. Finally the :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` ioctl returns
4e03cb76 68the current format parameters as :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` does. Very simple,
5377d91f
MH
69inflexible devices may even ignore all input and always return the
70default parameters. However all V4L2 devices exchanging data with the
4e03cb76 71application must implement the :ref:`VIDIOC_G_FMT <VIDIOC_G_FMT>` and :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>`
5377d91f 72ioctl. When the requested buffer type is not supported drivers return an
2212ff25 73EINVAL error code on a :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` attempt. When I/O is already in
5377d91f 74progress or the resource is not available for other reasons drivers
cdb4af0f 75return the ``EBUSY`` error code.
5377d91f 76
2212ff25 77The :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` ioctl is equivalent to :ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` with one
5377d91f 78exception: it does not change driver state. It can also be called at any
cdb4af0f 79time, never returning ``EBUSY``. This function is provided to negotiate
5377d91f
MH
80parameters, to learn about hardware limitations, without disabling I/O
81or possibly time consuming hardware preparations. Although strongly
82recommended drivers are not required to implement this ioctl.
83
2212ff25
MCC
84The format as returned by :ref:`VIDIOC_TRY_FMT <VIDIOC_G_FMT>` must be identical to what
85:ref:`VIDIOC_S_FMT <VIDIOC_G_FMT>` returns for the same input or output.
5377d91f
MH
86
87
e8be7e97 88.. c:type:: v4l2_format
5377d91f 89
ef76c068
MCC
90.. tabularcolumns:: |p{1.2cm}|p{4.3cm}|p{3.0cm}|p{9.0cm}|
91
5377d91f
MH
92.. flat-table:: struct v4l2_format
93 :header-rows: 0
94 :stub-columns: 0
95
96
97 - .. row 1
98
99 - __u32
100
101 - ``type``
102
0579e6e3 103 -
56683d7d 104 - Type of the data stream, see :c:type:`v4l2_buf_type`.
5377d91f
MH
105
106 - .. row 2
107
108 - union
109
110 - ``fmt``
111
112 - .. row 3
113
0579e6e3 114 -
e8be7e97 115 - struct :c:type:`v4l2_pix_format`
5377d91f
MH
116
117 - ``pix``
118
119 - Definition of an image format, see :ref:`pixfmt`, used by video
0579e6e3 120 capture and output devices.
5377d91f
MH
121
122 - .. row 4
123
0579e6e3 124 -
e8be7e97 125 - struct :c:type:`v4l2_pix_format_mplane`
5377d91f
MH
126
127 - ``pix_mp``
128
129 - Definition of an image format, see :ref:`pixfmt`, used by video
0579e6e3
MCC
130 capture and output devices that support the
131 :ref:`multi-planar version of the API <planar-apis>`.
5377d91f
MH
132
133 - .. row 5
134
0579e6e3 135 -
e8be7e97 136 - struct :c:type:`v4l2_window`
5377d91f
MH
137
138 - ``win``
139
140 - Definition of an overlaid image, see :ref:`overlay`, used by
0579e6e3 141 video overlay devices.
5377d91f
MH
142
143 - .. row 6
144
0579e6e3 145 -
e8be7e97 146 - struct :c:type:`v4l2_vbi_format`
5377d91f
MH
147
148 - ``vbi``
149
150 - Raw VBI capture or output parameters. This is discussed in more
0579e6e3
MCC
151 detail in :ref:`raw-vbi`. Used by raw VBI capture and output
152 devices.
5377d91f
MH
153
154 - .. row 7
155
0579e6e3 156 -
e8be7e97 157 - struct :c:type:`v4l2_sliced_vbi_format`
5377d91f
MH
158
159 - ``sliced``
160
161 - Sliced VBI capture or output parameters. See :ref:`sliced` for
0579e6e3 162 details. Used by sliced VBI capture and output devices.
5377d91f
MH
163
164 - .. row 8
165
0579e6e3 166 -
e8be7e97 167 - struct :c:type:`v4l2_sdr_format`
5377d91f
MH
168
169 - ``sdr``
170
171 - Definition of a data format, see :ref:`pixfmt`, used by SDR
0579e6e3 172 capture and output devices.
5377d91f
MH
173
174 - .. row 9
175
0579e6e3 176 -
5377d91f
MH
177 - __u8
178
8968da9b 179 - ``raw_data``\ [200]
5377d91f
MH
180
181 - Place holder for future extensions.
182
183
15e7d615 184Return Value
5377d91f
MH
185============
186
187On success 0 is returned, on error -1 and the ``errno`` variable is set
188appropriately. The generic error codes are described at the
189:ref:`Generic Error Codes <gen-errors>` chapter.
190
191EINVAL
e8be7e97 192 The struct :c:type:`v4l2_format` ``type`` field is
5377d91f 193 invalid or the requested buffer type not supported.
This page took 0.057856 seconds and 5 git commands to generate.