| <refentry id="vidioc-g-parm"> |
| <refmeta> |
| <refentrytitle>ioctl VIDIOC_G_PARM, VIDIOC_S_PARM</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>VIDIOC_G_PARM</refname> |
| <refname>VIDIOC_S_PARM</refname> |
| <refpurpose>Get or set streaming parameters</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>v4l2_streamparm *<parameter>argp</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Arguments</title> |
| |
| <variablelist> |
| <varlistentry> |
| <term><parameter>fd</parameter></term> |
| <listitem> |
| <para>&fd;</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>request</parameter></term> |
| <listitem> |
| <para>VIDIOC_G_PARM, VIDIOC_S_PARM</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>argp</parameter></term> |
| <listitem> |
| <para></para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>The current video standard determines a nominal number of |
| frames per second. If less than this number of frames is to be |
| captured or output, applications can request frame skipping or |
| duplicating on the driver side. This is especially useful when using |
| the <function>read()</function> or <function>write()</function>, which |
| are not augmented by timestamps or sequence counters, and to avoid |
| unnecessary data copying.</para> |
| |
| <para>Further these ioctls can be used to determine the number of |
| buffers used internally by a driver in read/write mode. For |
| implications see the section discussing the &func-read; |
| function.</para> |
| |
| <para>To get and set the streaming parameters applications call |
| the <constant>VIDIOC_G_PARM</constant> and |
| <constant>VIDIOC_S_PARM</constant> ioctl, respectively. They take a |
| pointer to a struct <structname>v4l2_streamparm</structname> which |
| contains a union holding separate parameters for input and output |
| devices.</para> |
| |
| <table pgwide="1" frame="none" id="v4l2-streamparm"> |
| <title>struct <structname>v4l2_streamparm</structname></title> |
| <tgroup cols="4"> |
| &cs-ustr; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>type</structfield></entry> |
| <entry></entry> |
| <entry>The buffer (stream) type, same as &v4l2-format; |
| <structfield>type</structfield>, set by the application. See <xref |
| linkend="v4l2-buf-type" /></entry> |
| </row> |
| <row> |
| <entry>union</entry> |
| <entry><structfield>parm</structfield></entry> |
| <entry></entry> |
| <entry></entry> |
| </row> |
| <row> |
| <entry></entry> |
| <entry>&v4l2-captureparm;</entry> |
| <entry><structfield>capture</structfield></entry> |
| <entry>Parameters for capture devices, used when |
| <structfield>type</structfield> is |
| <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>.</entry> |
| </row> |
| <row> |
| <entry></entry> |
| <entry>&v4l2-outputparm;</entry> |
| <entry><structfield>output</structfield></entry> |
| <entry>Parameters for output devices, used when |
| <structfield>type</structfield> is |
| <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant>.</entry> |
| </row> |
| <row> |
| <entry></entry> |
| <entry>__u8</entry> |
| <entry><structfield>raw_data</structfield>[200]</entry> |
| <entry>A place holder for future extensions and custom |
| (driver defined) buffer types <constant>V4L2_BUF_TYPE_PRIVATE</constant> and |
| higher.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="v4l2-captureparm"> |
| <title>struct <structname>v4l2_captureparm</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>capability</structfield></entry> |
| <entry>See <xref linkend="parm-caps" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>capturemode</structfield></entry> |
| <entry>Set by drivers and applications, see <xref linkend="parm-flags" />.</entry> |
| </row> |
| <row> |
| <entry>&v4l2-fract;</entry> |
| <entry><structfield>timeperframe</structfield></entry> |
| <entry><para>This is is the desired period between |
| successive frames captured by the driver, in seconds. The |
| field is intended to skip frames on the driver side, saving I/O |
| bandwidth.</para><para>Applications store here the desired frame |
| period, drivers return the actual frame period, which must be greater |
| or equal to the nominal frame period determined by the current video |
| standard (&v4l2-standard; <structfield>frameperiod</structfield> |
| field). Changing the video standard (also implicitly by switching the |
| video input) may reset this parameter to the nominal frame period. To |
| reset manually applications can just set this field to |
| zero.</para><para>Drivers support this function only when they set the |
| <constant>V4L2_CAP_TIMEPERFRAME</constant> flag in the |
| <structfield>capability</structfield> field.</para></entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>extendedmode</structfield></entry> |
| <entry>Custom (driver specific) streaming parameters. When |
| unused, applications and drivers must set this field to zero. |
| Applications using this field should check the driver name and |
| version, see <xref linkend="querycap" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>readbuffers</structfield></entry> |
| <entry>Applications set this field to the desired number |
| of buffers used internally by the driver in &func-read; mode. Drivers |
| return the actual number of buffers. When an application requests zero |
| buffers, drivers should just return the current setting rather than |
| the minimum or an error code. For details see <xref |
| linkend="rw" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>reserved</structfield>[4]</entry> |
| <entry>Reserved for future extensions. Drivers and |
| applications must set the array to zero.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="v4l2-outputparm"> |
| <title>struct <structname>v4l2_outputparm</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>capability</structfield></entry> |
| <entry>See <xref linkend="parm-caps" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>outputmode</structfield></entry> |
| <entry>Set by drivers and applications, see <xref |
| linkend="parm-flags" />.</entry> |
| </row> |
| <row> |
| <entry>&v4l2-fract;</entry> |
| <entry><structfield>timeperframe</structfield></entry> |
| <entry>This is is the desired period between |
| successive frames output by the driver, in seconds.</entry> |
| </row> |
| <row> |
| <entry spanname="hspan"><para>The field is intended to |
| repeat frames on the driver side in &func-write; mode (in streaming |
| mode timestamps can be used to throttle the output), saving I/O |
| bandwidth.</para><para>Applications store here the desired frame |
| period, drivers return the actual frame period, which must be greater |
| or equal to the nominal frame period determined by the current video |
| standard (&v4l2-standard; <structfield>frameperiod</structfield> |
| field). Changing the video standard (also implicitly by switching the |
| video output) may reset this parameter to the nominal frame period. To |
| reset manually applications can just set this field to |
| zero.</para><para>Drivers support this function only when they set the |
| <constant>V4L2_CAP_TIMEPERFRAME</constant> flag in the |
| <structfield>capability</structfield> field.</para></entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>extendedmode</structfield></entry> |
| <entry>Custom (driver specific) streaming parameters. When |
| unused, applications and drivers must set this field to zero. |
| Applications using this field should check the driver name and |
| version, see <xref linkend="querycap" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>writebuffers</structfield></entry> |
| <entry>Applications set this field to the desired number |
| of buffers used internally by the driver in |
| <function>write()</function> mode. Drivers return the actual number of |
| buffers. When an application requests zero buffers, drivers should |
| just return the current setting rather than the minimum or an error |
| code. For details see <xref linkend="rw" />.</entry> |
| </row> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>reserved</structfield>[4]</entry> |
| <entry>Reserved for future extensions. Drivers and |
| applications must set the array to zero.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="parm-caps"> |
| <title>Streaming Parameters Capabilites</title> |
| <tgroup cols="3"> |
| &cs-def; |
| <tbody valign="top"> |
| <row> |
| <entry><constant>V4L2_CAP_TIMEPERFRAME</constant></entry> |
| <entry>0x1000</entry> |
| <entry>The frame skipping/repeating controlled by the |
| <structfield>timeperframe</structfield> field is supported.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| <table pgwide="1" frame="none" id="parm-flags"> |
| <title>Capture Parameters Flags</title> |
| <tgroup cols="3"> |
| &cs-def; |
| <tbody valign="top"> |
| <row> |
| <entry><constant>V4L2_MODE_HIGHQUALITY</constant></entry> |
| <entry>0x0001</entry> |
| <entry><para>High quality imaging mode. High quality mode |
| is intended for still imaging applications. The idea is to get the |
| best possible image quality that the hardware can deliver. It is not |
| defined how the driver writer may achieve that; it will depend on the |
| hardware and the ingenuity of the driver writer. High quality mode is |
| a different mode from the the regular motion video capture modes. In |
| high quality mode:<itemizedlist> |
| <listitem> |
| <para>The driver may be able to capture higher |
| resolutions than for motion capture.</para> |
| </listitem> |
| <listitem> |
| <para>The driver may support fewer pixel formats |
| than motion capture (eg; true color).</para> |
| </listitem> |
| <listitem> |
| <para>The driver may capture and arithmetically |
| combine multiple successive fields or frames to remove color edge |
| artifacts and reduce the noise in the video data. |
| </para> |
| </listitem> |
| <listitem> |
| <para>The driver may capture images in slices like |
| a scanner in order to handle larger format images than would otherwise |
| be possible. </para> |
| </listitem> |
| <listitem> |
| <para>An image capture operation may be |
| significantly slower than motion capture. </para> |
| </listitem> |
| <listitem> |
| <para>Moving objects in the image might have |
| excessive motion blur. </para> |
| </listitem> |
| <listitem> |
| <para>Capture might only work through the |
| <function>read()</function> call.</para> |
| </listitem> |
| </itemizedlist></para></entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| |
| </refsect1> |
| |
| <refsect1> |
| &return-value; |
| </refsect1> |
| </refentry> |