Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c643ee13 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

[media] v4l: Image processing control class



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: default avatarSakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 8c9d236e
Loading
Loading
Loading
Loading
+82 −0
Original line number Diff line number Diff line
@@ -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>
+6 −0
Original line number Diff line number Diff line
@@ -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>
+13 −1
Original line number Diff line number Diff line
@@ -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:
+8 −0
Original line number Diff line number Diff line
@@ -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
 */