<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>
