123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332 |
- <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
- unneccessary 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>&v4l2-buf-type;</entry>
- <entry><structfield>type</structfield></entry>
- <entry></entry>
- <entry>The buffer (stream) type, same as &v4l2-format;
- <structfield>type</structfield>, set by the application.</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;
- <variablelist>
- <varlistentry>
- <term><errorcode>EINVAL</errorcode></term>
- <listitem>
- <para>This ioctl is not supported.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
- </refentry>
- <!--
- Local Variables:
- mode: sgml
- sgml-parent-document: "v4l2.sgml"
- indent-tabs-mode: nil
- End:
- -->
|