linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/6] Add HSV format
@ 2016-07-15 15:16 Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 1/6] [media] videodev2.h Add HSV formats Ricardo Ribalda Delgado
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

HSV formats are extremely useful for image segmentation. This set of
patches makes v4l2 aware of this kind of formats.

Vivid changes have been divided in three to ease the reviewing process.

We are working on patches for Gstreamer and OpenCV that will make use
of these formats.

Thanks!

Ricardo Ribalda Delgado (6):
  [media] videodev2.h Add HSV formats
  [media] Documentation: Add HSV format
  [media] Documentation: Add Ricardo Ribalda as author
  [media] vivid: code refactor for color representation
  [media] vivid: Add support for HSV formats
  [media] vivid: Rename variable

 .../DocBook/media/v4l/pixfmt-packed-hsv.xml        | 195 ++++++++++++
 Documentation/DocBook/media/v4l/pixfmt.xml         |  13 +
 Documentation/DocBook/media/v4l/v4l2.xml           |  19 ++
 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c      | 341 ++++++++++++++-------
 drivers/media/platform/vivid/vivid-core.h          |   2 +-
 drivers/media/platform/vivid/vivid-vid-common.c    |  66 ++--
 drivers/media/v4l2-core/v4l2-ioctl.c               |   2 +
 include/media/v4l2-tpg.h                           |   8 +-
 include/uapi/linux/videodev2.h                     |   4 +
 9 files changed, 503 insertions(+), 147 deletions(-)
 create mode 100644 Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml

-- 
2.8.1

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH 1/6] [media] videodev2.h Add HSV formats
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 2/6] [media] Documentation: Add HSV format Ricardo Ribalda Delgado
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

These formats store the color information of the image
in a geometrical representation. The colors are mapped into a
cylinder, where the angle is the HUE, the height is the VALUE
and the distance to the center is the SATURATION. This is a very
useful format for image segmentation algorithms.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 drivers/media/v4l2-core/v4l2-ioctl.c | 2 ++
 include/uapi/linux/videodev2.h       | 4 ++++
 2 files changed, 6 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index f899bf1c5fc0..54670cd59212 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1238,6 +1238,8 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_TM6000:	descr = "A/V + VBI Mux Packet"; break;
 	case V4L2_PIX_FMT_CIT_YYVYUY:	descr = "GSPCA CIT YYVYUY"; break;
 	case V4L2_PIX_FMT_KONICA420:	descr = "GSPCA KONICA420"; break;
+	case V4L2_PIX_FMT_HSV24:	descr = "24-bit HSV 8-8-8"; break;
+	case V4L2_PIX_FMT_HSV32:	descr = "32-bit XHSV 8-8-8-8"; break;
 	case V4L2_SDR_FMT_CU8:		descr = "Complex U8"; break;
 	case V4L2_SDR_FMT_CU16LE:	descr = "Complex U16LE"; break;
 	case V4L2_SDR_FMT_CS8:		descr = "Complex S8"; break;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 724f43e69d03..c7fb760386cf 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -580,6 +580,10 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_SRGGB12 v4l2_fourcc('R', 'G', '1', '2') /* 12  RGRG.. GBGB.. */
 #define V4L2_PIX_FMT_SBGGR16 v4l2_fourcc('B', 'Y', 'R', '2') /* 16  BGBG.. GRGR.. */
 
+/* HSV formats */
+#define V4L2_PIX_FMT_HSV24 v4l2_fourcc('H', 'S', 'V', '3')
+#define V4L2_PIX_FMT_HSV32 v4l2_fourcc('H', 'S', 'V', '4')
+
 /* compressed formats */
 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G') /* Motion-JPEG   */
 #define V4L2_PIX_FMT_JPEG     v4l2_fourcc('J', 'P', 'E', 'G') /* JFIF JPEG     */
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 2/6] [media] Documentation: Add HSV format
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 1/6] [media] videodev2.h Add HSV formats Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  2016-07-15 15:28   ` Mauro Carvalho Chehab
  2016-07-15 15:16 ` [PATCH 3/6] [media] Documentation: Add Ricardo Ribalda as author Ricardo Ribalda Delgado
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

Describe the HSV formats.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 .../DocBook/media/v4l/pixfmt-packed-hsv.xml        | 195 +++++++++++++++++++++
 Documentation/DocBook/media/v4l/pixfmt.xml         |  13 ++
 Documentation/DocBook/media/v4l/v4l2.xml           |   8 +
 3 files changed, 216 insertions(+)
 create mode 100644 Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml

diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml
new file mode 100644
index 000000000000..3b41d567e32b
--- /dev/null
+++ b/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml
@@ -0,0 +1,195 @@
+<refentry id="packed-hsv">
+  <refmeta>
+    <refentrytitle>Packed HSV formats</refentrytitle>
+    &manvol;
+  </refmeta>
+  <refnamediv>
+    <refname>Packed HSV formats</refname>
+    <refpurpose>Packed HSV formats</refpurpose>
+  </refnamediv>
+  <refsect1>
+    <title>Description</title>
+
+    <para>The HUE (h) is meassured in degrees, one LSB represents two
+degrees. The SATURATION (s) and the VALUE (v) are meassured in percentage
+of the cylinder: 0 being the smallest value and 255 the maximum.</para>
+    <para>The values are packed in 24 or 32 bit formats. </para>
+
+    <table pgwide="1" frame="none">
+      <title>Packed YUV Image Formats</title>
+      <tgroup cols="37" align="center">
+	<colspec colname="id" align="left" />
+	<colspec colname="fourcc" />
+	<colspec colname="bit" />
+
+	<colspec colnum="4" colname="b07" align="center" />
+	<colspec colnum="5" colname="b06" align="center" />
+	<colspec colnum="6" colname="b05" align="center" />
+	<colspec colnum="7" colname="b04" align="center" />
+	<colspec colnum="8" colname="b03" align="center" />
+	<colspec colnum="9" colname="b02" align="center" />
+	<colspec colnum="10" colname="b01" align="center" />
+	<colspec colnum="11" colname="b00" align="center" />
+
+	<colspec colnum="13" colname="b17" align="center" />
+	<colspec colnum="14" colname="b16" align="center" />
+	<colspec colnum="15" colname="b15" align="center" />
+	<colspec colnum="16" colname="b14" align="center" />
+	<colspec colnum="17" colname="b13" align="center" />
+	<colspec colnum="18" colname="b12" align="center" />
+	<colspec colnum="19" colname="b11" align="center" />
+	<colspec colnum="20" colname="b10" align="center" />
+
+	<colspec colnum="22" colname="b27" align="center" />
+	<colspec colnum="23" colname="b26" align="center" />
+	<colspec colnum="24" colname="b25" align="center" />
+	<colspec colnum="25" colname="b24" align="center" />
+	<colspec colnum="26" colname="b23" align="center" />
+	<colspec colnum="27" colname="b22" align="center" />
+	<colspec colnum="28" colname="b21" align="center" />
+	<colspec colnum="29" colname="b20" align="center" />
+
+	<colspec colnum="31" colname="b37" align="center" />
+	<colspec colnum="32" colname="b36" align="center" />
+	<colspec colnum="33" colname="b35" align="center" />
+	<colspec colnum="34" colname="b34" align="center" />
+	<colspec colnum="35" colname="b33" align="center" />
+	<colspec colnum="36" colname="b32" align="center" />
+	<colspec colnum="37" colname="b31" align="center" />
+	<colspec colnum="38" colname="b30" align="center" />
+
+	<spanspec namest="b07" nameend="b00" spanname="b0" />
+	<spanspec namest="b17" nameend="b10" spanname="b1" />
+	<spanspec namest="b27" nameend="b20" spanname="b2" />
+	<spanspec namest="b37" nameend="b30" spanname="b3" />
+	<thead>
+	  <row>
+	    <entry>Identifier</entry>
+	    <entry>Code</entry>
+	    <entry>&nbsp;</entry>
+	    <entry spanname="b0">Byte&nbsp;0 in memory</entry>
+	    <entry spanname="b1">Byte&nbsp;1</entry>
+	    <entry spanname="b2">Byte&nbsp;2</entry>
+	    <entry spanname="b3">Byte&nbsp;3</entry>
+	  </row>
+	  <row>
+	    <entry>&nbsp;</entry>
+	    <entry>&nbsp;</entry>
+	    <entry>Bit</entry>
+	    <entry>7</entry>
+	    <entry>6</entry>
+	    <entry>5</entry>
+	    <entry>4</entry>
+	    <entry>3</entry>
+	    <entry>2</entry>
+	    <entry>1</entry>
+	    <entry>0</entry>
+	    <entry>&nbsp;</entry>
+	    <entry>7</entry>
+	    <entry>6</entry>
+	    <entry>5</entry>
+	    <entry>4</entry>
+	    <entry>3</entry>
+	    <entry>2</entry>
+	    <entry>1</entry>
+	    <entry>0</entry>
+	    <entry>&nbsp;</entry>
+	    <entry>7</entry>
+	    <entry>6</entry>
+	    <entry>5</entry>
+	    <entry>4</entry>
+	    <entry>3</entry>
+	    <entry>2</entry>
+	    <entry>1</entry>
+	    <entry>0</entry>
+	    <entry>&nbsp;</entry>
+	    <entry>7</entry>
+	    <entry>6</entry>
+	    <entry>5</entry>
+	    <entry>4</entry>
+	    <entry>3</entry>
+	    <entry>2</entry>
+	    <entry>1</entry>
+	    <entry>0</entry>
+	  </row>
+	</thead>
+	<tbody valign="top">
+	  <row id="V4L2-PIX-FMT-HSV32">
+	    <entry><constant>V4L2_PIX_FMT_HSV32</constant></entry>
+	    <entry>'HSV4'</entry>
+	    <entry></entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry>-</entry>
+	    <entry></entry>
+	    <entry>h<subscript>7</subscript></entry>
+	    <entry>h<subscript>6</subscript></entry>
+	    <entry>h<subscript>5</subscript></entry>
+	    <entry>h<subscript>4</subscript></entry>
+	    <entry>h<subscript>3</subscript></entry>
+	    <entry>h<subscript>2</subscript></entry>
+	    <entry>h<subscript>1</subscript></entry>
+	    <entry>h<subscript>0</subscript></entry>
+	    <entry></entry>
+	    <entry>s<subscript>7</subscript></entry>
+	    <entry>s<subscript>6</subscript></entry>
+	    <entry>s<subscript>5</subscript></entry>
+	    <entry>s<subscript>4</subscript></entry>
+	    <entry>s<subscript>3</subscript></entry>
+	    <entry>s<subscript>2</subscript></entry>
+	    <entry>s<subscript>1</subscript></entry>
+	    <entry>s<subscript>0</subscript></entry>
+	    <entry></entry>
+	    <entry>v<subscript>7</subscript></entry>
+	    <entry>v<subscript>6</subscript></entry>
+	    <entry>v<subscript>5</subscript></entry>
+	    <entry>v<subscript>4</subscript></entry>
+	    <entry>v<subscript>3</subscript></entry>
+	    <entry>v<subscript>2</subscript></entry>
+	    <entry>v<subscript>1</subscript></entry>
+	    <entry>v<subscript>0</subscript></entry>
+	  </row>
+	  <row id="V4L2-PIX-FMT-HSV24">
+	    <entry><constant>V4L2_PIX_FMT_HSV24</constant></entry>
+	    <entry>'HSV3'</entry>
+	    <entry></entry>
+	    <entry>h<subscript>7</subscript></entry>
+	    <entry>h<subscript>6</subscript></entry>
+	    <entry>h<subscript>5</subscript></entry>
+	    <entry>h<subscript>4</subscript></entry>
+	    <entry>h<subscript>3</subscript></entry>
+	    <entry>h<subscript>2</subscript></entry>
+	    <entry>h<subscript>1</subscript></entry>
+	    <entry>h<subscript>0</subscript></entry>
+	    <entry></entry>
+	    <entry>s<subscript>7</subscript></entry>
+	    <entry>s<subscript>6</subscript></entry>
+	    <entry>s<subscript>5</subscript></entry>
+	    <entry>s<subscript>4</subscript></entry>
+	    <entry>s<subscript>3</subscript></entry>
+	    <entry>s<subscript>2</subscript></entry>
+	    <entry>s<subscript>1</subscript></entry>
+	    <entry>s<subscript>0</subscript></entry>
+	    <entry></entry>
+	    <entry>v<subscript>7</subscript></entry>
+	    <entry>v<subscript>6</subscript></entry>
+	    <entry>v<subscript>5</subscript></entry>
+	    <entry>v<subscript>4</subscript></entry>
+	    <entry>v<subscript>3</subscript></entry>
+	    <entry>v<subscript>2</subscript></entry>
+	    <entry>v<subscript>1</subscript></entry>
+	    <entry>v<subscript>0</subscript></entry>
+	  </row>
+	</tbody>
+      </tgroup>
+    </table>
+
+    <para>Bit 7 is the most significant bit.</para>
+
+  </refsect1>
+    </refentry>
diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml
index 5a08aeea4360..7b081a6bdc61 100644
--- a/Documentation/DocBook/media/v4l/pixfmt.xml
+++ b/Documentation/DocBook/media/v4l/pixfmt.xml
@@ -1740,6 +1740,19 @@ extended control <constant>V4L2_CID_MPEG_STREAM_TYPE</constant>, see
     </table>
   </section>
 
+  <section id="hsv-formats">
+    <title>HSV Formats</title>
+
+    <para> These formats store the color information of the image
+in a geometrical representation. The colors are mapped into a
+cylinder, where the angle is the HUE, the height is the VALUE
+and the distance to the center is the SATURATION. This is a very
+useful format for image segmentation algorithms. </para>
+
+    &packed-hsv;
+
+  </section>
+
   <section id="sdr-formats">
     <title>SDR Formats</title>
 
diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml
index 42e626d6c936..f38039b7c338 100644
--- a/Documentation/DocBook/media/v4l/v4l2.xml
+++ b/Documentation/DocBook/media/v4l/v4l2.xml
@@ -152,6 +152,14 @@ structs, ioctls) must be noted in more detail in the history chapter
 (compat.xml), along with the possible impact on existing drivers and
 applications. -->
       <revision>
+	<revnumber>4.8</revnumber>
+	<date>2016-07-15</date>
+	<authorinitials>rr</authorinitials>
+	<revremark> Introduce HSV formats.
+	</revremark>
+      </revision>
+
+      <revision>
 	<revnumber>4.5</revnumber>
 	<date>2015-10-29</date>
 	<authorinitials>rr</authorinitials>
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 3/6] [media] Documentation: Add Ricardo Ribalda as author
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 1/6] [media] videodev2.h Add HSV formats Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 2/6] [media] Documentation: Add HSV format Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 4/6] [media] vivid: code refactor for color representation Ricardo Ribalda Delgado
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

My initials were on the Changelog, but there was no link to my mail.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 Documentation/DocBook/media/v4l/v4l2.xml | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml
index f38039b7c338..e09839d56113 100644
--- a/Documentation/DocBook/media/v4l/v4l2.xml
+++ b/Documentation/DocBook/media/v4l/v4l2.xml
@@ -117,6 +117,17 @@ Remote Controller chapter.</contrib>
 	  </address>
 	</affiliation>
       </author>
+
+      <author>
+	<firstname>Ricardo</firstname>
+	<surname>Ribalda</surname>
+	<contrib>HSV formats and minor fixes.</contrib>
+	<affiliation>
+	  <address>
+	    <email>ricardo.ribalda@gmail.com</email>
+	  </address>
+	</affiliation>
+      </author>
     </authorgroup>
 
     <copyright>
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 4/6] [media] vivid: code refactor for color representation
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
                   ` (2 preceding siblings ...)
  2016-07-15 15:16 ` [PATCH 3/6] [media] Documentation: Add Ricardo Ribalda as author Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 5/6] [media] vivid: Add support for HSV formats Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 6/6] [media] vivid: Rename variable Ricardo Ribalda Delgado
  5 siblings, 0 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

Replace is_yuv with color_representation. Which can be used by HSV
formats.

This change should ease the review of the following patches.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c   | 44 ++++++++++++++-------
 drivers/media/platform/vivid/vivid-core.h       |  2 +-
 drivers/media/platform/vivid/vivid-vid-common.c | 52 ++++++++++++-------------
 include/media/v4l2-tpg.h                        |  7 +++-
 4 files changed, 63 insertions(+), 42 deletions(-)

diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
index 3ec3cebe62b9..3cab77ea92a4 100644
--- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
+++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
@@ -237,13 +237,13 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 	case V4L2_PIX_FMT_GREY:
 	case V4L2_PIX_FMT_Y16:
 	case V4L2_PIX_FMT_Y16_BE:
-		tpg->is_yuv = false;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_RGB;
 		break;
 	case V4L2_PIX_FMT_YUV444:
 	case V4L2_PIX_FMT_YUV555:
 	case V4L2_PIX_FMT_YUV565:
 	case V4L2_PIX_FMT_YUV32:
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_YUV420M:
 	case V4L2_PIX_FMT_YVU420M:
@@ -256,7 +256,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->hdownsampling[1] = 2;
 		tpg->hdownsampling[2] = 2;
 		tpg->planes = 3;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_YUV422M:
 	case V4L2_PIX_FMT_YVU422M:
@@ -268,7 +268,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->hdownsampling[1] = 2;
 		tpg->hdownsampling[2] = 2;
 		tpg->planes = 3;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_NV16M:
 	case V4L2_PIX_FMT_NV61M:
@@ -280,7 +280,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->hdownsampling[1] = 1;
 		tpg->hmask[1] = ~1;
 		tpg->planes = 2;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_NV12M:
 	case V4L2_PIX_FMT_NV21M:
@@ -292,7 +292,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->hdownsampling[1] = 1;
 		tpg->hmask[1] = ~1;
 		tpg->planes = 2;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_YUV444M:
 	case V4L2_PIX_FMT_YVU444M:
@@ -302,21 +302,21 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->vdownsampling[2] = 1;
 		tpg->hdownsampling[1] = 1;
 		tpg->hdownsampling[2] = 1;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_NV24:
 	case V4L2_PIX_FMT_NV42:
 		tpg->vdownsampling[1] = 1;
 		tpg->hdownsampling[1] = 1;
 		tpg->planes = 2;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	case V4L2_PIX_FMT_YUYV:
 	case V4L2_PIX_FMT_UYVY:
 	case V4L2_PIX_FMT_YVYU:
 	case V4L2_PIX_FMT_VYUY:
 		tpg->hmask[0] = ~1;
-		tpg->is_yuv = true;
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
 	default:
 		return false;
@@ -820,7 +820,7 @@ static void precalculate_color(struct tpg_data *tpg, int k)
 
 		cb = (128 << 4) + (tmp_cb * tpg->contrast * tpg->saturation) / (128 * 128);
 		cr = (128 << 4) + (tmp_cr * tpg->contrast * tpg->saturation) / (128 * 128);
-		if (tpg->is_yuv) {
+		if (tpg->color_representation == TGP_COLOR_REPRESENTATION_YUV) {
 			tpg->colors[k][0] = clamp(y >> 4, 1, 254);
 			tpg->colors[k][1] = clamp(cb >> 4, 1, 254);
 			tpg->colors[k][2] = clamp(cr >> 4, 1, 254);
@@ -829,7 +829,7 @@ static void precalculate_color(struct tpg_data *tpg, int k)
 		ycbcr_to_color(tpg, y, cb, cr, &r, &g, &b);
 	}
 
-	if (tpg->is_yuv) {
+	if (tpg->color_representation == TGP_COLOR_REPRESENTATION_YUV) {
 		/* Convert to YCbCr */
 		int y, cb, cr;
 
@@ -1842,7 +1842,9 @@ static void tpg_recalc(struct tpg_data *tpg)
 
 		if (tpg->quantization == V4L2_QUANTIZATION_DEFAULT)
 			tpg->real_quantization =
-				V4L2_MAP_QUANTIZATION_DEFAULT(!tpg->is_yuv,
+				V4L2_MAP_QUANTIZATION_DEFAULT(
+					tpg->color_representation ==
+						TGP_COLOR_REPRESENTATION_RGB,
 					tpg->colorspace, tpg->real_ycbcr_enc);
 
 		tpg_precalculate_colors(tpg);
@@ -1889,11 +1891,25 @@ static int tpg_pattern_avg(const struct tpg_data *tpg,
 	return -1;
 }
 
+static const char *tpg_color_representation_str(enum tgp_color_representation
+						 color_representation)
+{
+	switch (color_representation) {
+
+	case TGP_COLOR_REPRESENTATION_YUV:
+		return "YCbCr";
+	case TGP_COLOR_REPRESENTATION_RGB:
+	default:
+		return "RGB";
+
+	}
+}
+
 void tpg_log_status(struct tpg_data *tpg)
 {
 	pr_info("tpg source WxH: %ux%u (%s)\n",
-			tpg->src_width, tpg->src_height,
-			tpg->is_yuv ? "YCbCr" : "RGB");
+		tpg->src_width, tpg->src_height,
+		tpg_color_representation_str(tpg->color_representation));
 	pr_info("tpg field: %u\n", tpg->field);
 	pr_info("tpg crop: %ux%u@%dx%d\n", tpg->crop.width, tpg->crop.height,
 			tpg->crop.left, tpg->crop.top);
diff --git a/drivers/media/platform/vivid/vivid-core.h b/drivers/media/platform/vivid/vivid-core.h
index a7daa40d0a49..191ba679ad65 100644
--- a/drivers/media/platform/vivid/vivid-core.h
+++ b/drivers/media/platform/vivid/vivid-core.h
@@ -80,7 +80,7 @@ extern unsigned vivid_debug;
 
 struct vivid_fmt {
 	u32	fourcc;          /* v4l2 format id */
-	bool	is_yuv;
+	enum tgp_color_representation color_representation;
 	bool	can_do_overlay;
 	u8	vdownsampling[TPG_MAX_PLANES];
 	u32	alpha_mask;
diff --git a/drivers/media/platform/vivid/vivid-vid-common.c b/drivers/media/platform/vivid/vivid-vid-common.c
index fcda3ae4e6b0..314799111cf7 100644
--- a/drivers/media/platform/vivid/vivid-vid-common.c
+++ b/drivers/media/platform/vivid/vivid-vid-common.c
@@ -48,7 +48,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUYV,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 		.data_offset = { PLANE0_DATA_OFFSET },
@@ -57,7 +57,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_UYVY,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -65,7 +65,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YVYU,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -73,7 +73,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_VYUY,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -81,7 +81,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUV422P,
 		.vdownsampling = { 1, 1, 1 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 1,
 	},
@@ -89,7 +89,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUV420,
 		.vdownsampling = { 1, 2, 2 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 1,
 	},
@@ -97,7 +97,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YVU420,
 		.vdownsampling = { 1, 2, 2 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 1,
 	},
@@ -105,7 +105,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV12,
 		.vdownsampling = { 1, 2 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -113,7 +113,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV21,
 		.vdownsampling = { 1, 2 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -121,7 +121,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV16,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -129,7 +129,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV61,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -137,7 +137,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV24,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -145,7 +145,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV42,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 1,
 	},
@@ -184,7 +184,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_GREY,
 		.vdownsampling = { 1 },
 		.bit_depth = { 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -192,7 +192,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_Y16,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -200,7 +200,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_Y16_BE,
 		.vdownsampling = { 1 },
 		.bit_depth = { 16 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 1,
 		.buffers = 1,
 	},
@@ -452,7 +452,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV16M,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 2,
 		.data_offset = { PLANE0_DATA_OFFSET, 0 },
@@ -461,7 +461,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV61M,
 		.vdownsampling = { 1, 1 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 2,
 		.data_offset = { 0, PLANE0_DATA_OFFSET },
@@ -470,7 +470,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUV420M,
 		.vdownsampling = { 1, 2, 2 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
@@ -478,7 +478,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YVU420M,
 		.vdownsampling = { 1, 2, 2 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
@@ -486,7 +486,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV12M,
 		.vdownsampling = { 1, 2 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 2,
 	},
@@ -494,7 +494,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_NV21M,
 		.vdownsampling = { 1, 2 },
 		.bit_depth = { 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 2,
 		.buffers = 2,
 	},
@@ -502,7 +502,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUV422M,
 		.vdownsampling = { 1, 1, 1 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
@@ -510,7 +510,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YVU422M,
 		.vdownsampling = { 1, 1, 1 },
 		.bit_depth = { 8, 4, 4 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
@@ -518,7 +518,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YUV444M,
 		.vdownsampling = { 1, 1, 1 },
 		.bit_depth = { 8, 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
@@ -526,7 +526,7 @@ struct vivid_fmt vivid_formats[] = {
 		.fourcc   = V4L2_PIX_FMT_YVU444M,
 		.vdownsampling = { 1, 1, 1 },
 		.bit_depth = { 8, 8, 8 },
-		.is_yuv   = true,
+		.color_representation = TGP_COLOR_REPRESENTATION_YUV,
 		.planes   = 3,
 		.buffers = 3,
 	},
diff --git a/include/media/v4l2-tpg.h b/include/media/v4l2-tpg.h
index 329bebfa930c..13ea42bb9530 100644
--- a/include/media/v4l2-tpg.h
+++ b/include/media/v4l2-tpg.h
@@ -87,6 +87,11 @@ enum tpg_move_mode {
 	TPG_MOVE_POS_FAST,
 };
 
+enum tgp_color_representation {
+	TGP_COLOR_REPRESENTATION_RGB,
+	TGP_COLOR_REPRESENTATION_YUV,
+};
+
 extern const char * const tpg_aspect_strings[];
 
 #define TPG_MAX_PLANES 3
@@ -119,7 +124,7 @@ struct tpg_data {
 	u8				saturation;
 	s16				hue;
 	u32				fourcc;
-	bool				is_yuv;
+	enum tgp_color_representation	color_representation;
 	u32				colorspace;
 	u32				xfer_func;
 	u32				ycbcr_enc;
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 5/6] [media] vivid: Add support for HSV formats
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
                   ` (3 preceding siblings ...)
  2016-07-15 15:16 ` [PATCH 4/6] [media] vivid: code refactor for color representation Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  2016-07-15 15:16 ` [PATCH 6/6] [media] vivid: Rename variable Ricardo Ribalda Delgado
  5 siblings, 0 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

This patch adds support for V4L2_PIX_FMT_HSV24 and V4L2_PIX_FMT_HSV32.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c   | 94 +++++++++++++++++++++++--
 drivers/media/platform/vivid/vivid-vid-common.c | 14 ++++
 include/media/v4l2-tpg.h                        |  1 +
 3 files changed, 105 insertions(+), 4 deletions(-)

diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
index 3cab77ea92a4..d87a7a6a6b22 100644
--- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
+++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
@@ -318,6 +318,10 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->hmask[0] = ~1;
 		tpg->color_representation = TGP_COLOR_REPRESENTATION_YUV;
 		break;
+	case V4L2_PIX_FMT_HSV24:
+	case V4L2_PIX_FMT_HSV32:
+		tpg->color_representation = TGP_COLOR_REPRESENTATION_HSV;
+		break;
 	default:
 		return false;
 	}
@@ -351,6 +355,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		break;
 	case V4L2_PIX_FMT_RGB24:
 	case V4L2_PIX_FMT_BGR24:
+	case V4L2_PIX_FMT_HSV24:
 		tpg->twopixelsize[0] = 2 * 3;
 		break;
 	case V4L2_PIX_FMT_BGR666:
@@ -361,6 +366,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 	case V4L2_PIX_FMT_ARGB32:
 	case V4L2_PIX_FMT_ABGR32:
 	case V4L2_PIX_FMT_YUV32:
+	case V4L2_PIX_FMT_HSV32:
 		tpg->twopixelsize[0] = 2 * 4;
 		break;
 	case V4L2_PIX_FMT_NV12:
@@ -408,6 +414,7 @@ bool tpg_s_fourcc(struct tpg_data *tpg, u32 fourcc)
 		tpg->twopixelsize[1] = 4;
 		break;
 	}
+
 	return true;
 }
 EXPORT_SYMBOL_GPL(tpg_s_fourcc);
@@ -490,6 +497,64 @@ static inline int linear_to_rec709(int v)
 	return tpg_linear_to_rec709[v];
 }
 
+static void color_to_hsv(struct tpg_data *tpg, int r, int g, int b,
+			   int *h, int *s, int *v)
+{
+	int max_rgb, min_rgb, diff_rgb;
+	int aux;
+	int third;
+
+	r >>= 4;
+	g >>= 4;
+	b >>= 4;
+
+	/*V*/
+	max_rgb = max3(r, g, b);
+	*v = max_rgb;
+	if (!max_rgb) {
+		*h = 0;
+		*s = 0;
+		return;
+	}
+
+	/*S*/
+	min_rgb = min3(r, g, b);
+	diff_rgb = max_rgb - min_rgb;
+	aux = 255 * diff_rgb;
+	aux += max_rgb / 2;
+	aux /= max_rgb;
+	*s = aux;
+	if (!aux) {
+		*h = 0;
+		return;
+	}
+
+	/*H*/
+	if (max_rgb == r) {
+		aux =  g - b;
+		third = 0;
+	} else if (max_rgb == g) {
+		aux =  b - r;
+		third = 60;
+	} else {
+		aux =  r - g;
+		third = 120;
+	}
+
+	aux *= 30;
+	aux += diff_rgb / 2;
+	aux /= diff_rgb;
+	aux += third;
+
+	/*Clamp H*/
+	if (aux < 0)
+		aux += 180;
+	else if (aux > 180)
+		aux -= 180;
+	*h = aux;
+
+}
+
 static void rgb2ycbcr(const int m[3][3], int r, int g, int b,
 			int y_offset, int *y, int *cb, int *cr)
 {
@@ -829,7 +894,19 @@ static void precalculate_color(struct tpg_data *tpg, int k)
 		ycbcr_to_color(tpg, y, cb, cr, &r, &g, &b);
 	}
 
-	if (tpg->color_representation == TGP_COLOR_REPRESENTATION_YUV) {
+	switch (tpg->color_representation) {
+	case TGP_COLOR_REPRESENTATION_HSV:
+	{
+		int h, s, v;
+
+		color_to_hsv(tpg, r, g, b, &h, &s, &v);
+		tpg->colors[k][0] = h;
+		tpg->colors[k][1] = s;
+		tpg->colors[k][2] = v;
+		break;
+	}
+	case TGP_COLOR_REPRESENTATION_YUV:
+	{
 		/* Convert to YCbCr */
 		int y, cb, cr;
 
@@ -863,7 +940,10 @@ static void precalculate_color(struct tpg_data *tpg, int k)
 		tpg->colors[k][0] = y;
 		tpg->colors[k][1] = cb;
 		tpg->colors[k][2] = cr;
-	} else {
+		break;
+	}
+	case TGP_COLOR_REPRESENTATION_RGB:
+	{
 		if (tpg->real_quantization == V4L2_QUANTIZATION_LIM_RANGE) {
 			r = (r * 219) / 255 + (16 << 4);
 			g = (g * 219) / 255 + (16 << 4);
@@ -913,6 +993,8 @@ static void precalculate_color(struct tpg_data *tpg, int k)
 		tpg->colors[k][0] = r;
 		tpg->colors[k][1] = g;
 		tpg->colors[k][2] = b;
+		break;
+	}
 	}
 }
 
@@ -938,8 +1020,8 @@ static void gen_twopix(struct tpg_data *tpg,
 		alpha = 0;
 	if (color == TPG_COLOR_RANDOM)
 		precalculate_color(tpg, color);
-	r_y = tpg->colors[color][0]; /* R or precalculated Y */
-	g_u = tpg->colors[color][1]; /* G or precalculated U */
+	r_y = tpg->colors[color][0]; /* R or precalculated Y, H */
+	g_u = tpg->colors[color][1]; /* G or precalculated U, V */
 	b_v = tpg->colors[color][2]; /* B or precalculated V */
 
 	switch (tpg->fourcc) {
@@ -1121,6 +1203,7 @@ static void gen_twopix(struct tpg_data *tpg,
 		buf[0][offset + 1] = (g_u << 5) | b_v;
 		break;
 	case V4L2_PIX_FMT_RGB24:
+	case V4L2_PIX_FMT_HSV24:
 		buf[0][offset] = r_y;
 		buf[0][offset + 1] = g_u;
 		buf[0][offset + 2] = b_v;
@@ -1138,6 +1221,7 @@ static void gen_twopix(struct tpg_data *tpg,
 		break;
 	case V4L2_PIX_FMT_RGB32:
 	case V4L2_PIX_FMT_XRGB32:
+	case V4L2_PIX_FMT_HSV32:
 		alpha = 0;
 		/* fall through */
 	case V4L2_PIX_FMT_YUV32:
@@ -1896,6 +1980,8 @@ static const char *tpg_color_representation_str(enum tgp_color_representation
 {
 	switch (color_representation) {
 
+	case TGP_COLOR_REPRESENTATION_HSV:
+		return "HSV";
 	case TGP_COLOR_REPRESENTATION_YUV:
 		return "YCbCr";
 	case TGP_COLOR_REPRESENTATION_RGB:
diff --git a/drivers/media/platform/vivid/vivid-vid-common.c b/drivers/media/platform/vivid/vivid-vid-common.c
index 314799111cf7..cc985685ed05 100644
--- a/drivers/media/platform/vivid/vivid-vid-common.c
+++ b/drivers/media/platform/vivid/vivid-vid-common.c
@@ -445,6 +445,20 @@ struct vivid_fmt vivid_formats[] = {
 		.planes   = 1,
 		.buffers = 1,
 	},
+	{
+		.fourcc   = V4L2_PIX_FMT_HSV24, /* HSV 24bits */
+		.vdownsampling = { 1 },
+		.bit_depth = { 24 },
+		.planes   = 1,
+		.buffers = 1,
+	},
+	{
+		.fourcc   = V4L2_PIX_FMT_HSV32, /* HSV 32bits */
+		.vdownsampling = { 1 },
+		.bit_depth = { 32 },
+		.planes   = 1,
+		.buffers = 1,
+	},
 
 	/* Multiplanar formats */
 
diff --git a/include/media/v4l2-tpg.h b/include/media/v4l2-tpg.h
index 13ea42bb9530..17a257d12941 100644
--- a/include/media/v4l2-tpg.h
+++ b/include/media/v4l2-tpg.h
@@ -90,6 +90,7 @@ enum tpg_move_mode {
 enum tgp_color_representation {
 	TGP_COLOR_REPRESENTATION_RGB,
 	TGP_COLOR_REPRESENTATION_YUV,
+	TGP_COLOR_REPRESENTATION_HSV,
 };
 
 extern const char * const tpg_aspect_strings[];
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [PATCH 6/6] [media] vivid: Rename variable
  2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
                   ` (4 preceding siblings ...)
  2016-07-15 15:16 ` [PATCH 5/6] [media] vivid: Add support for HSV formats Ricardo Ribalda Delgado
@ 2016-07-15 15:16 ` Ricardo Ribalda Delgado
  5 siblings, 0 replies; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:16 UTC (permalink / raw)
  To: auro Carvalho Chehab, Hans Verkuil, Laurent Pinchart,
	Sakari Ailus, Antti Palosaari, Guennadi Liakhovetski,
	Helen Mae Koike Fornazier, Philipp Zabel, Shuah Khan,
	linux-media, linux-kernel
  Cc: Ricardo Ribalda Delgado

r_y and g_u now also contain the H and V components on the HSV formats.
Rename the variables to reflect this.

Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
 drivers/media/common/v4l2-tpg/v4l2-tpg-core.c | 209 +++++++++++++-------------
 1 file changed, 105 insertions(+), 104 deletions(-)

diff --git a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
index d87a7a6a6b22..1711a9cd20c4 100644
--- a/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
+++ b/drivers/media/common/v4l2-tpg/v4l2-tpg-core.c
@@ -1012,7 +1012,7 @@ static void gen_twopix(struct tpg_data *tpg,
 {
 	unsigned offset = odd * tpg->twopixelsize[0] / 2;
 	u8 alpha = tpg->alpha_component;
-	u8 r_y, g_u, b_v;
+	u8 r_y_h, g_u_s, b_v;
 
 	if (tpg->alpha_red_only && color != TPG_COLOR_CSC_RED &&
 				   color != TPG_COLOR_100_RED &&
@@ -1020,161 +1020,161 @@ static void gen_twopix(struct tpg_data *tpg,
 		alpha = 0;
 	if (color == TPG_COLOR_RANDOM)
 		precalculate_color(tpg, color);
-	r_y = tpg->colors[color][0]; /* R or precalculated Y, H */
-	g_u = tpg->colors[color][1]; /* G or precalculated U, V */
+	r_y_h = tpg->colors[color][0]; /* R or precalculated Y, H */
+	g_u_s = tpg->colors[color][1]; /* G or precalculated U, V */
 	b_v = tpg->colors[color][2]; /* B or precalculated V */
 
 	switch (tpg->fourcc) {
 	case V4L2_PIX_FMT_GREY:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		break;
 	case V4L2_PIX_FMT_Y16:
 		/*
-		 * Ideally both bytes should be set to r_y, but then you won't
+		 * Ideally both bytes should be set to r_y_h, but then you won't
 		 * be able to detect endian problems. So keep it 0 except for
-		 * the corner case where r_y is 0xff so white really will be
+		 * the corner case where r_y_h is 0xff so white really will be
 		 * white (0xffff).
 		 */
-		buf[0][offset] = r_y == 0xff ? r_y : 0;
-		buf[0][offset+1] = r_y;
+		buf[0][offset] = r_y_h == 0xff ? r_y_h : 0;
+		buf[0][offset+1] = r_y_h;
 		break;
 	case V4L2_PIX_FMT_Y16_BE:
 		/* See comment for V4L2_PIX_FMT_Y16 above */
-		buf[0][offset] = r_y;
-		buf[0][offset+1] = r_y == 0xff ? r_y : 0;
+		buf[0][offset] = r_y_h;
+		buf[0][offset+1] = r_y_h == 0xff ? r_y_h : 0;
 		break;
 	case V4L2_PIX_FMT_YUV422M:
 	case V4L2_PIX_FMT_YUV422P:
 	case V4L2_PIX_FMT_YUV420:
 	case V4L2_PIX_FMT_YUV420M:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
-			buf[1][0] = (buf[1][0] + g_u) / 2;
+			buf[1][0] = (buf[1][0] + g_u_s) / 2;
 			buf[2][0] = (buf[2][0] + b_v) / 2;
 			buf[1][1] = buf[1][0];
 			buf[2][1] = buf[2][0];
 			break;
 		}
-		buf[1][0] = g_u;
+		buf[1][0] = g_u_s;
 		buf[2][0] = b_v;
 		break;
 	case V4L2_PIX_FMT_YVU422M:
 	case V4L2_PIX_FMT_YVU420:
 	case V4L2_PIX_FMT_YVU420M:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
 			buf[1][0] = (buf[1][0] + b_v) / 2;
-			buf[2][0] = (buf[2][0] + g_u) / 2;
+			buf[2][0] = (buf[2][0] + g_u_s) / 2;
 			buf[1][1] = buf[1][0];
 			buf[2][1] = buf[2][0];
 			break;
 		}
 		buf[1][0] = b_v;
-		buf[2][0] = g_u;
+		buf[2][0] = g_u_s;
 		break;
 
 	case V4L2_PIX_FMT_NV12:
 	case V4L2_PIX_FMT_NV12M:
 	case V4L2_PIX_FMT_NV16:
 	case V4L2_PIX_FMT_NV16M:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
-			buf[1][0] = (buf[1][0] + g_u) / 2;
+			buf[1][0] = (buf[1][0] + g_u_s) / 2;
 			buf[1][1] = (buf[1][1] + b_v) / 2;
 			break;
 		}
-		buf[1][0] = g_u;
+		buf[1][0] = g_u_s;
 		buf[1][1] = b_v;
 		break;
 	case V4L2_PIX_FMT_NV21:
 	case V4L2_PIX_FMT_NV21M:
 	case V4L2_PIX_FMT_NV61:
 	case V4L2_PIX_FMT_NV61M:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
 			buf[1][0] = (buf[1][0] + b_v) / 2;
-			buf[1][1] = (buf[1][1] + g_u) / 2;
+			buf[1][1] = (buf[1][1] + g_u_s) / 2;
 			break;
 		}
 		buf[1][0] = b_v;
-		buf[1][1] = g_u;
+		buf[1][1] = g_u_s;
 		break;
 
 	case V4L2_PIX_FMT_YUV444M:
-		buf[0][offset] = r_y;
-		buf[1][offset] = g_u;
+		buf[0][offset] = r_y_h;
+		buf[1][offset] = g_u_s;
 		buf[2][offset] = b_v;
 		break;
 
 	case V4L2_PIX_FMT_YVU444M:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		buf[1][offset] = b_v;
-		buf[2][offset] = g_u;
+		buf[2][offset] = g_u_s;
 		break;
 
 	case V4L2_PIX_FMT_NV24:
-		buf[0][offset] = r_y;
-		buf[1][2 * offset] = g_u;
+		buf[0][offset] = r_y_h;
+		buf[1][2 * offset] = g_u_s;
 		buf[1][2 * offset + 1] = b_v;
 		break;
 
 	case V4L2_PIX_FMT_NV42:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		buf[1][2 * offset] = b_v;
-		buf[1][2 * offset + 1] = g_u;
+		buf[1][2 * offset + 1] = g_u_s;
 		break;
 
 	case V4L2_PIX_FMT_YUYV:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
-			buf[0][1] = (buf[0][1] + g_u) / 2;
+			buf[0][1] = (buf[0][1] + g_u_s) / 2;
 			buf[0][3] = (buf[0][3] + b_v) / 2;
 			break;
 		}
-		buf[0][1] = g_u;
+		buf[0][1] = g_u_s;
 		buf[0][3] = b_v;
 		break;
 	case V4L2_PIX_FMT_UYVY:
-		buf[0][offset + 1] = r_y;
+		buf[0][offset + 1] = r_y_h;
 		if (odd) {
-			buf[0][0] = (buf[0][0] + g_u) / 2;
+			buf[0][0] = (buf[0][0] + g_u_s) / 2;
 			buf[0][2] = (buf[0][2] + b_v) / 2;
 			break;
 		}
-		buf[0][0] = g_u;
+		buf[0][0] = g_u_s;
 		buf[0][2] = b_v;
 		break;
 	case V4L2_PIX_FMT_YVYU:
-		buf[0][offset] = r_y;
+		buf[0][offset] = r_y_h;
 		if (odd) {
 			buf[0][1] = (buf[0][1] + b_v) / 2;
-			buf[0][3] = (buf[0][3] + g_u) / 2;
+			buf[0][3] = (buf[0][3] + g_u_s) / 2;
 			break;
 		}
 		buf[0][1] = b_v;
-		buf[0][3] = g_u;
+		buf[0][3] = g_u_s;
 		break;
 	case V4L2_PIX_FMT_VYUY:
-		buf[0][offset + 1] = r_y;
+		buf[0][offset + 1] = r_y_h;
 		if (odd) {
 			buf[0][0] = (buf[0][0] + b_v) / 2;
-			buf[0][2] = (buf[0][2] + g_u) / 2;
+			buf[0][2] = (buf[0][2] + g_u_s) / 2;
 			break;
 		}
 		buf[0][0] = b_v;
-		buf[0][2] = g_u;
+		buf[0][2] = g_u_s;
 		break;
 	case V4L2_PIX_FMT_RGB332:
-		buf[0][offset] = (r_y << 5) | (g_u << 2) | b_v;
+		buf[0][offset] = (r_y_h << 5) | (g_u_s << 2) | b_v;
 		break;
 	case V4L2_PIX_FMT_YUV565:
 	case V4L2_PIX_FMT_RGB565:
-		buf[0][offset] = (g_u << 5) | b_v;
-		buf[0][offset + 1] = (r_y << 3) | (g_u >> 3);
+		buf[0][offset] = (g_u_s << 5) | b_v;
+		buf[0][offset + 1] = (r_y_h << 3) | (g_u_s >> 3);
 		break;
 	case V4L2_PIX_FMT_RGB565X:
-		buf[0][offset] = (r_y << 3) | (g_u >> 3);
-		buf[0][offset + 1] = (g_u << 5) | b_v;
+		buf[0][offset] = (r_y_h << 3) | (g_u_s >> 3);
+		buf[0][offset + 1] = (g_u_s << 5) | b_v;
 		break;
 	case V4L2_PIX_FMT_RGB444:
 	case V4L2_PIX_FMT_XRGB444:
@@ -1182,8 +1182,8 @@ static void gen_twopix(struct tpg_data *tpg,
 		/* fall through */
 	case V4L2_PIX_FMT_YUV444:
 	case V4L2_PIX_FMT_ARGB444:
-		buf[0][offset] = (g_u << 4) | b_v;
-		buf[0][offset + 1] = (alpha & 0xf0) | r_y;
+		buf[0][offset] = (g_u_s << 4) | b_v;
+		buf[0][offset + 1] = (alpha & 0xf0) | r_y_h;
 		break;
 	case V4L2_PIX_FMT_RGB555:
 	case V4L2_PIX_FMT_XRGB555:
@@ -1191,32 +1191,33 @@ static void gen_twopix(struct tpg_data *tpg,
 		/* fall through */
 	case V4L2_PIX_FMT_YUV555:
 	case V4L2_PIX_FMT_ARGB555:
-		buf[0][offset] = (g_u << 5) | b_v;
-		buf[0][offset + 1] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
+		buf[0][offset] = (g_u_s << 5) | b_v;
+		buf[0][offset + 1] = (alpha & 0x80) | (r_y_h << 2)
+						    | (g_u_s >> 3);
 		break;
 	case V4L2_PIX_FMT_RGB555X:
 	case V4L2_PIX_FMT_XRGB555X:
 		alpha = 0;
 		/* fall through */
 	case V4L2_PIX_FMT_ARGB555X:
-		buf[0][offset] = (alpha & 0x80) | (r_y << 2) | (g_u >> 3);
-		buf[0][offset + 1] = (g_u << 5) | b_v;
+		buf[0][offset] = (alpha & 0x80) | (r_y_h << 2) | (g_u_s >> 3);
+		buf[0][offset + 1] = (g_u_s << 5) | b_v;
 		break;
 	case V4L2_PIX_FMT_RGB24:
 	case V4L2_PIX_FMT_HSV24:
-		buf[0][offset] = r_y;
-		buf[0][offset + 1] = g_u;
+		buf[0][offset] = r_y_h;
+		buf[0][offset + 1] = g_u_s;
 		buf[0][offset + 2] = b_v;
 		break;
 	case V4L2_PIX_FMT_BGR24:
 		buf[0][offset] = b_v;
-		buf[0][offset + 1] = g_u;
-		buf[0][offset + 2] = r_y;
+		buf[0][offset + 1] = g_u_s;
+		buf[0][offset + 2] = r_y_h;
 		break;
 	case V4L2_PIX_FMT_BGR666:
-		buf[0][offset] = (b_v << 2) | (g_u >> 4);
-		buf[0][offset + 1] = (g_u << 4) | (r_y >> 2);
-		buf[0][offset + 2] = r_y << 6;
+		buf[0][offset] = (b_v << 2) | (g_u_s >> 4);
+		buf[0][offset + 1] = (g_u_s << 4) | (r_y_h >> 2);
+		buf[0][offset + 2] = r_y_h << 6;
 		buf[0][offset + 3] = 0;
 		break;
 	case V4L2_PIX_FMT_RGB32:
@@ -1227,8 +1228,8 @@ static void gen_twopix(struct tpg_data *tpg,
 	case V4L2_PIX_FMT_YUV32:
 	case V4L2_PIX_FMT_ARGB32:
 		buf[0][offset] = alpha;
-		buf[0][offset + 1] = r_y;
-		buf[0][offset + 2] = g_u;
+		buf[0][offset + 1] = r_y_h;
+		buf[0][offset + 2] = g_u_s;
 		buf[0][offset + 3] = b_v;
 		break;
 	case V4L2_PIX_FMT_BGR32:
@@ -1237,87 +1238,87 @@ static void gen_twopix(struct tpg_data *tpg,
 		/* fall through */
 	case V4L2_PIX_FMT_ABGR32:
 		buf[0][offset] = b_v;
-		buf[0][offset + 1] = g_u;
-		buf[0][offset + 2] = r_y;
+		buf[0][offset + 1] = g_u_s;
+		buf[0][offset + 2] = r_y_h;
 		buf[0][offset + 3] = alpha;
 		break;
 	case V4L2_PIX_FMT_SBGGR8:
-		buf[0][offset] = odd ? g_u : b_v;
-		buf[1][offset] = odd ? r_y : g_u;
+		buf[0][offset] = odd ? g_u_s : b_v;
+		buf[1][offset] = odd ? r_y_h : g_u_s;
 		break;
 	case V4L2_PIX_FMT_SGBRG8:
-		buf[0][offset] = odd ? b_v : g_u;
-		buf[1][offset] = odd ? g_u : r_y;
+		buf[0][offset] = odd ? b_v : g_u_s;
+		buf[1][offset] = odd ? g_u_s : r_y_h;
 		break;
 	case V4L2_PIX_FMT_SGRBG8:
-		buf[0][offset] = odd ? r_y : g_u;
-		buf[1][offset] = odd ? g_u : b_v;
+		buf[0][offset] = odd ? r_y_h : g_u_s;
+		buf[1][offset] = odd ? g_u_s : b_v;
 		break;
 	case V4L2_PIX_FMT_SRGGB8:
-		buf[0][offset] = odd ? g_u : r_y;
-		buf[1][offset] = odd ? b_v : g_u;
+		buf[0][offset] = odd ? g_u_s : r_y_h;
+		buf[1][offset] = odd ? b_v : g_u_s;
 		break;
 	case V4L2_PIX_FMT_SBGGR10:
-		buf[0][offset] = odd ? g_u << 2 : b_v << 2;
-		buf[0][offset + 1] = odd ? g_u >> 6 : b_v >> 6;
-		buf[1][offset] = odd ? r_y << 2 : g_u << 2;
-		buf[1][offset + 1] = odd ? r_y >> 6 : g_u >> 6;
+		buf[0][offset] = odd ? g_u_s << 2 : b_v << 2;
+		buf[0][offset + 1] = odd ? g_u_s >> 6 : b_v >> 6;
+		buf[1][offset] = odd ? r_y_h << 2 : g_u_s << 2;
+		buf[1][offset + 1] = odd ? r_y_h >> 6 : g_u_s >> 6;
 		buf[0][offset] |= (buf[0][offset] >> 2) & 3;
 		buf[1][offset] |= (buf[1][offset] >> 2) & 3;
 		break;
 	case V4L2_PIX_FMT_SGBRG10:
-		buf[0][offset] = odd ? b_v << 2 : g_u << 2;
-		buf[0][offset + 1] = odd ? b_v >> 6 : g_u >> 6;
-		buf[1][offset] = odd ? g_u << 2 : r_y << 2;
-		buf[1][offset + 1] = odd ? g_u >> 6 : r_y >> 6;
+		buf[0][offset] = odd ? b_v << 2 : g_u_s << 2;
+		buf[0][offset + 1] = odd ? b_v >> 6 : g_u_s >> 6;
+		buf[1][offset] = odd ? g_u_s << 2 : r_y_h << 2;
+		buf[1][offset + 1] = odd ? g_u_s >> 6 : r_y_h >> 6;
 		buf[0][offset] |= (buf[0][offset] >> 2) & 3;
 		buf[1][offset] |= (buf[1][offset] >> 2) & 3;
 		break;
 	case V4L2_PIX_FMT_SGRBG10:
-		buf[0][offset] = odd ? r_y << 2 : g_u << 2;
-		buf[0][offset + 1] = odd ? r_y >> 6 : g_u >> 6;
-		buf[1][offset] = odd ? g_u << 2 : b_v << 2;
-		buf[1][offset + 1] = odd ? g_u >> 6 : b_v >> 6;
+		buf[0][offset] = odd ? r_y_h << 2 : g_u_s << 2;
+		buf[0][offset + 1] = odd ? r_y_h >> 6 : g_u_s >> 6;
+		buf[1][offset] = odd ? g_u_s << 2 : b_v << 2;
+		buf[1][offset + 1] = odd ? g_u_s >> 6 : b_v >> 6;
 		buf[0][offset] |= (buf[0][offset] >> 2) & 3;
 		buf[1][offset] |= (buf[1][offset] >> 2) & 3;
 		break;
 	case V4L2_PIX_FMT_SRGGB10:
-		buf[0][offset] = odd ? g_u << 2 : r_y << 2;
-		buf[0][offset + 1] = odd ? g_u >> 6 : r_y >> 6;
-		buf[1][offset] = odd ? b_v << 2 : g_u << 2;
-		buf[1][offset + 1] = odd ? b_v >> 6 : g_u >> 6;
+		buf[0][offset] = odd ? g_u_s << 2 : r_y_h << 2;
+		buf[0][offset + 1] = odd ? g_u_s >> 6 : r_y_h >> 6;
+		buf[1][offset] = odd ? b_v << 2 : g_u_s << 2;
+		buf[1][offset + 1] = odd ? b_v >> 6 : g_u_s >> 6;
 		buf[0][offset] |= (buf[0][offset] >> 2) & 3;
 		buf[1][offset] |= (buf[1][offset] >> 2) & 3;
 		break;
 	case V4L2_PIX_FMT_SBGGR12:
-		buf[0][offset] = odd ? g_u << 4 : b_v << 4;
-		buf[0][offset + 1] = odd ? g_u >> 4 : b_v >> 4;
-		buf[1][offset] = odd ? r_y << 4 : g_u << 4;
-		buf[1][offset + 1] = odd ? r_y >> 4 : g_u >> 4;
+		buf[0][offset] = odd ? g_u_s << 4 : b_v << 4;
+		buf[0][offset + 1] = odd ? g_u_s >> 4 : b_v >> 4;
+		buf[1][offset] = odd ? r_y_h << 4 : g_u_s << 4;
+		buf[1][offset + 1] = odd ? r_y_h >> 4 : g_u_s >> 4;
 		buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
 		buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
 		break;
 	case V4L2_PIX_FMT_SGBRG12:
-		buf[0][offset] = odd ? b_v << 4 : g_u << 4;
-		buf[0][offset + 1] = odd ? b_v >> 4 : g_u >> 4;
-		buf[1][offset] = odd ? g_u << 4 : r_y << 4;
-		buf[1][offset + 1] = odd ? g_u >> 4 : r_y >> 4;
+		buf[0][offset] = odd ? b_v << 4 : g_u_s << 4;
+		buf[0][offset + 1] = odd ? b_v >> 4 : g_u_s >> 4;
+		buf[1][offset] = odd ? g_u_s << 4 : r_y_h << 4;
+		buf[1][offset + 1] = odd ? g_u_s >> 4 : r_y_h >> 4;
 		buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
 		buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
 		break;
 	case V4L2_PIX_FMT_SGRBG12:
-		buf[0][offset] = odd ? r_y << 4 : g_u << 4;
-		buf[0][offset + 1] = odd ? r_y >> 4 : g_u >> 4;
-		buf[1][offset] = odd ? g_u << 4 : b_v << 4;
-		buf[1][offset + 1] = odd ? g_u >> 4 : b_v >> 4;
+		buf[0][offset] = odd ? r_y_h << 4 : g_u_s << 4;
+		buf[0][offset + 1] = odd ? r_y_h >> 4 : g_u_s >> 4;
+		buf[1][offset] = odd ? g_u_s << 4 : b_v << 4;
+		buf[1][offset + 1] = odd ? g_u_s >> 4 : b_v >> 4;
 		buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
 		buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
 		break;
 	case V4L2_PIX_FMT_SRGGB12:
-		buf[0][offset] = odd ? g_u << 4 : r_y << 4;
-		buf[0][offset + 1] = odd ? g_u >> 4 : r_y >> 4;
-		buf[1][offset] = odd ? b_v << 4 : g_u << 4;
-		buf[1][offset + 1] = odd ? b_v >> 4 : g_u >> 4;
+		buf[0][offset] = odd ? g_u_s << 4 : r_y_h << 4;
+		buf[0][offset + 1] = odd ? g_u_s >> 4 : r_y_h >> 4;
+		buf[1][offset] = odd ? b_v << 4 : g_u_s << 4;
+		buf[1][offset + 1] = odd ? b_v >> 4 : g_u_s >> 4;
 		buf[0][offset] |= (buf[0][offset] >> 4) & 0xf;
 		buf[1][offset] |= (buf[1][offset] >> 4) & 0xf;
 		break;
-- 
2.8.1

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/6] [media] Documentation: Add HSV format
  2016-07-15 15:16 ` [PATCH 2/6] [media] Documentation: Add HSV format Ricardo Ribalda Delgado
@ 2016-07-15 15:28   ` Mauro Carvalho Chehab
  2016-07-15 15:36     ` Ricardo Ribalda Delgado
  0 siblings, 1 reply; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2016-07-15 15:28 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado
  Cc: Hans Verkuil, Laurent Pinchart, Sakari Ailus, Antti Palosaari,
	Guennadi Liakhovetski, Helen Mae Koike Fornazier, Philipp Zabel,
	Shuah Khan, linux-media, linux-kernel

Hi Ricardo,

I'm not seeing patch 1.

Anyway, please send documentation patches against the rst files. They're
at the "docs-next" branch and will be merged upstream on this merge window.

After its merge, we'll drop the DocBook.

Thanks,
Mauro

Em Fri, 15 Jul 2016 17:16:52 +0200
Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> escreveu:

> Describe the HSV formats.
> 
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> ---
>  .../DocBook/media/v4l/pixfmt-packed-hsv.xml        | 195 +++++++++++++++++++++
>  Documentation/DocBook/media/v4l/pixfmt.xml         |  13 ++
>  Documentation/DocBook/media/v4l/v4l2.xml           |   8 +
>  3 files changed, 216 insertions(+)
>  create mode 100644 Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml
> 
> diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml
> new file mode 100644
> index 000000000000..3b41d567e32b
> --- /dev/null
> +++ b/Documentation/DocBook/media/v4l/pixfmt-packed-hsv.xml
> @@ -0,0 +1,195 @@
> +<refentry id="packed-hsv">
> +  <refmeta>
> +    <refentrytitle>Packed HSV formats</refentrytitle>
> +    &manvol;
> +  </refmeta>
> +  <refnamediv>
> +    <refname>Packed HSV formats</refname>
> +    <refpurpose>Packed HSV formats</refpurpose>
> +  </refnamediv>
> +  <refsect1>
> +    <title>Description</title>
> +
> +    <para>The HUE (h) is meassured in degrees, one LSB represents two
> +degrees. The SATURATION (s) and the VALUE (v) are meassured in percentage
> +of the cylinder: 0 being the smallest value and 255 the maximum.</para>
> +    <para>The values are packed in 24 or 32 bit formats. </para>
> +
> +    <table pgwide="1" frame="none">
> +      <title>Packed YUV Image Formats</title>
> +      <tgroup cols="37" align="center">
> +	<colspec colname="id" align="left" />
> +	<colspec colname="fourcc" />
> +	<colspec colname="bit" />
> +
> +	<colspec colnum="4" colname="b07" align="center" />
> +	<colspec colnum="5" colname="b06" align="center" />
> +	<colspec colnum="6" colname="b05" align="center" />
> +	<colspec colnum="7" colname="b04" align="center" />
> +	<colspec colnum="8" colname="b03" align="center" />
> +	<colspec colnum="9" colname="b02" align="center" />
> +	<colspec colnum="10" colname="b01" align="center" />
> +	<colspec colnum="11" colname="b00" align="center" />
> +
> +	<colspec colnum="13" colname="b17" align="center" />
> +	<colspec colnum="14" colname="b16" align="center" />
> +	<colspec colnum="15" colname="b15" align="center" />
> +	<colspec colnum="16" colname="b14" align="center" />
> +	<colspec colnum="17" colname="b13" align="center" />
> +	<colspec colnum="18" colname="b12" align="center" />
> +	<colspec colnum="19" colname="b11" align="center" />
> +	<colspec colnum="20" colname="b10" align="center" />
> +
> +	<colspec colnum="22" colname="b27" align="center" />
> +	<colspec colnum="23" colname="b26" align="center" />
> +	<colspec colnum="24" colname="b25" align="center" />
> +	<colspec colnum="25" colname="b24" align="center" />
> +	<colspec colnum="26" colname="b23" align="center" />
> +	<colspec colnum="27" colname="b22" align="center" />
> +	<colspec colnum="28" colname="b21" align="center" />
> +	<colspec colnum="29" colname="b20" align="center" />
> +
> +	<colspec colnum="31" colname="b37" align="center" />
> +	<colspec colnum="32" colname="b36" align="center" />
> +	<colspec colnum="33" colname="b35" align="center" />
> +	<colspec colnum="34" colname="b34" align="center" />
> +	<colspec colnum="35" colname="b33" align="center" />
> +	<colspec colnum="36" colname="b32" align="center" />
> +	<colspec colnum="37" colname="b31" align="center" />
> +	<colspec colnum="38" colname="b30" align="center" />
> +
> +	<spanspec namest="b07" nameend="b00" spanname="b0" />
> +	<spanspec namest="b17" nameend="b10" spanname="b1" />
> +	<spanspec namest="b27" nameend="b20" spanname="b2" />
> +	<spanspec namest="b37" nameend="b30" spanname="b3" />
> +	<thead>
> +	  <row>
> +	    <entry>Identifier</entry>
> +	    <entry>Code</entry>
> +	    <entry>&nbsp;</entry>
> +	    <entry spanname="b0">Byte&nbsp;0 in memory</entry>
> +	    <entry spanname="b1">Byte&nbsp;1</entry>
> +	    <entry spanname="b2">Byte&nbsp;2</entry>
> +	    <entry spanname="b3">Byte&nbsp;3</entry>
> +	  </row>
> +	  <row>
> +	    <entry>&nbsp;</entry>
> +	    <entry>&nbsp;</entry>
> +	    <entry>Bit</entry>
> +	    <entry>7</entry>
> +	    <entry>6</entry>
> +	    <entry>5</entry>
> +	    <entry>4</entry>
> +	    <entry>3</entry>
> +	    <entry>2</entry>
> +	    <entry>1</entry>
> +	    <entry>0</entry>
> +	    <entry>&nbsp;</entry>
> +	    <entry>7</entry>
> +	    <entry>6</entry>
> +	    <entry>5</entry>
> +	    <entry>4</entry>
> +	    <entry>3</entry>
> +	    <entry>2</entry>
> +	    <entry>1</entry>
> +	    <entry>0</entry>
> +	    <entry>&nbsp;</entry>
> +	    <entry>7</entry>
> +	    <entry>6</entry>
> +	    <entry>5</entry>
> +	    <entry>4</entry>
> +	    <entry>3</entry>
> +	    <entry>2</entry>
> +	    <entry>1</entry>
> +	    <entry>0</entry>
> +	    <entry>&nbsp;</entry>
> +	    <entry>7</entry>
> +	    <entry>6</entry>
> +	    <entry>5</entry>
> +	    <entry>4</entry>
> +	    <entry>3</entry>
> +	    <entry>2</entry>
> +	    <entry>1</entry>
> +	    <entry>0</entry>
> +	  </row>
> +	</thead>
> +	<tbody valign="top">
> +	  <row id="V4L2-PIX-FMT-HSV32">
> +	    <entry><constant>V4L2_PIX_FMT_HSV32</constant></entry>
> +	    <entry>'HSV4'</entry>
> +	    <entry></entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry>-</entry>
> +	    <entry></entry>
> +	    <entry>h<subscript>7</subscript></entry>
> +	    <entry>h<subscript>6</subscript></entry>
> +	    <entry>h<subscript>5</subscript></entry>
> +	    <entry>h<subscript>4</subscript></entry>
> +	    <entry>h<subscript>3</subscript></entry>
> +	    <entry>h<subscript>2</subscript></entry>
> +	    <entry>h<subscript>1</subscript></entry>
> +	    <entry>h<subscript>0</subscript></entry>
> +	    <entry></entry>
> +	    <entry>s<subscript>7</subscript></entry>
> +	    <entry>s<subscript>6</subscript></entry>
> +	    <entry>s<subscript>5</subscript></entry>
> +	    <entry>s<subscript>4</subscript></entry>
> +	    <entry>s<subscript>3</subscript></entry>
> +	    <entry>s<subscript>2</subscript></entry>
> +	    <entry>s<subscript>1</subscript></entry>
> +	    <entry>s<subscript>0</subscript></entry>
> +	    <entry></entry>
> +	    <entry>v<subscript>7</subscript></entry>
> +	    <entry>v<subscript>6</subscript></entry>
> +	    <entry>v<subscript>5</subscript></entry>
> +	    <entry>v<subscript>4</subscript></entry>
> +	    <entry>v<subscript>3</subscript></entry>
> +	    <entry>v<subscript>2</subscript></entry>
> +	    <entry>v<subscript>1</subscript></entry>
> +	    <entry>v<subscript>0</subscript></entry>
> +	  </row>
> +	  <row id="V4L2-PIX-FMT-HSV24">
> +	    <entry><constant>V4L2_PIX_FMT_HSV24</constant></entry>
> +	    <entry>'HSV3'</entry>
> +	    <entry></entry>
> +	    <entry>h<subscript>7</subscript></entry>
> +	    <entry>h<subscript>6</subscript></entry>
> +	    <entry>h<subscript>5</subscript></entry>
> +	    <entry>h<subscript>4</subscript></entry>
> +	    <entry>h<subscript>3</subscript></entry>
> +	    <entry>h<subscript>2</subscript></entry>
> +	    <entry>h<subscript>1</subscript></entry>
> +	    <entry>h<subscript>0</subscript></entry>
> +	    <entry></entry>
> +	    <entry>s<subscript>7</subscript></entry>
> +	    <entry>s<subscript>6</subscript></entry>
> +	    <entry>s<subscript>5</subscript></entry>
> +	    <entry>s<subscript>4</subscript></entry>
> +	    <entry>s<subscript>3</subscript></entry>
> +	    <entry>s<subscript>2</subscript></entry>
> +	    <entry>s<subscript>1</subscript></entry>
> +	    <entry>s<subscript>0</subscript></entry>
> +	    <entry></entry>
> +	    <entry>v<subscript>7</subscript></entry>
> +	    <entry>v<subscript>6</subscript></entry>
> +	    <entry>v<subscript>5</subscript></entry>
> +	    <entry>v<subscript>4</subscript></entry>
> +	    <entry>v<subscript>3</subscript></entry>
> +	    <entry>v<subscript>2</subscript></entry>
> +	    <entry>v<subscript>1</subscript></entry>
> +	    <entry>v<subscript>0</subscript></entry>
> +	  </row>
> +	</tbody>
> +      </tgroup>
> +    </table>
> +
> +    <para>Bit 7 is the most significant bit.</para>
> +
> +  </refsect1>
> +    </refentry>
> diff --git a/Documentation/DocBook/media/v4l/pixfmt.xml b/Documentation/DocBook/media/v4l/pixfmt.xml
> index 5a08aeea4360..7b081a6bdc61 100644
> --- a/Documentation/DocBook/media/v4l/pixfmt.xml
> +++ b/Documentation/DocBook/media/v4l/pixfmt.xml
> @@ -1740,6 +1740,19 @@ extended control <constant>V4L2_CID_MPEG_STREAM_TYPE</constant>, see
>      </table>
>    </section>
>  
> +  <section id="hsv-formats">
> +    <title>HSV Formats</title>
> +
> +    <para> These formats store the color information of the image
> +in a geometrical representation. The colors are mapped into a
> +cylinder, where the angle is the HUE, the height is the VALUE
> +and the distance to the center is the SATURATION. This is a very
> +useful format for image segmentation algorithms. </para>
> +
> +    &packed-hsv;
> +
> +  </section>
> +
>    <section id="sdr-formats">
>      <title>SDR Formats</title>
>  
> diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml
> index 42e626d6c936..f38039b7c338 100644
> --- a/Documentation/DocBook/media/v4l/v4l2.xml
> +++ b/Documentation/DocBook/media/v4l/v4l2.xml
> @@ -152,6 +152,14 @@ structs, ioctls) must be noted in more detail in the history chapter
>  (compat.xml), along with the possible impact on existing drivers and
>  applications. -->
>        <revision>
> +	<revnumber>4.8</revnumber>
> +	<date>2016-07-15</date>
> +	<authorinitials>rr</authorinitials>
> +	<revremark> Introduce HSV formats.
> +	</revremark>
> +      </revision>
> +
> +      <revision>
>  	<revnumber>4.5</revnumber>
>  	<date>2015-10-29</date>
>  	<authorinitials>rr</authorinitials>


-- 
Thanks,
Mauro

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/6] [media] Documentation: Add HSV format
  2016-07-15 15:28   ` Mauro Carvalho Chehab
@ 2016-07-15 15:36     ` Ricardo Ribalda Delgado
  2016-07-15 15:53       ` Mauro Carvalho Chehab
  0 siblings, 1 reply; 10+ messages in thread
From: Ricardo Ribalda Delgado @ 2016-07-15 15:36 UTC (permalink / raw)
  To: Mauro Carvalho Chehab
  Cc: Hans Verkuil, Laurent Pinchart, Sakari Ailus, Antti Palosaari,
	Guennadi Liakhovetski, Helen Mae Koike Fornazier, Philipp Zabel,
	Shuah Khan, linux-media, LKML

Hi Mauro

On Fri, Jul 15, 2016 at 5:28 PM, Mauro Carvalho Chehab
<mchehab@osg.samsung.com> wrote:
> Hi Ricardo,
>
> I'm not seeing patch 1.

That is because you blacklisted me :P
https://lkml.org/lkml/2016/7/15/455

I resend it to you right away.


>
> Anyway, please send documentation patches against the rst files. They're
> at the "docs-next" branch and will be merged upstream on this merge window.
>

you are absolutely right, I read about it in lwn. Sorry about that.


How do you prefer it:
- 2 patchset : One on top of media/master with the code changes, and
one on top of docs-next with the doc changes.
or
-1 patchset on top of doc-next and we will figure out later if there
is a merge conflict with media

Thanks!

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH 2/6] [media] Documentation: Add HSV format
  2016-07-15 15:36     ` Ricardo Ribalda Delgado
@ 2016-07-15 15:53       ` Mauro Carvalho Chehab
  0 siblings, 0 replies; 10+ messages in thread
From: Mauro Carvalho Chehab @ 2016-07-15 15:53 UTC (permalink / raw)
  To: Ricardo Ribalda Delgado
  Cc: Hans Verkuil, Laurent Pinchart, Sakari Ailus, Antti Palosaari,
	Guennadi Liakhovetski, Helen Mae Koike Fornazier, Philipp Zabel,
	Shuah Khan, linux-media, LKML

Em Fri, 15 Jul 2016 17:36:15 +0200
Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> escreveu:

> Hi Mauro
> 
> On Fri, Jul 15, 2016 at 5:28 PM, Mauro Carvalho Chehab
> <mchehab@osg.samsung.com> wrote:
> > Hi Ricardo,
> >
> > I'm not seeing patch 1.  
> 
> That is because you blacklisted me :P
> https://lkml.org/lkml/2016/7/15/45
> 
> I resend it to you right away.

Thanks.

> >
> > Anyway, please send documentation patches against the rst files. They're
> > at the "docs-next" branch and will be merged upstream on this merge window.
> >  
> 
> you are absolutely right, I read about it in lwn. Sorry about that.
> 
> 
> How do you prefer it:
> - 2 patchset : One on top of media/master with the code changes, and
> one on top of docs-next with the doc changes.
> or
> -1 patchset on top of doc-next and we will figure out later if there
> is a merge conflict with media

IMHO, the best would be to wait for it to be merged. I'm finishing
handling patches for 4.7 in a few, and applying only on more trivial
patches and bug fixes.

Yet, I suspect that there won't be conflicts if you base your
patches against docs-next, as most of the media stuff is merged
there.

Thanks,
Mauro

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2016-07-15 15:53 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-07-15 15:16 [PATCH 0/6] Add HSV format Ricardo Ribalda Delgado
2016-07-15 15:16 ` [PATCH 1/6] [media] videodev2.h Add HSV formats Ricardo Ribalda Delgado
2016-07-15 15:16 ` [PATCH 2/6] [media] Documentation: Add HSV format Ricardo Ribalda Delgado
2016-07-15 15:28   ` Mauro Carvalho Chehab
2016-07-15 15:36     ` Ricardo Ribalda Delgado
2016-07-15 15:53       ` Mauro Carvalho Chehab
2016-07-15 15:16 ` [PATCH 3/6] [media] Documentation: Add Ricardo Ribalda as author Ricardo Ribalda Delgado
2016-07-15 15:16 ` [PATCH 4/6] [media] vivid: code refactor for color representation Ricardo Ribalda Delgado
2016-07-15 15:16 ` [PATCH 5/6] [media] vivid: Add support for HSV formats Ricardo Ribalda Delgado
2016-07-15 15:16 ` [PATCH 6/6] [media] vivid: Rename variable Ricardo Ribalda Delgado

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).