| <refentry id="vidioc-g-crop"> |
| <refmeta> |
| <refentrytitle>ioctl VIDIOC_G_CROP, VIDIOC_S_CROP</refentrytitle> |
| &manvol; |
| </refmeta> |
| |
| <refnamediv> |
| <refname>VIDIOC_G_CROP</refname> |
| <refname>VIDIOC_S_CROP</refname> |
| <refpurpose>Get or set the current cropping rectangle</refpurpose> |
| </refnamediv> |
| |
| <refsynopsisdiv> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>struct v4l2_crop *<parameter>argp</parameter></paramdef> |
| </funcprototype> |
| </funcsynopsis> |
| <funcsynopsis> |
| <funcprototype> |
| <funcdef>int <function>ioctl</function></funcdef> |
| <paramdef>int <parameter>fd</parameter></paramdef> |
| <paramdef>int <parameter>request</parameter></paramdef> |
| <paramdef>const struct v4l2_crop *<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_CROP, VIDIOC_S_CROP</para> |
| </listitem> |
| </varlistentry> |
| <varlistentry> |
| <term><parameter>argp</parameter></term> |
| <listitem> |
| <para></para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para>To query the cropping rectangle size and position |
| applications set the <structfield>type</structfield> field of a |
| <structname>v4l2_crop</structname> structure to the respective buffer |
| (stream) type and call the <constant>VIDIOC_G_CROP</constant> ioctl |
| with a pointer to this structure. The driver fills the rest of the |
| structure or returns the &EINVAL; if cropping is not supported.</para> |
| |
| <para>To change the cropping rectangle applications initialize the |
| <structfield>type</structfield> and &v4l2-rect; substructure named |
| <structfield>c</structfield> of a v4l2_crop structure and call the |
| <constant>VIDIOC_S_CROP</constant> ioctl with a pointer to this |
| structure.</para> |
| |
| <para>Do not use the multiplanar buffer types. Use <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant> |
| instead of <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE</constant> |
| and use <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> instead of |
| <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE</constant>.</para> |
| |
| <para>The driver first adjusts the requested dimensions against |
| hardware limits, &ie; the bounds given by the capture/output window, |
| and it rounds to the closest possible values of horizontal and |
| vertical offset, width and height. In particular the driver must round |
| the vertical offset of the cropping rectangle to frame lines modulo |
| two, such that the field order cannot be confused.</para> |
| |
| <para>Second the driver adjusts the image size (the opposite |
| rectangle of the scaling process, source or target depending on the |
| data direction) to the closest size possible while maintaining the |
| current horizontal and vertical scaling factor.</para> |
| |
| <para>Finally the driver programs the hardware with the actual |
| cropping and image parameters. <constant>VIDIOC_S_CROP</constant> is a |
| write-only ioctl, it does not return the actual parameters. To query |
| them applications must call <constant>VIDIOC_G_CROP</constant> and |
| &VIDIOC-G-FMT;. When the parameters are unsuitable the application may |
| modify the cropping or image parameters and repeat the cycle until |
| satisfactory parameters have been negotiated.</para> |
| |
| <para>When cropping is not supported then no parameters are |
| changed and <constant>VIDIOC_S_CROP</constant> returns the |
| &EINVAL;.</para> |
| |
| <table pgwide="1" frame="none" id="v4l2-crop"> |
| <title>struct <structname>v4l2_crop</structname></title> |
| <tgroup cols="3"> |
| &cs-str; |
| <tbody valign="top"> |
| <row> |
| <entry>__u32</entry> |
| <entry><structfield>type</structfield></entry> |
| <entry>Type of the data stream, set by the application. |
| Only these types are valid here: <constant>V4L2_BUF_TYPE_VIDEO_CAPTURE</constant>, |
| <constant>V4L2_BUF_TYPE_VIDEO_OUTPUT</constant> and |
| <constant>V4L2_BUF_TYPE_VIDEO_OVERLAY</constant>. See <xref linkend="v4l2-buf-type" />.</entry> |
| </row> |
| <row> |
| <entry>&v4l2-rect;</entry> |
| <entry><structfield>c</structfield></entry> |
| <entry>Cropping rectangle. The same co-ordinate system as |
| for &v4l2-cropcap; <structfield>bounds</structfield> is used.</entry> |
| </row> |
| </tbody> |
| </tgroup> |
| </table> |
| </refsect1> |
| |
| <refsect1> |
| &return-value; |
| </refsect1> |
| </refentry> |