diff options
Diffstat (limited to 'v4l2-spec/vidioc-g-ext-ctrls.sgml')
-rw-r--r-- | v4l2-spec/vidioc-g-ext-ctrls.sgml | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/v4l2-spec/vidioc-g-ext-ctrls.sgml b/v4l2-spec/vidioc-g-ext-ctrls.sgml new file mode 100644 index 000000000..510520254 --- /dev/null +++ b/v4l2-spec/vidioc-g-ext-ctrls.sgml @@ -0,0 +1,254 @@ +<refentry id="vidioc-g-ext-ctrls"> + <refmeta> + <refentrytitle>ioctl VIDIOC_G_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, +VIDIOC_TRY_EXT_CTRLS</refentrytitle> + &manvol; + </refmeta> + + <refnamediv> + <refname>VIDIOC_G_EXT_CTRLS</refname> + <refname>VIDIOC_S_EXT_CTRLS</refname> + <refname>VIDIOC_TRY_EXT_CTRLS</refname> + <refpurpose>Get or set the value of several controls, try control +values</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_ext_controls +*<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_EXT_CTRLS, VIDIOC_S_EXT_CTRLS, +VIDIOC_TRY_EXT_CTRLS</para> + </listitem> + </varlistentry> + <varlistentry> + <term><parameter>argp</parameter></term> + <listitem> + <para></para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>Description</title> + + <para>These ioctls allow the caller to get or set multiple +controls atomically. Control IDs are grouped into control classes (see +<xref linkend="ctrl-class">) and all controls in the control array +must belong to the same control class.</para> + + <para>Applications must always fill in the +<structfield>count</structfield>, +<structfield>ctrl_class</structfield>, +<structfield>controls</structfield> and +<structfield>reserved</structfield> fields of &v4l2-ext-controls;, and +initialize the &v4l2-ext-control; array pointed to by the +<structfield>controls</structfield> fields.</para> + + <para>To get the current value of a set of controls applications +initialize the <structfield>id</structfield> field of each +&v4l2-ext-control; and call the +<constant>VIDIOC_G_EXT_CTRLS</constant> ioctl.</para> + + <para>To change the value of a set of controls applications +initialize the <structfield>id</structfield> and +<structfield>value</structfield> fields of a &v4l2-ext-control; and +call the <constant>VIDIOC_S_EXT_CTRLS</constant> ioctl. The controls +will only be set if <emphasis>all</emphasis> control values are +valid.</para> + + <para>To check if the a set of controls have correct values +applications initialize the <structfield>id</structfield> and +<structfield>value</structfield> fields of a &v4l2-ext-control; and +call the <constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctl. It is up to +the driver whether wrong values are automatically adjusted to a valid +value or if an error is returned.</para> + + <para>When the <structfield>id</structfield> or +<structfield>ctrl_class</structfield> is invalid drivers return an +&EINVAL;. When the value is out of bounds drivers can choose to take +the closest valid value or return an &ERANGE;, whatever seems more +appropriate. In the first case the new value is set in +&v4l2-ext-control;.</para> + + <para>The driver will only set/get these controls if all control +values are correct. This prevents the situation where only some of the +controls were set/get. Only low-level errors (⪚ a failed i2c +command) can still cause this situation.</para> + + <table pgwide="1" frame="none" id="v4l2-ext-control"> + <title>struct <structname>v4l2_ext_control</structname></title> + <tgroup cols="4"> + &cs-ustr; + <tbody valign="top"> + <row> + <entry>__u32</entry> + <entry><structfield>id</structfield></entry> + <entry></entry> + <entry>Identifies the control, set by the +application.</entry> + </row> + <row> + <entry>__u32</entry> + <entry><structfield>reserved2</structfield>[2]</entry> + <entry></entry> + <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> + </row> + <row> + <entry>union</entry> + <entry>(anonymous)</entry> + </row> + <row> + <entry></entry> + <entry>__s32</entry> + <entry><structfield>value</structfield></entry> + <entry>New value or current value.</entry> + </row> + <row> + <entry></entry> + <entry>__s64</entry> + <entry><structfield>value64</structfield></entry> + <entry>New value or current value.</entry> + </row> + <row> + <entry></entry> + <entry>void *</entry> + <entry><structfield>reserved</structfield></entry> + <entry>Reserved for future pointer-type controls. Currently unused.</entry> + </row> + </tbody> + </tgroup> + </table> + + <table pgwide="1" frame="none" id="v4l2-ext-controls"> + <title>struct <structname>v4l2_ext_controls</structname></title> + <tgroup cols="3"> + &cs-str; + <tbody valign="top"> + <row> + <entry>__u32</entry> + <entry><structfield>ctrl_class</structfield></entry> + <entry>The control class to which all controls belong, see +<xref linkend="ctrl-class">.</entry> + </row> + <row> + <entry>__u32</entry> + <entry><structfield>count</structfield></entry> + <entry>The number of controls in the controls array. May +also be zero.</entry> + </row> + <row> + <entry>__u32</entry> + <entry><structfield>error_idx</structfield></entry> + <entry>Set by the driver in case of an error. It is the +index of the control causing the error or equal to 'count' when the +error is not associated with a particular control. Undefined when the +ioctl returns 0 (success).</entry> + </row> + <row> + <entry>__u32</entry> + <entry><structfield>reserved</structfield>[2]</entry> + <entry>Reserved for future extensions. Drivers and +applications must set the array to zero.</entry> + </row> + <row> + <entry>&v4l2-ext-control; *</entry> + <entry><structfield>controls</structfield></entry> + <entry>Pointer to an array of +<structfield>count</structfield> v4l2_ext_control structures. Ignored +if <structfield>count</structfield> equals zero.</entry> + </row> + </tbody> + </tgroup> + </table> + + <table pgwide="1" frame="none" id="ctrl-class"> + <title>Control classes</title> + <tgroup cols="3"> + &cs-def; + <tbody valign="top"> + <row> + <entry><constant>V4L2_CTRL_CLASS_USER</constant></entry> + <entry>0x980000</entry> + <entry>The class containing user controls. These controls +are described in <xref linkend="control">. All controls that can be set +using the &VIDIOC-S-CTRL; and &VIDIOC-G-CTRL; ioctl belong to this +class.</entry> + </row> + <row> + <entry><constant>V4L2_CTRL_CLASS_MPEG</constant></entry> + <entry>0x990000</entry> + <entry>The class containing MPEG compression controls. +These controls are described in section <xref + linkend="mpeg-controls">.</entry> + </row> + </tbody> + </tgroup> + </table> + + </refsect1> + + <refsect1> + &return-value; + + <variablelist> + <varlistentry> + <term><errorcode>EINVAL</errorcode></term> + <listitem> + <para>The &v4l2-ext-control; <structfield>id</structfield> +is invalid or the &v4l2-ext-controls; +<structfield>ctrl_class</structfield> is invalid. This error code is +also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and +<constant>VIDIOC_TRY_EXT_CTRLS</constant> ioctls if two or more +control values are in conflict.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><errorcode>ERANGE</errorcode></term> + <listitem> + <para>The &v4l2-ext-control; <structfield>value</structfield> +is out of bounds.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><errorcode>EBUSY</errorcode></term> + <listitem> + <para>The control is temporarily not changeable, possibly +because another applications took over control of the device function +this control belongs to.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> +</refentry> + +<!-- +Local Variables: +mode: sgml +sgml-parent-document: "v4l2.sgml" +indent-tabs-mode: nil +End: +--> |