1<refentry id="vidioc-g-fmt"> 2 <refmeta> 3 <refentrytitle>ioctl VIDIOC_G_FMT, VIDIOC_S_FMT, 4VIDIOC_TRY_FMT</refentrytitle> 5 &manvol; 6 </refmeta> 7 8 <refnamediv> 9 <refname>VIDIOC_G_FMT</refname> 10 <refname>VIDIOC_S_FMT</refname> 11 <refname>VIDIOC_TRY_FMT</refname> 12 <refpurpose>Get or set the data format, try a format</refpurpose> 13 </refnamediv> 14 15 <refsynopsisdiv> 16 <funcsynopsis> 17 <funcprototype> 18 <funcdef>int <function>ioctl</function></funcdef> 19 <paramdef>int <parameter>fd</parameter></paramdef> 20 <paramdef>int <parameter>request</parameter></paramdef> 21 <paramdef>struct v4l2_format 22*<parameter>argp</parameter></paramdef> 23 </funcprototype> 24 </funcsynopsis> 25 </refsynopsisdiv> 26 27 <refsect1> 28 <title>Arguments</title> 29 30 <variablelist> 31 <varlistentry> 32 <term><parameter>fd</parameter></term> 33 <listitem> 34 <para>&fd;</para> 35 </listitem> 36 </varlistentry> 37 <varlistentry> 38 <term><parameter>request</parameter></term> 39 <listitem> 40 <para>VIDIOC_G_FMT, VIDIOC_S_FMT, VIDIOC_TRY_FMT</para> 41 </listitem> 42 </varlistentry> 43 <varlistentry> 44 <term><parameter>argp</parameter></term> 45 <listitem> 46 <para></para> 47 </listitem> 48 </varlistentry> 49 </variablelist> 50 </refsect1> 51 52 <refsect1> 53 <title>Description</title> 54 55 <para>These ioctls are used to negotiate the format of data 56(typically image format) exchanged between driver and 57application.</para> 58 59 <para>To query the current parameters applications set the 60<structfield>type</structfield> field of a struct 61<structname>v4l2_format</structname> to the respective buffer (stream) 62type. For example video capture devices use 63<constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>. When the application 64calls the <constant>VIDIOC_G_FMT</constant> ioctl with a pointer to 65this structure the driver fills the respective member of the 66<structfield>fmt</structfield> union. In case of video capture devices 67that is the &v4l2-pix-format; <structfield>pix</structfield> member. 68When the requested buffer type is not supported drivers return an 69&EINVAL;.</para> 70 71 <para>To change the current format parameters applications 72initialize the <structfield>type</structfield> field and all 73fields of the respective <structfield>fmt</structfield> 74union member. For details see the documentation of the various devices 75types in <xref linkend="devices" />. Good practice is to query the 76current parameters first, and to 77modify only those parameters not suitable for the application. When 78the application calls the <constant>VIDIOC_S_FMT</constant> ioctl 79with a pointer to a <structname>v4l2_format</structname> structure 80the driver checks 81and adjusts the parameters against hardware abilities. Drivers 82should not return an error code unless the input is ambiguous, this is 83a mechanism to fathom device capabilities and to approach parameters 84acceptable for both the application and driver. On success the driver 85may program the hardware, allocate resources and generally prepare for 86data exchange. 87Finally the <constant>VIDIOC_S_FMT</constant> ioctl returns the 88current format parameters as <constant>VIDIOC_G_FMT</constant> does. 89Very simple, inflexible devices may even ignore all input and always 90return the default parameters. However all V4L2 devices exchanging 91data with the application must implement the 92<constant>VIDIOC_G_FMT</constant> and 93<constant>VIDIOC_S_FMT</constant> ioctl. When the requested buffer 94type is not supported drivers return an &EINVAL; on a 95<constant>VIDIOC_S_FMT</constant> attempt. When I/O is already in 96progress or the resource is not available for other reasons drivers 97return the &EBUSY;.</para> 98 99 <para>The <constant>VIDIOC_TRY_FMT</constant> ioctl is equivalent 100to <constant>VIDIOC_S_FMT</constant> with one exception: it does not 101change driver state. It can also be called at any time, never 102returning <errorcode>EBUSY</errorcode>. This function is provided to 103negotiate parameters, to learn about hardware limitations, without 104disabling I/O or possibly time consuming hardware preparations. 105Although strongly recommended drivers are not required to implement 106this ioctl.</para> 107 108 <table pgwide="1" frame="none" id="v4l2-format"> 109 <title>struct <structname>v4l2_format</structname></title> 110 <tgroup cols="4"> 111 <colspec colname="c1" /> 112 <colspec colname="c2" /> 113 <colspec colname="c3" /> 114 <colspec colname="c4" /> 115 <tbody valign="top"> 116 <row> 117 <entry>&v4l2-buf-type;</entry> 118 <entry><structfield>type</structfield></entry> 119 <entry></entry> 120 <entry>Type of the data stream, see <xref 121 linkend="v4l2-buf-type" />.</entry> 122 </row> 123 <row> 124 <entry>union</entry> 125 <entry><structfield>fmt</structfield></entry> 126 </row> 127 <row> 128 <entry></entry> 129 <entry>&v4l2-pix-format;</entry> 130 <entry><structfield>pix</structfield></entry> 131 <entry>Definition of an image format, see <xref 132 linkend="pixfmt" />, used by video capture and output 133devices.</entry> 134 </row> 135 <row> 136 <entry></entry> 137 <entry>&v4l2-window;</entry> 138 <entry><structfield>win</structfield></entry> 139 <entry>Definition of an overlaid image, see <xref 140 linkend="overlay" />, used by video overlay devices.</entry> 141 </row> 142 <row> 143 <entry></entry> 144 <entry>&v4l2-vbi-format;</entry> 145 <entry><structfield>vbi</structfield></entry> 146 <entry>Raw VBI capture or output parameters. This is 147discussed in more detail in <xref linkend="raw-vbi" />. Used by raw VBI 148capture and output devices.</entry> 149 </row> 150 <row> 151 <entry></entry> 152 <entry>&v4l2-sliced-vbi-format;</entry> 153 <entry><structfield>sliced</structfield></entry> 154 <entry>Sliced VBI capture or output parameters. See 155<xref linkend="sliced" /> for details. Used by sliced VBI 156capture and output devices.</entry> 157 </row> 158 <row> 159 <entry></entry> 160 <entry>__u8</entry> 161 <entry><structfield>raw_data</structfield>[200]</entry> 162 <entry>Place holder for future extensions and custom 163(driver defined) formats with <structfield>type</structfield> 164<constant>V4L2_BUF_TYPE_PRIVATE</constant> and higher.</entry> 165 </row> 166 </tbody> 167 </tgroup> 168 </table> 169 </refsect1> 170 171 <refsect1> 172 &return-value; 173 174 <variablelist> 175 <varlistentry> 176 <term><errorcode>EBUSY</errorcode></term> 177 <listitem> 178 <para>The data format cannot be changed at this 179time, for example because I/O is already in progress.</para> 180 </listitem> 181 </varlistentry> 182 <varlistentry> 183 <term><errorcode>EINVAL</errorcode></term> 184 <listitem> 185 <para>The &v4l2-format; <structfield>type</structfield> 186field is invalid, the requested buffer type not supported, or 187<constant>VIDIOC_TRY_FMT</constant> was called and is not 188supported with this buffer type.</para> 189 </listitem> 190 </varlistentry> 191 </variablelist> 192 </refsect1> 193</refentry> 194 195<!-- 196Local Variables: 197mode: sgml 198sgml-parent-document: "v4l2.sgml" 199indent-tabs-mode: nil 200End: 201--> 202