[media] v4l: Image processing control class
authorSakari Ailus <sakari.ailus@iki.fi>
Thu, 2 Feb 2012 23:17:54 +0000 (20:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 14 May 2012 11:37:44 +0000 (08:37 -0300)
Add control class for image processing controls. The control class deals
with controls processing image, for example digital gain or noise filtering,
which can be present in any part of the pipeline.

Signed-off-by: Sakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Documentation/DocBook/media/v4l/controls.xml
Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
drivers/media/video/v4l2-ctrls.c
include/linux/videodev2.h

index 43cd4958c9e821ef91bafdec76a96bca719be122..662127447aa6321227ffeec0b1f76757e09a2257 100644 (file)
@@ -3685,4 +3685,86 @@ interface and may change in the future.</para>
 
     </section>
 
+    <section id="image-process-controls">
+      <title>Image Process Control Reference</title>
+
+      <note>
+       <title>Experimental</title>
+
+       <para>This is an <link
+       linkend="experimental">experimental</link> interface and may
+       change in the future.</para>
+      </note>
+
+      <para>
+       The Image Source control class is intended for low-level control of
+       image processing functions. Unlike
+       <constant>V4L2_CID_IMAGE_SOURCE_CLASS</constant>, the controls in
+       this class affect processing the image, and do not control capturing
+       of it.
+      </para>
+
+      <table pgwide="1" frame="none" id="image-process-control-id">
+      <title>Image Source Control IDs</title>
+
+      <tgroup cols="4">
+       <colspec colname="c1" colwidth="1*" />
+       <colspec colname="c2" colwidth="6*" />
+       <colspec colname="c3" colwidth="2*" />
+       <colspec colname="c4" colwidth="6*" />
+       <spanspec namest="c1" nameend="c2" spanname="id" />
+       <spanspec namest="c2" nameend="c4" spanname="descr" />
+       <thead>
+         <row>
+           <entry spanname="id" align="left">ID</entry>
+           <entry align="left">Type</entry>
+         </row><row rowsep="1"><entry spanname="descr" align="left">Description</entry>
+         </row>
+       </thead>
+       <tbody valign="top">
+         <row><entry></entry></row>
+         <row>
+           <entry spanname="id"><constant>V4L2_CID_IMAGE_PROC_CLASS</constant></entry>
+           <entry>class</entry>
+         </row>
+         <row>
+           <entry spanname="descr">The IMAGE_PROC class descriptor.</entry>
+         </row>
+         <row>
+           <entry spanname="id"><constant>V4L2_CID_LINK_FREQ</constant></entry>
+           <entry>integer menu</entry>
+         </row>
+         <row>
+           <entry spanname="descr">Data bus frequency. Together with the
+           media bus pixel code, bus type (clock cycles per sample), the
+           data bus frequency defines the pixel rate
+           (<constant>V4L2_CID_PIXEL_RATE</constant>) in the
+           pixel array (or possibly elsewhere, if the device is not an
+           image sensor). The frame rate can be calculated from the pixel
+           clock, image width and height and horizontal and vertical
+           blanking. While the pixel rate control may be defined elsewhere
+           than in the subdev containing the pixel array, the frame rate
+           cannot be obtained from that information. This is because only
+           on the pixel array it can be assumed that the vertical and
+           horizontal blanking information is exact: no other blanking is
+           allowed in the pixel array. The selection of frame rate is
+           performed by selecting the desired horizontal and vertical
+           blanking. The unit of this control is Hz. </entry>
+         </row>
+         <row>
+           <entry spanname="id"><constant>V4L2_CID_PIXEL_RATE</constant></entry>
+           <entry>64-bit integer</entry>
+         </row>
+         <row>
+           <entry spanname="descr">Pixel rate in the source pads of
+           the subdev. This control is read-only and its unit is
+           pixels / second.
+           </entry>
+         </row>
+         <row><entry></entry></row>
+       </tbody>
+      </tgroup>
+      </table>
+
+    </section>
 </section>
index f2d2ec3f0e31d72b784eb181717344a5094d7bd5..0a4b90fcf2dab77b36ed1e52749040ddcc97a113 100644 (file)
@@ -278,6 +278,12 @@ These controls are described in <xref
            source controls. These controls are described in <xref
            linkend="image-source-controls" />.</entry>
          </row>
+         <row>
+           <entry><constant>V4L2_CTRL_CLASS_IMAGE_PROC</constant></entry>
+           <entry>0x9f0000</entry> <entry>The class containing image
+           processing controls. These controls are described in <xref
+           linkend="image-process-controls" />.</entry>
+         </row>
        </tbody>
       </tgroup>
     </table>
index 7a2f855d4e210e5f718f90e0f27c18c28ba2cc8d..edb2a6a066ca3ec6751d049d30c0abf6f13ad9ec 100644 (file)
@@ -650,6 +650,11 @@ const char *v4l2_ctrl_get_name(u32 id)
        case V4L2_CID_HBLANK:                   return "Horizontal Blanking";
        case V4L2_CID_ANALOGUE_GAIN:            return "Analogue Gain";
 
+       /* Image processing controls */
+       case V4L2_CID_IMAGE_PROC_CLASS:         return "Image Processing Controls";
+       case V4L2_CID_LINK_FREQ:                return "Link Frequency";
+       case V4L2_CID_PIXEL_RATE:               return "Pixel Rate";
+
        default:
                return NULL;
        }
@@ -741,6 +746,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
        case V4L2_CID_JPEG_CHROMA_SUBSAMPLING:
                *type = V4L2_CTRL_TYPE_MENU;
                break;
+       case V4L2_CID_LINK_FREQ:
+               *type = V4L2_CTRL_TYPE_INTEGER_MENU;
+               break;
        case V4L2_CID_RDS_TX_PS_NAME:
        case V4L2_CID_RDS_TX_RADIO_TEXT:
                *type = V4L2_CTRL_TYPE_STRING;
@@ -752,6 +760,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
        case V4L2_CID_FLASH_CLASS:
        case V4L2_CID_JPEG_CLASS:
        case V4L2_CID_IMAGE_SOURCE_CLASS:
+       case V4L2_CID_IMAGE_PROC_CLASS:
                *type = V4L2_CTRL_TYPE_CTRL_CLASS;
                /* You can neither read not write these */
                *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
@@ -775,8 +784,11 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
                break;
        case V4L2_CID_MPEG_VIDEO_DEC_FRAME:
        case V4L2_CID_MPEG_VIDEO_DEC_PTS:
+               *flags |= V4L2_CTRL_FLAG_VOLATILE;
+               /* Fall through */
+       case V4L2_CID_PIXEL_RATE:
                *type = V4L2_CTRL_TYPE_INTEGER64;
-               *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_VOLATILE;
+               *flags |= V4L2_CTRL_FLAG_READ_ONLY;
                *min = *max = *step = *def = 0;
                break;
        default:
index 3cd13b2faab517f030d51de0379bf86f2148a500..0ae6eb2fb1f38f8a86b73f17a3880c2fee08ca68 100644 (file)
@@ -1140,6 +1140,7 @@ struct v4l2_ext_controls {
 #define V4L2_CTRL_CLASS_FLASH 0x009c0000       /* Camera flash controls */
 #define V4L2_CTRL_CLASS_JPEG 0x009d0000                /* JPEG-compression controls */
 #define V4L2_CTRL_CLASS_IMAGE_SOURCE 0x009e0000        /* Image source controls */
+#define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000  /* Image processing controls */
 
 #define V4L2_CTRL_ID_MASK                (0x0fffffff)
 #define V4L2_CTRL_ID2CLASS(id)    ((id) & 0x0fff0000UL)
@@ -1797,6 +1798,13 @@ enum v4l2_jpeg_chroma_subsampling {
 #define V4L2_CID_HBLANK                                (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 2)
 #define V4L2_CID_ANALOGUE_GAIN                 (V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 3)
 
+/* Image processing controls */
+#define V4L2_CID_IMAGE_PROC_CLASS_BASE         (V4L2_CTRL_CLASS_IMAGE_PROC | 0x900)
+#define V4L2_CID_IMAGE_PROC_CLASS              (V4L2_CTRL_CLASS_IMAGE_PROC | 1)
+
+#define V4L2_CID_LINK_FREQ                     (V4L2_CID_IMAGE_PROC_CLASS_BASE + 1)
+#define V4L2_CID_PIXEL_RATE                    (V4L2_CID_IMAGE_PROC_CLASS_BASE + 2)
+
 /*
  *     T U N I N G
  */