On Tuesday 03 February 2009 07:30:14 Hardik Shah wrote:
> 1.  Added documentation for VIDIOC_COLOR_S_SPACE_CONV and
> VIDIOC_G_COLOR_SPACE_CONV
> 2.  Added documentation for new CID V4L2_CID_ROTATION and
> V4L2_CID_BG_COLOR

See comments below.

> Signed-off-by: Brijesh Jadav <brijes...@ti.com>
> Signed-off-by: Hari Nagalla <hnaga...@ti.com>
> Signed-off-by: Hardik Shah <hardik.s...@ti.com>
> Signed-off-by: Vaibhav Hiremath <hvaib...@ti.com>
> ---
>  Makefile                       |    4 +
>  controls.sgml                  |   12 +++-
>  v4l2.sgml                      |    1 +
>  vidioc-g-color-space-conv.sgml |  182
> ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 198
> insertions(+), 1 deletions(-)
>  create mode 100644 vidioc-g-color-space-conv.sgml
>
> diff --git a/Makefile b/Makefile
> index 9a13c91..b76b4a7 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -67,6 +67,7 @@ SGMLS = \
>       vidioc-g-audio.sgml \
>       vidioc-g-audioout.sgml \
>       vidioc-dbg-g-chip-ident.sgml \
> +     vidioc-g-color-space-conv.sgml \
>       vidioc-g-crop.sgml \
>       vidioc-g-ctrl.sgml \
>       vidioc-g-enc-index.sgml \
> @@ -156,6 +157,7 @@ IOCTLS = \
>       VIDIOC_ENUM_FRAMESIZES \
>       VIDIOC_G_AUDIO \
>       VIDIOC_G_AUDOUT \
> +     VIDIOC_G_COLOR_SPACE_CONV \
>       VIDIOC_G_CROP \
>       VIDIOC_G_CTRL \
>       VIDIOC_G_ENC_INDEX \
> @@ -186,6 +188,7 @@ IOCTLS = \
>       VIDIOC_STREAMON \
>       VIDIOC_S_AUDIO \
>       VIDIOC_S_AUDOUT \
> +     VIDIOC_S_COLOR_SPACE_CONV \
>       VIDIOC_S_CROP \
>       VIDIOC_S_CTRL \
>       VIDIOC_S_EXT_CTRLS \
> @@ -249,6 +252,7 @@ STRUCTS = \
>       v4l2_capability \
>       v4l2_captureparm \
>       v4l2_clip \
> +     v4l2_color_space_conv \
>       v4l2_control \
>       v4l2_crop \
>       v4l2_cropcap \
> diff --git a/controls.sgml b/controls.sgml
> index 0df57dc..c9ef5e8 100644
> --- a/controls.sgml
> +++ b/controls.sgml
> @@ -272,10 +272,20 @@ minimum value disables backlight
> compensation.</entry> <entry>Enable the color killer (&ie; force a black
> &amp; white image in case of a weak video signal).</entry> </row>
>         <row>
> +         <entry><constant>V4L2_CID_ROTATION</constant></entry>
> +         <entry>integer</entry>
> +         <entry>Rotates the image by specified angle.</entry>

Please specify the units. How does this affect other ioctls like 
VIDIOC_S_FMT when it comes to width/height settings? Depending on how this 
works the VIDIOC_S_FMT documentation might have to refer back to this 
control as well.

> +       </row>
> +       <row>
> +         <entry><constant>V4L2_CID_BG_COLOR</constant></entry>
> +         <entry>integer</entry>
> +         <entry>Sets the background color on the current output
> device</entry> +        </row>

How is the color specified? RGB? YUV? See the V4L2_CID_MPEG_VIDEO_MUTE_YUV 
control description on how to specify the color format exactly.

> +       <row>
>           <entry><constant>V4L2_CID_LASTP1</constant></entry>
>           <entry></entry>
>           <entry>End of the predefined control IDs (currently
> -<constant>V4L2_CID_COLOR_KILLER</constant> + 1).</entry>
> +<constant>V4L2_CID_BG_COLOR</constant> + 1).</entry>
>         </row>
>         <row>
>           <entry><constant>V4L2_CID_PRIVATE_BASE</constant></entry>
> diff --git a/v4l2.sgml b/v4l2.sgml
> index 9f43b6d..f9f0986 100644
> --- a/v4l2.sgml
> +++ b/v4l2.sgml
> @@ -435,6 +435,7 @@ available here: <ulink
> url="http://linuxtv.org/downloads/video4linux/API/V4L2_AP &sub-querystd;
>      &sub-reqbufs;
>      &sub-s-hw-freq-seek;
> +    &sub-g-color-space-conv;
>      &sub-streamon;
>      <!-- End of ioctls. -->
>      &sub-mmap;
> diff --git a/vidioc-g-color-space-conv.sgml
> b/vidioc-g-color-space-conv.sgml new file mode 100644
> index 0000000..a24ae4c
> --- /dev/null
> +++ b/vidioc-g-color-space-conv.sgml
> @@ -0,0 +1,182 @@
> +<refentry id="vidioc-g-color-space-conv">
> +  <refmeta>
> +    <refentrytitle>ioctl VIDIOC_S_COLOR_SPACE_CONV,
> VIDIOC_G_COLOR_SPACE_CONV</refentrytitle> +    &manvol;
> +  </refmeta>
> +
> +  <refnamediv>
> +    <refname>VIDIOC_S_COLOR_SPACE_CONV</refname>
> +    <refname>VIDIOC_G_COLOR_SPACE_CONV</refname>
> +    <refpurpose>Get or Set the color space conversion matrix
> </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_color_space_conv
> +*<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_COLOR_SPACE_CONV, VIDIOC_S_COLOR_SPACE_CONV</para>
> +     </listitem>
> +      </varlistentry>
> +      <varlistentry>
> +     <term><parameter>argp</parameter></term>
> +     <listitem>
> +       <para></para>
> +     </listitem>
> +      </varlistentry>
> +    </variablelist>
> +  </refsect1>
> +
> +  <refsect1>
> +    <title>Description</title>
> +
> +    <para>This ioctl is used to set the color space conversion matrix.
> +Few Video hardware has a programmable color space conversion matrix
> which +converts the data from one color space to other color space
> +typically from YUV or UYVY to RGB and vice versa.

'UYVY' is not a colorspace, it's a pixelformat. You probably want to say 
something like: 'SMPTE170M or sRGB'.

> Normally hardware has 
> +default value for the conversion matrix but application may need to tune
> that. +    </para>
> +     <para>Typical color conversion matrix looks like</para>
> +
> +     <formalpara>
> +         <title>Typical color space conversion matrix equation.</title>
> +             <para>
> +             <informaltable frame="none">
> +             <tgroup cols="15" align="center">
> +               <colspec align="left" colwidth="1*">
> +               <tbody valign="top">
> +                 <row>
> +                   <entry>|</entry>
> +                   <entry>O<subscript>0</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry></entry>
> +                       <entry></entry>
> +                       <entry></entry>
> +                   <entry>|</entry>
> +                       <entry>C<subscript>0,0</subscript></entry>
> +                   <entry>C<subscript>0,1</subscript></entry>
> +                   <entry>C<subscript>0,2</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry></entry>
> +                       <entry>|</entry>
> +                   <entry>Of<subscript>0</subscript></entry>
> +                   <entry>|</entry>
> +                 </row>
> +                 <row>
> +                   <entry>|</entry>
> +                   <entry>O<subscript>1</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry></entry>
> +                       <entry>=</entry>
> +                       <entry>K</entry>
> +                   <entry>|</entry>
> +                       <entry>C<subscript>1,0</subscript></entry>
> +                   <entry>C<subscript>1,1</subscript></entry>
> +                   <entry>C<subscript>1,2</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry>*</entry>
> +                       <entry>|</entry>
> +                   <entry>Of<subscript>1</subscript></entry>
> +                   <entry>|</entry>
> +                 </row>
> +                      <row>
> +                   <entry>|</entry>
> +                   <entry>O<subscript>2</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry></entry>
> +                       <entry></entry>
> +                       <entry></entry>
> +                   <entry>|</entry>
> +                       <entry>C<subscript>2,0</subscript></entry>
> +                   <entry>C<subscript>2,1</subscript></entry>
> +                   <entry>C<subscript>2,2</subscript></entry>
> +                   <entry>|</entry>
> +                   <entry></entry>
> +                       <entry>|</entry>
> +                   <entry>Of<subscript>2</subscript></entry>
> +                   <entry>|</entry>
> +                 </row>
> +               </tbody>
> +             </tgroup>
> +             </informaltable>
> +             </para>
> +       </formalpara>
> +
> +     <para>Where Ci,j are the coefficients, K is the constant factor and
> +Ofi is the  offsets.  All the hardware may not allow modifying
> +all of these parameters.</para>
> +
> +     <para>To set values for the color conversion matrix, applications call
> +<constant>VIDIOC_S_COLOR_SPACE_CONV</constant> with the pointer to a
> +<structname>v4l2_color_space_conv</structname> structure.  Driver
> +checks and updates the parameters in the hardware. To get the values
> +applications call <constant>VIDIOC_G_COLOR_SPACE_CONV</constant> with a
> pointer +to <structname>v4l2_color_space_conv</structname> and driver
> will fill the +structure with appropriate values.</para>

What is the precision of the coefficients? (e.g. 8, 16, 32 bits?)

How do you know if not all parameters can be modified? Is this a problem at 
all or can we assume that using this ioctl means you know what the hardware 
is anyway?

How does this relate to the colorspace field in v4l2_pix_format and 
VIDIOC_S_FMT?

> +
> +    <table pgwide="1" frame="none" id="v4l2-color-space-conv">
> +      <title>struct
> <structname>v4l2_color_space_conv</structname></title> +      <tgroup
> cols="3">
> +     &cs-str;
> +     <tbody valign="top">
> +       <row>
> +         <entry>__s32</entry>
> +         <entry><structfield>coefficients</structfield></entry>
> +         <entry>Conversion Matrix coefficeints. It is a array of
> 3X3.</entry> +          </row>
> +       <row>
> +         <entry>__s32</entry>
> +         <entry><structfield>const_factor</structfield></entry>
> +         <entry>Constant to be multiplied with the conversion
> matrix.</entry> +       </row>
> +       <row>
> +         <entry>__s32</entry>
> +         <entry><structfield>offsets</structfield></entry>
> +         <entry>Offset for the each entry in color conversion
> matrix.</entry> +       </row>
> +     </tbody>
> +      </tgroup>
> +    </table>
> +  </refsect1>
> +
> +  <refsect1>
> +    &return-value;
> +
> +    <variablelist>
> +      <varlistentry>
> +     <term><errorcode>EINVAL</errorcode></term>
> +     <listitem>
> +       <para>The hardware doesn't supports color space conversion.</para>
> +     </listitem>
> +      </varlistentry>
> +    </variablelist>
> +  </refsect1>
> +</refentry>
> +
> +<!--
> +Local Variables:
> +mode: sgml
> +sgml-parent-document: "v4l2.sgml"
> +indent-tabs-mode: nil
> +End:
> +-->
> --
> 1.5.6

Regards,

        Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to