linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/2] New fourcc codes needed by Video DMA Driver
@ 2017-08-09  1:31 Jeffrey Mouroux
  2017-08-09  1:31 ` [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP Jeffrey Mouroux
  2017-08-09  1:31 ` [PATCH v1 2/2] media: v4l2-core: Update V4L2 framework with new fourcc codes Jeffrey Mouroux
  0 siblings, 2 replies; 4+ messages in thread
From: Jeffrey Mouroux @ 2017-08-09  1:31 UTC (permalink / raw)
  To: mchehab, hansverk, laurent.pinchart+renesas, sakari.ailus,
	tiffany.lin, ricardo.ribalda, evgeni.raikhel, nick
  Cc: linux-media, Jeffrey Mouroux

This patch set is introduced to support a driver we are developing
for our new Video Framebuffer DMA IP, a DMA device that is "video format aware".
Clients need only specify memory layout information for a single plane
(i.e. luma) and then provide a video format code (e.g. YUV420) which will permit
for intelligent reads or writes (depending on the IP configuration) to host
memory with only a minimal set of video memory configuration data.

The IP supports a variety of 8-bit and 10-bit video formats, some of which
are not represented in the current V4L2 user api or framework.  This patch
set introduces these needed video format codes and updates the 
framework with the metadata required.

The DMA driver requiring these updates is not being submitted as part of this
patch set as it is still undergoing final development.

We are submitting this patch series for review and comment with regard to
ensuring we haven't missed any required framework updates and/or in regards to
the choices we've made to the fourcc string values.

Jeffrey Mouroux (2):
  uapi: media: New fourcc codes needed by Xilinx Video IP
  media: v4l2-core: Update V4L2 framework with new fourcc codes

 drivers/media/v4l2-core/v4l2-ioctl.c | 9 +++++++++
 include/uapi/linux/videodev2.h       | 9 +++++++++
 2 files changed, 18 insertions(+)

-- 
1.9.1

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

* [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP
  2017-08-09  1:31 [PATCH v1 0/2] New fourcc codes needed by Video DMA Driver Jeffrey Mouroux
@ 2017-08-09  1:31 ` Jeffrey Mouroux
  2017-08-09  7:53   ` Laurent Pinchart
  2017-08-09  1:31 ` [PATCH v1 2/2] media: v4l2-core: Update V4L2 framework with new fourcc codes Jeffrey Mouroux
  1 sibling, 1 reply; 4+ messages in thread
From: Jeffrey Mouroux @ 2017-08-09  1:31 UTC (permalink / raw)
  To: mchehab, hansverk, laurent.pinchart+renesas, sakari.ailus,
	tiffany.lin, ricardo.ribalda, evgeni.raikhel, nick
  Cc: linux-media, Jeffrey Mouroux

The Xilinx Video Mixer andn Xilinx Video Framebuffer DMA IP
support video memory formats that are not represented in the
current V4L2 fourcc library.  This patch adds those missing
fourcc codes.

Signed-off-by: Jeffrey Mouroux <jmouroux@xilinx.com>
---
 include/uapi/linux/videodev2.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 45cf735..a059439 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -509,6 +509,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32  RGB-8-8-8-8   */
 #define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2', '4') /* 32  ARGB-8-8-8-8  */
 #define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B', 'X', '2', '4') /* 32  XRGB-8-8-8-8  */
+#define V4L2_PIX_FMT_XBGR30  v4l2_fourcc('R', 'X', '3', '0') /* 32  XBGR-2-10-10-10 */
 
 /* Grey formats */
 #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8  Greyscale     */
@@ -536,12 +537,16 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */
 #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4', '4', '4') /* 16  xxxxyyyy uuuuvvvv */
+#define V4L2_PIX_FMT_XVUY32  v4l2_fourcc('X', 'V', '3', '2') /* 32  XVUY 8:8:8:8 */
+#define V4L2_PIX_FMT_AVUY32  v4l2_fourcc('A', 'V', '3', '2') /* 32  AVUY 8:8:8:8 */
+#define V4L2_PIX_FMT_VUY24   v4l2_fourcc('V', 'U', '2', '4') /* 24  VUY 8:8:8 */
 #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16  YUV-5-5-5     */
 #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V', 'P') /* 16  YUV-5-6-5     */
 #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y', 'U', 'V', '4') /* 32  YUV-8-8-8-8   */
 #define V4L2_PIX_FMT_HI240   v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */
 #define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
 #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0') /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */
+#define V4L2_PIX_FMT_XVUY10  v4l2_fourcc('X', 'Y', '1', '0') /* 32  XVUY 2-10-10-10 */
 
 /* two planes -- one Y, one Cr + Cb interleaved  */
 #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr 4:2:0  */
@@ -550,6 +555,8 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb 4:2:2  */
 #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /* 24  Y/CbCr 4:4:4  */
 #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V', '4', '2') /* 24  Y/CrCb 4:4:4  */
+#define V4L2_PIX_FMT_XV20    v4l2_fourcc('X', 'V', '2', '0') /* 32 XY/UV 4:2:2 10-bit */
+#define V4L2_PIX_FMT_XV15    v4l2_fourcc('X', 'V', '1', '5') /* 32 XY/UV 4:2:0 10-bit */
 
 /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
 #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr 4:2:0  */
@@ -557,6 +564,8 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr 4:2:2  */
 #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /* 16  Y/CrCb 4:2:2  */
 #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */
+#define V4L2_PIX_FMT_XV20M   v4l2_fourcc('X', 'M', '2', '0') /* 32 XY/UV 4:2:2 10-bit */
+#define V4L2_PIX_FMT_XV15M   v4l2_fourcc('X', 'M', '1', '5') /* 32 XY/UV 4:2:0 10-bit */
 #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
 
 /* three planes - Y Cb, Cr */
-- 
1.9.1

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

* [PATCH v1 2/2] media: v4l2-core: Update V4L2 framework with new fourcc codes
  2017-08-09  1:31 [PATCH v1 0/2] New fourcc codes needed by Video DMA Driver Jeffrey Mouroux
  2017-08-09  1:31 ` [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP Jeffrey Mouroux
@ 2017-08-09  1:31 ` Jeffrey Mouroux
  1 sibling, 0 replies; 4+ messages in thread
From: Jeffrey Mouroux @ 2017-08-09  1:31 UTC (permalink / raw)
  To: mchehab, hansverk, laurent.pinchart+renesas, sakari.ailus,
	tiffany.lin, ricardo.ribalda, evgeni.raikhel, nick
  Cc: linux-media, Jeffrey Mouroux

New fourcc codes have been added to support additional video
memory layout supported by Xilinx Video IP.  These have been
added to the V4L2 framework with this patch.

Signed-off-by: Jeffrey Mouroux <jmouroux@xilinx.com>
---
 drivers/media/v4l2-core/v4l2-ioctl.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index cab63bb..d3edb7e 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1136,6 +1136,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_RGB32:	descr = "32-bit A/XRGB 8-8-8-8"; break;
 	case V4L2_PIX_FMT_ARGB32:	descr = "32-bit ARGB 8-8-8-8"; break;
 	case V4L2_PIX_FMT_XRGB32:	descr = "32-bit XRGB 8-8-8-8"; break;
+	case V4L2_PIX_FMT_XBGR30:	descr = "32-bit XBGR 2-10-10-10"; break;
 	case V4L2_PIX_FMT_GREY:		descr = "8-bit Greyscale"; break;
 	case V4L2_PIX_FMT_Y4:		descr = "4-bit Greyscale"; break;
 	case V4L2_PIX_FMT_Y6:		descr = "6-bit Greyscale"; break;
@@ -1161,6 +1162,9 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_YUV411P:	descr = "Planar YUV 4:1:1"; break;
 	case V4L2_PIX_FMT_Y41P:		descr = "YUV 4:1:1 (Packed)"; break;
 	case V4L2_PIX_FMT_YUV444:	descr = "16-bit A/XYUV 4-4-4-4"; break;
+	case V4L2_PIX_FMT_XVUY32:	descr = "32-bit packed XVUY 8-8-8-8"; break;
+	case V4L2_PIX_FMT_AVUY32:	descr = "32-bit packed AVUY 8-8-8-8"; break;
+	case V4L2_PIX_FMT_VUY24:	descr = "24-bit packed VUY 8-8-8"; break;
 	case V4L2_PIX_FMT_YUV555:	descr = "16-bit A/XYUV 1-5-5-5"; break;
 	case V4L2_PIX_FMT_YUV565:	descr = "16-bit YUV 5-6-5"; break;
 	case V4L2_PIX_FMT_YUV32:	descr = "32-bit A/XYUV 8-8-8-8"; break;
@@ -1169,16 +1173,21 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_HI240:	descr = "8-bit Dithered RGB (BTTV)"; break;
 	case V4L2_PIX_FMT_HM12:		descr = "YUV 4:2:0 (16x16 Macroblocks)"; break;
 	case V4L2_PIX_FMT_M420:		descr = "YUV 4:2:0 (M420)"; break;
+	case V4L2_PIX_FMT_XVUY10:	descr = "XVUY 2-10-10-10"; break;
 	case V4L2_PIX_FMT_NV12:		descr = "Y/CbCr 4:2:0"; break;
 	case V4L2_PIX_FMT_NV21:		descr = "Y/CrCb 4:2:0"; break;
 	case V4L2_PIX_FMT_NV16:		descr = "Y/CbCr 4:2:2"; break;
 	case V4L2_PIX_FMT_NV61:		descr = "Y/CrCb 4:2:2"; break;
 	case V4L2_PIX_FMT_NV24:		descr = "Y/CbCr 4:4:4"; break;
 	case V4L2_PIX_FMT_NV42:		descr = "Y/CrCb 4:4:4"; break;
+	case V4L2_PIX_FMT_XV20:		descr = "Y/CrCb 4:2:2 10-bit w/padding"; break;
+	case V4L2_PIX_FMT_XV15:		descr = "Y/CrCb 4:2:0 10-bit w/padding"; break;
 	case V4L2_PIX_FMT_NV12M:	descr = "Y/CbCr 4:2:0 (N-C)"; break;
 	case V4L2_PIX_FMT_NV21M:	descr = "Y/CrCb 4:2:0 (N-C)"; break;
 	case V4L2_PIX_FMT_NV16M:	descr = "Y/CbCr 4:2:2 (N-C)"; break;
 	case V4L2_PIX_FMT_NV61M:	descr = "Y/CrCb 4:2:2 (N-C)"; break;
+	case V4L2_PIX_FMT_XV20M:	descr = "Y/CrCb 4:2:2 (N-C) 10-bit w/padding"; break;
+	case V4L2_PIX_FMT_XV15M:	descr = "Y/CrCb 4:2:0 (N-C) 10-bit w/padding"; break;
 	case V4L2_PIX_FMT_NV12MT:	descr = "Y/CbCr 4:2:0 (64x32 MB, N-C)"; break;
 	case V4L2_PIX_FMT_NV12MT_16X16:	descr = "Y/CbCr 4:2:0 (16x16 MB, N-C)"; break;
 	case V4L2_PIX_FMT_YUV420M:	descr = "Planar YUV 4:2:0 (N-C)"; break;
-- 
1.9.1

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

* Re: [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP
  2017-08-09  1:31 ` [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP Jeffrey Mouroux
@ 2017-08-09  7:53   ` Laurent Pinchart
  0 siblings, 0 replies; 4+ messages in thread
From: Laurent Pinchart @ 2017-08-09  7:53 UTC (permalink / raw)
  To: Jeffrey Mouroux
  Cc: mchehab, hansverk, laurent.pinchart+renesas, sakari.ailus,
	tiffany.lin, ricardo.ribalda, evgeni.raikhel, nick, linux-media,
	Jeffrey Mouroux

Hi Jeffrey,

Thank you for the patch.

On Tuesday 08 Aug 2017 18:31:17 Jeffrey Mouroux wrote:
> The Xilinx Video Mixer andn Xilinx Video Framebuffer DMA IP
> support video memory formats that are not represented in the
> current V4L2 fourcc library.  This patch adds those missing
> fourcc codes.

Could you please also document the new formats in 
Documentation/media/uapi/v4l/ ? You can have a look at pixfmt-*.rst for 
examples. Please make sure that the documentation compiles without any error 
("make htmldocs") before submitting the patch.

> Signed-off-by: Jeffrey Mouroux <jmouroux@xilinx.com>
> ---
>  include/uapi/linux/videodev2.h | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 45cf735..a059439 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -509,6 +509,7 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_RGB32   v4l2_fourcc('R', 'G', 'B', '4') /* 32 
> RGB-8-8-8-8   */ #define V4L2_PIX_FMT_ARGB32  v4l2_fourcc('B', 'A', '2',
> '4') /* 32  ARGB-8-8-8-8  */ #define V4L2_PIX_FMT_XRGB32  v4l2_fourcc('B',
> 'X', '2', '4') /* 32  XRGB-8-8-8-8  */ +#define V4L2_PIX_FMT_XBGR30 
> v4l2_fourcc('R', 'X', '3', '0') /* 32  XBGR-2-10-10-10 */
> 
>  /* Grey formats */
>  #define V4L2_PIX_FMT_GREY    v4l2_fourcc('G', 'R', 'E', 'Y') /*  8 
> Greyscale     */ @@ -536,12 +537,16 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV
> 4:2:2     */ #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P')
> /* 12  YUV 4:1:1     */ #define V4L2_PIX_FMT_YUV444  v4l2_fourcc('Y', '4',
> '4', '4') /* 16  xxxxyyyy uuuuvvvv */ +#define V4L2_PIX_FMT_XVUY32 
> v4l2_fourcc('X', 'V', '3', '2') /* 32  XVUY 8:8:8:8 */ +#define
> V4L2_PIX_FMT_AVUY32  v4l2_fourcc('A', 'V', '3', '2') /* 32  AVUY 8:8:8:8 */
> +#define V4L2_PIX_FMT_VUY24   v4l2_fourcc('V', 'U', '2', '4') /* 24  VUY
> 8:8:8 */ #define V4L2_PIX_FMT_YUV555  v4l2_fourcc('Y', 'U', 'V', 'O') /* 16
>  YUV-5-5-5     */ #define V4L2_PIX_FMT_YUV565  v4l2_fourcc('Y', 'U', 'V',
> 'P') /* 16  YUV-5-6-5     */ #define V4L2_PIX_FMT_YUV32   v4l2_fourcc('Y',
> 'U', 'V', '4') /* 32  YUV-8-8-8-8   */ #define V4L2_PIX_FMT_HI240  
> v4l2_fourcc('H', 'I', '2', '4') /*  8  8-bit color   */ #define
> V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16
> macroblocks */ #define V4L2_PIX_FMT_M420    v4l2_fourcc('M', '4', '2', '0')
> /* 12  YUV 4:2:0 2 lines y, 1 line uv interleaved */ +#define
> V4L2_PIX_FMT_XVUY10  v4l2_fourcc('X', 'Y', '1', '0') /* 32  XVUY 2-10-10-10
> */
> 
>  /* two planes -- one Y, one Cr + Cb interleaved  */
>  #define V4L2_PIX_FMT_NV12    v4l2_fourcc('N', 'V', '1', '2') /* 12  Y/CbCr
> 4:2:0  */ @@ -550,6 +555,8 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_NV61    v4l2_fourcc('N', 'V', '6', '1') /* 16  Y/CrCb
> 4:2:2  */ #define V4L2_PIX_FMT_NV24    v4l2_fourcc('N', 'V', '2', '4') /*
> 24  Y/CbCr 4:4:4  */ #define V4L2_PIX_FMT_NV42    v4l2_fourcc('N', 'V',
> '4', '2') /* 24  Y/CrCb 4:4:4  */ +#define V4L2_PIX_FMT_XV20   
> v4l2_fourcc('X', 'V', '2', '0') /* 32 XY/UV 4:2:2 10-bit */ +#define
> V4L2_PIX_FMT_XV15    v4l2_fourcc('X', 'V', '1', '5') /* 32 XY/UV 4:2:0
> 10-bit */
> 
>  /* two non contiguous planes - one Y, one Cr + Cb interleaved  */
>  #define V4L2_PIX_FMT_NV12M   v4l2_fourcc('N', 'M', '1', '2') /* 12  Y/CbCr
> 4:2:0  */ @@ -557,6 +564,8 @@ struct v4l2_pix_format {
>  #define V4L2_PIX_FMT_NV16M   v4l2_fourcc('N', 'M', '1', '6') /* 16  Y/CbCr
> 4:2:2  */ #define V4L2_PIX_FMT_NV61M   v4l2_fourcc('N', 'M', '6', '1') /*
> 16  Y/CrCb 4:2:2  */ #define V4L2_PIX_FMT_NV12MT  v4l2_fourcc('T', 'M',
> '1', '2') /* 12  Y/CbCr 4:2:0 64x32 macroblocks */ +#define
> V4L2_PIX_FMT_XV20M   v4l2_fourcc('X', 'M', '2', '0') /* 32 XY/UV 4:2:2
> 10-bit */ +#define V4L2_PIX_FMT_XV15M   v4l2_fourcc('X', 'M', '1', '5') /*
> 32 XY/UV 4:2:0 10-bit */ #define V4L2_PIX_FMT_NV12MT_16X16 v4l2_fourcc('V',
> 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 macroblocks */
> 
>  /* three planes - Y Cb, Cr */

-- 
Regards,

Laurent Pinchart

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

end of thread, other threads:[~2017-08-09  7:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-09  1:31 [PATCH v1 0/2] New fourcc codes needed by Video DMA Driver Jeffrey Mouroux
2017-08-09  1:31 ` [PATCH v1 1/2] uapi: media: New fourcc codes needed by Xilinx Video IP Jeffrey Mouroux
2017-08-09  7:53   ` Laurent Pinchart
2017-08-09  1:31 ` [PATCH v1 2/2] media: v4l2-core: Update V4L2 framework with new fourcc codes Jeffrey Mouroux

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).