diff mbox series

[v2,2/4] media: Rename V4L2_PIX_FMT_HM12 to V4L2_PIX_FMT_NV12_16L16

Message ID 20210727145745.25203-3-ezequiel@collabora.com
State Accepted
Commit 78eee7b5f110c9884c8ffd1dfcdd9c29296f3e43
Headers show
Series media: visiting YUV tiled formats | expand

Commit Message

Ezequiel Garcia July 27, 2021, 2:57 p.m. UTC
The V4L2_PIX_FMT_HM12 format is actually a simple NV12 tiled format,
with 16x16 linear tiles. Rename the format and move its documentation
together with the other tiled NV12 formats.

Keep V4L2_PIX_FMT_HM12 for application compatibility.

Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
---
 Documentation/admin-guide/media/ivtv.rst               |  2 +-
 .../userspace-api/media/drivers/cx2341x-uapi.rst       |  8 +++-----
 .../userspace-api/media/v4l/pixfmt-reserved.rst        |  8 --------
 .../userspace-api/media/v4l/pixfmt-yuv-planar.rst      |  6 ++++++
 drivers/media/pci/cx18/cx18-ioctl.c                    |  4 ++--
 drivers/media/pci/cx18/cx18-streams.c                  |  8 ++++----
 drivers/media/pci/ivtv/ivtv-ioctl.c                    |  8 ++++----
 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c     | 10 +++++-----
 drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h     |  2 +-
 drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c   |  2 +-
 drivers/media/v4l2-core/v4l2-ioctl.c                   |  2 +-
 include/uapi/linux/videodev2.h                         |  3 ++-
 12 files changed, 30 insertions(+), 33 deletions(-)

Comments

Hans Verkuil Aug. 4, 2021, 10:03 a.m. UTC | #1
Hi Ezequiel,

The same comments as for the previous patch apply here as well.

I also think it will be good if v4l-utils is updated to use the new define
rather than V4L2_PIX_FMT_HM12. A patch changing that would be useful.

Regards,

	Hans

On 27/07/2021 16:57, Ezequiel Garcia wrote:
> The V4L2_PIX_FMT_HM12 format is actually a simple NV12 tiled format,

> with 16x16 linear tiles. Rename the format and move its documentation

> together with the other tiled NV12 formats.

> 

> Keep V4L2_PIX_FMT_HM12 for application compatibility.

> 

> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>

> ---

>  Documentation/admin-guide/media/ivtv.rst               |  2 +-

>  .../userspace-api/media/drivers/cx2341x-uapi.rst       |  8 +++-----

>  .../userspace-api/media/v4l/pixfmt-reserved.rst        |  8 --------

>  .../userspace-api/media/v4l/pixfmt-yuv-planar.rst      |  6 ++++++

>  drivers/media/pci/cx18/cx18-ioctl.c                    |  4 ++--

>  drivers/media/pci/cx18/cx18-streams.c                  |  8 ++++----

>  drivers/media/pci/ivtv/ivtv-ioctl.c                    |  8 ++++----

>  drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c     | 10 +++++-----

>  drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h     |  2 +-

>  drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c   |  2 +-

>  drivers/media/v4l2-core/v4l2-ioctl.c                   |  2 +-

>  include/uapi/linux/videodev2.h                         |  3 ++-

>  12 files changed, 30 insertions(+), 33 deletions(-)

> 

> diff --git a/Documentation/admin-guide/media/ivtv.rst b/Documentation/admin-guide/media/ivtv.rst

> index 7b8775d20214..101f16d0263e 100644

> --- a/Documentation/admin-guide/media/ivtv.rst

> +++ b/Documentation/admin-guide/media/ivtv.rst

> @@ -159,7 +159,7 @@ whatever). Otherwise the device numbers can get confusing. The ivtv

>    Read-only

>  

>    The raw YUV video output from the current video input. The YUV format

> -  is non-standard (V4L2_PIX_FMT_HM12).

> +  is a 16x16 linear tiled NV12 format (V4L2_PIX_FMT_NV12_16L16)

>  

>    Note that the YUV and PCM streams are not synchronized, so they are of

>    limited use.

> diff --git a/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst b/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst

> index 8a7977af79d5..debde65fb8cd 100644

> --- a/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst

> +++ b/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst

> @@ -7,9 +7,7 @@ Non-compressed file format

>  --------------------------

>  

>  The cx23416 can produce (and the cx23415 can also read) raw YUV output. The

> -format of a YUV frame is specific to this chip and is called HM12. 'HM' stands

> -for 'Hauppauge Macroblock', which is a misnomer as 'Conexant Macroblock' would

> -be more accurate.

> +format of a YUV frame is 16x16 linear tiled NV12 (V4L2_PIX_FMT_NV12_16L16).

>  

>  The format is YUV 4:2:0 which uses 1 Y byte per pixel and 1 U and V byte per

>  four pixels.

> @@ -34,8 +32,8 @@ second line of 8 UV pairs of the top-left block, etc. After transmitting

>  this block the first line of the block on the right to the first block is

>  transmitted, etc.

>  

> -The code below is given as an example on how to convert HM12 to separate

> -Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.

> +The code below is given as an example on how to convert V4L2_PIX_FMT_NV12_16L16

> +to separate Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.

>  

>  The width of a frame is always 720 pixels, regardless of the actual specified

>  width.

> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst

> index e762f911737a..adcad9454175 100644

> --- a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst

> +++ b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst

> @@ -48,14 +48,6 @@ please make a proposal on the linux-media mailing list.

>        - ``V4L2_PIX_FMT_HI240``

>        - 'HI24'

>        - 8 bit RGB format used by the BTTV driver.

> -    * .. _V4L2-PIX-FMT-HM12:

> -

> -      - ``V4L2_PIX_FMT_HM12``

> -      - 'HM12'

> -      - YUV 4:2:0 format used by the IVTV driver.

> -

> -	The format is documented in the kernel sources in the file

> -	``Documentation/userspace-api/media/drivers/cx2341x-uapi.rst``

>      * .. _V4L2-PIX-FMT-CPIA1:

>  

>        - ``V4L2_PIX_FMT_CPIA1``

> diff --git a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst

> index edeaf7628b28..884828f2272c 100644

> --- a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst

> +++ b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst

> @@ -254,6 +254,7 @@ of the luma plane.

>  

>  .. _V4L2-PIX-FMT-NV12MT:

>  .. _V4L2-PIX-FMT-NV12MT-16X16:

> +.. _V4L2-PIX-FMT-NV12-16L16:

>  .. _V4L2-PIX-FMT-NV12-32L32:

>  

>  Tiled NV12

> @@ -278,6 +279,11 @@ If the vertical resolution is an odd number of macroblocks, the last row of

>  macroblocks is stored in linear order. The layouts of the luma and chroma

>  planes are identical.

>  

> +``V4L2_PIX_FMT_NV12_16L16`` stores pixel in 16x16 tiles, and stores

> +tiles linearly in memory. The line stride and image height must be

> +aligned to a multiple of 16. The layouts of the luma and chroma planes are

> +identical.

> +

>  ``V4L2_PIX_FMT_NV12_32L32`` stores pixel in 32x32 tiles, and stores

>  tiles linearly in memory. The line stride and image height must be

>  aligned to a multiple of 32. The layouts of the luma and chroma planes are

> diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c

> index 4864def20676..ce3f0141f94e 100644

> --- a/drivers/media/pci/cx18/cx18-ioctl.c

> +++ b/drivers/media/pci/cx18/cx18-ioctl.c

> @@ -276,7 +276,7 @@ static int cx18_s_fmt_vid_cap(struct file *file, void *fh,

>  	s->pixelformat = fmt->fmt.pix.pixelformat;

>  	/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))

>  	   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */

> -	if (s->pixelformat == V4L2_PIX_FMT_HM12) {

> +	if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16) {

>  		s->vb_bytes_per_frame = h * 720 * 3 / 2;

>  		s->vb_bytes_per_line = 720; /* First plane */

>  	} else {

> @@ -470,7 +470,7 @@ static int cx18_enum_fmt_vid_cap(struct file *file, void *fh,

>  			.index = 0,

>  			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,

>  			.description = "HM12 (YUV 4:1:1)",

> -			.pixelformat = V4L2_PIX_FMT_HM12,

> +			.pixelformat = V4L2_PIX_FMT_NV12_16L16,

>  		},

>  		{

>  			.index = 1,

> diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c

> index c41bae118415..16d37ab48906 100644

> --- a/drivers/media/pci/cx18/cx18-streams.c

> +++ b/drivers/media/pci/cx18/cx18-streams.c

> @@ -133,7 +133,7 @@ static int cx18_prepare_buffer(struct videobuf_queue *q,

>  

>  		/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))

>  		   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */

> -		if (s->pixelformat == V4L2_PIX_FMT_HM12)

> +		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)

>  			s->vb_bytes_per_frame = height * 720 * 3 / 2;

>  		else

>  			s->vb_bytes_per_frame = height * 720 * 2;

> @@ -155,7 +155,7 @@ static int cx18_prepare_buffer(struct videobuf_queue *q,

>  

>  		/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))

>  		   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */

> -		if (s->pixelformat == V4L2_PIX_FMT_HM12)

> +		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)

>  			s->vb_bytes_per_frame = height * 720 * 3 / 2;

>  		else

>  			s->vb_bytes_per_frame = height * 720 * 2;

> @@ -287,7 +287,7 @@ static void cx18_stream_init(struct cx18 *cx, int type)

>  			s, &cx->serialize_lock);

>  

>  		/* Assume the previous pixel default */

> -		s->pixelformat = V4L2_PIX_FMT_HM12;

> +		s->pixelformat = V4L2_PIX_FMT_NV12_16L16;

>  		s->vb_bytes_per_frame = cx->cxhdl.height * 720 * 3 / 2;

>  		s->vb_bytes_per_line = 720;

>  	}

> @@ -733,7 +733,7 @@ static void cx18_stream_configure_mdls(struct cx18_stream *s)

>  		 * Set the MDL size to the exact size needed for one frame.

>  		 * Use enough buffers per MDL to cover the MDL size

>  		 */

> -		if (s->pixelformat == V4L2_PIX_FMT_HM12)

> +		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)

>  			s->mdl_size = 720 * s->cx->cxhdl.height * 3 / 2;

>  		else

>  			s->mdl_size = 720 * s->cx->cxhdl.height * 2;

> diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c

> index da19b2e95e6c..0cdf6b3210c2 100644

> --- a/drivers/media/pci/ivtv/ivtv-ioctl.c

> +++ b/drivers/media/pci/ivtv/ivtv-ioctl.c

> @@ -339,7 +339,7 @@ static int ivtv_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f

>  	pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M;

>  	pixfmt->field = V4L2_FIELD_INTERLACED;

>  	if (id->type == IVTV_ENC_STREAM_TYPE_YUV) {

> -		pixfmt->pixelformat = V4L2_PIX_FMT_HM12;

> +		pixfmt->pixelformat = V4L2_PIX_FMT_NV12_16L16;

>  		/* YUV size is (Y=(h*720) + UV=(h*(720/2))) */

>  		pixfmt->sizeimage = pixfmt->height * 720 * 3 / 2;

>  		pixfmt->bytesperline = 720;

> @@ -417,7 +417,7 @@ static int ivtv_g_fmt_vid_out(struct file *file, void *fh, struct v4l2_format *f

>  			pixfmt->field = V4L2_FIELD_ANY;

>  			break;

>  		}

> -		pixfmt->pixelformat = V4L2_PIX_FMT_HM12;

> +		pixfmt->pixelformat = V4L2_PIX_FMT_NV12_16L16;

>  		pixfmt->bytesperline = 720;

>  		pixfmt->width = itv->yuv_info.v4l2_src_w;

>  		pixfmt->height = itv->yuv_info.v4l2_src_h;

> @@ -917,7 +917,7 @@ static int ivtv_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes

>  	static const struct v4l2_fmtdesc hm12 = {

>  		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,

>  		.description = "HM12 (YUV 4:2:0)",

> -		.pixelformat = V4L2_PIX_FMT_HM12,

> +		.pixelformat = V4L2_PIX_FMT_NV12_16L16,

>  	};

>  	static const struct v4l2_fmtdesc mpeg = {

>  		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,

> @@ -944,7 +944,7 @@ static int ivtv_enum_fmt_vid_out(struct file *file, void *fh, struct v4l2_fmtdes

>  	static const struct v4l2_fmtdesc hm12 = {

>  		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,

>  		.description = "HM12 (YUV 4:2:0)",

> -		.pixelformat = V4L2_PIX_FMT_HM12,

> +		.pixelformat = V4L2_PIX_FMT_NV12_16L16,

>  	};

>  	static const struct v4l2_fmtdesc mpeg = {

>  		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,

> diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c

> index 27935f1e9555..68698fc51921 100644

> --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c

> +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c

> @@ -61,7 +61,7 @@ bool sun6i_csi_is_format_supported(struct sun6i_csi *csi,

>  	     || sdev->csi.v4l2_ep.bus_type == V4L2_MBUS_BT656)

>  	     && sdev->csi.v4l2_ep.bus.parallel.bus_width == 16) {

>  		switch (pixformat) {

> -		case V4L2_PIX_FMT_HM12:

> +		case V4L2_PIX_FMT_NV12_16L16:

>  		case V4L2_PIX_FMT_NV12:

>  		case V4L2_PIX_FMT_NV21:

>  		case V4L2_PIX_FMT_NV16:

> @@ -124,7 +124,7 @@ bool sun6i_csi_is_format_supported(struct sun6i_csi *csi,

>  	case V4L2_PIX_FMT_VYUY:

>  		return (mbus_code == MEDIA_BUS_FMT_VYUY8_2X8);

>  

> -	case V4L2_PIX_FMT_HM12:

> +	case V4L2_PIX_FMT_NV12_16L16:

>  	case V4L2_PIX_FMT_NV12:

>  	case V4L2_PIX_FMT_NV21:

>  	case V4L2_PIX_FMT_NV16:

> @@ -269,7 +269,7 @@ static enum csi_output_fmt get_csi_output_format(struct sun6i_csi_dev *sdev,

>  	case V4L2_PIX_FMT_VYUY:

>  		return buf_interlaced ? CSI_FRAME_RAW_8 : CSI_FIELD_RAW_8;

>  

> -	case V4L2_PIX_FMT_HM12:

> +	case V4L2_PIX_FMT_NV12_16L16:

>  		return buf_interlaced ? CSI_FRAME_MB_YUV420 :

>  					CSI_FIELD_MB_YUV420;

>  	case V4L2_PIX_FMT_NV12:

> @@ -311,7 +311,7 @@ static enum csi_input_seq get_csi_input_seq(struct sun6i_csi_dev *sdev,

>  		return 0;

>  

>  	switch (pixformat) {

> -	case V4L2_PIX_FMT_HM12:

> +	case V4L2_PIX_FMT_NV12_16L16:

>  	case V4L2_PIX_FMT_NV12:

>  	case V4L2_PIX_FMT_NV16:

>  	case V4L2_PIX_FMT_YUV420:

> @@ -526,7 +526,7 @@ static void sun6i_csi_set_window(struct sun6i_csi_dev *sdev)

>  

>  	planar_offset[0] = 0;

>  	switch (config->pixelformat) {

> -	case V4L2_PIX_FMT_HM12:

> +	case V4L2_PIX_FMT_NV12_16L16:

>  	case V4L2_PIX_FMT_NV12:

>  	case V4L2_PIX_FMT_NV21:

>  	case V4L2_PIX_FMT_NV16:

> diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h

> index c626821aaedb..3a38d107ae3f 100644

> --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h

> +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h

> @@ -105,7 +105,7 @@ static inline int sun6i_csi_get_bpp(unsigned int pixformat)

>  	case V4L2_PIX_FMT_SGBRG12:

>  	case V4L2_PIX_FMT_SGRBG12:

>  	case V4L2_PIX_FMT_SRGGB12:

> -	case V4L2_PIX_FMT_HM12:

> +	case V4L2_PIX_FMT_NV12_16L16:

>  	case V4L2_PIX_FMT_NV12:

>  	case V4L2_PIX_FMT_NV21:

>  	case V4L2_PIX_FMT_YUV420:

> diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c

> index 07b2161392d2..33459892c1a9 100644

> --- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c

> +++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c

> @@ -48,7 +48,7 @@ static const u32 supported_pixformats[] = {

>  	V4L2_PIX_FMT_YVYU,

>  	V4L2_PIX_FMT_UYVY,

>  	V4L2_PIX_FMT_VYUY,

> -	V4L2_PIX_FMT_HM12,

> +	V4L2_PIX_FMT_NV12_16L16,

>  	V4L2_PIX_FMT_NV12,

>  	V4L2_PIX_FMT_NV21,

>  	V4L2_PIX_FMT_YUV420,

> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c

> index 0aaeb79d7a22..9a4195dcd2aa 100644

> --- a/drivers/media/v4l2-core/v4l2-ioctl.c

> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c

> @@ -1274,7 +1274,6 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)

>  	case V4L2_PIX_FMT_YUV410:	descr = "Planar YUV 4:1:0"; break;

>  	case V4L2_PIX_FMT_YUV420:	descr = "Planar YUV 4:2:0"; break;

>  	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_NV12:		descr = "Y/CbCr 4:2:0"; break;

>  	case V4L2_PIX_FMT_NV21:		descr = "Y/CrCb 4:2:0"; break;

> @@ -1282,6 +1281,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)

>  	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_NV12_16L16:	descr = "Y/CbCr 4:2:0 (16x16 linear tiles)"; break;

>  	case V4L2_PIX_FMT_NV12_32L32:   descr = "Y/CbCr 4:2:0 (32x32 linear tiles)"; 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;

> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h

> index 97cfcc861865..60abed3243f3 100644

> --- a/include/uapi/linux/videodev2.h

> +++ b/include/uapi/linux/videodev2.h

> @@ -601,7 +601,6 @@ 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_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */

>  

>  /* 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  */

> @@ -628,6 +627,7 @@ struct v4l2_pix_format {

>  #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */

>  

>  /* Tiled YUV formats */

> +#define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */

>  #define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2') /* 12  Y/CbCr 4:2:0 32x32 tiles */

>  

>  /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */

> @@ -2619,6 +2619,7 @@ struct v4l2_create_buffers {

>  

>  /* Deprecated definitions kept for backwards compatibility */

>  #ifdef __KERNEL__

> +#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */

>  #define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */

>  #endif

>  

>
diff mbox series

Patch

diff --git a/Documentation/admin-guide/media/ivtv.rst b/Documentation/admin-guide/media/ivtv.rst
index 7b8775d20214..101f16d0263e 100644
--- a/Documentation/admin-guide/media/ivtv.rst
+++ b/Documentation/admin-guide/media/ivtv.rst
@@ -159,7 +159,7 @@  whatever). Otherwise the device numbers can get confusing. The ivtv
   Read-only
 
   The raw YUV video output from the current video input. The YUV format
-  is non-standard (V4L2_PIX_FMT_HM12).
+  is a 16x16 linear tiled NV12 format (V4L2_PIX_FMT_NV12_16L16)
 
   Note that the YUV and PCM streams are not synchronized, so they are of
   limited use.
diff --git a/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst b/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst
index 8a7977af79d5..debde65fb8cd 100644
--- a/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst
+++ b/Documentation/userspace-api/media/drivers/cx2341x-uapi.rst
@@ -7,9 +7,7 @@  Non-compressed file format
 --------------------------
 
 The cx23416 can produce (and the cx23415 can also read) raw YUV output. The
-format of a YUV frame is specific to this chip and is called HM12. 'HM' stands
-for 'Hauppauge Macroblock', which is a misnomer as 'Conexant Macroblock' would
-be more accurate.
+format of a YUV frame is 16x16 linear tiled NV12 (V4L2_PIX_FMT_NV12_16L16).
 
 The format is YUV 4:2:0 which uses 1 Y byte per pixel and 1 U and V byte per
 four pixels.
@@ -34,8 +32,8 @@  second line of 8 UV pairs of the top-left block, etc. After transmitting
 this block the first line of the block on the right to the first block is
 transmitted, etc.
 
-The code below is given as an example on how to convert HM12 to separate
-Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.
+The code below is given as an example on how to convert V4L2_PIX_FMT_NV12_16L16
+to separate Y, U and V planes. This code assumes frames of 720x576 (PAL) pixels.
 
 The width of a frame is always 720 pixels, regardless of the actual specified
 width.
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst
index e762f911737a..adcad9454175 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-reserved.rst
@@ -48,14 +48,6 @@  please make a proposal on the linux-media mailing list.
       - ``V4L2_PIX_FMT_HI240``
       - 'HI24'
       - 8 bit RGB format used by the BTTV driver.
-    * .. _V4L2-PIX-FMT-HM12:
-
-      - ``V4L2_PIX_FMT_HM12``
-      - 'HM12'
-      - YUV 4:2:0 format used by the IVTV driver.
-
-	The format is documented in the kernel sources in the file
-	``Documentation/userspace-api/media/drivers/cx2341x-uapi.rst``
     * .. _V4L2-PIX-FMT-CPIA1:
 
       - ``V4L2_PIX_FMT_CPIA1``
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
index edeaf7628b28..884828f2272c 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
@@ -254,6 +254,7 @@  of the luma plane.
 
 .. _V4L2-PIX-FMT-NV12MT:
 .. _V4L2-PIX-FMT-NV12MT-16X16:
+.. _V4L2-PIX-FMT-NV12-16L16:
 .. _V4L2-PIX-FMT-NV12-32L32:
 
 Tiled NV12
@@ -278,6 +279,11 @@  If the vertical resolution is an odd number of macroblocks, the last row of
 macroblocks is stored in linear order. The layouts of the luma and chroma
 planes are identical.
 
+``V4L2_PIX_FMT_NV12_16L16`` stores pixel in 16x16 tiles, and stores
+tiles linearly in memory. The line stride and image height must be
+aligned to a multiple of 16. The layouts of the luma and chroma planes are
+identical.
+
 ``V4L2_PIX_FMT_NV12_32L32`` stores pixel in 32x32 tiles, and stores
 tiles linearly in memory. The line stride and image height must be
 aligned to a multiple of 32. The layouts of the luma and chroma planes are
diff --git a/drivers/media/pci/cx18/cx18-ioctl.c b/drivers/media/pci/cx18/cx18-ioctl.c
index 4864def20676..ce3f0141f94e 100644
--- a/drivers/media/pci/cx18/cx18-ioctl.c
+++ b/drivers/media/pci/cx18/cx18-ioctl.c
@@ -276,7 +276,7 @@  static int cx18_s_fmt_vid_cap(struct file *file, void *fh,
 	s->pixelformat = fmt->fmt.pix.pixelformat;
 	/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))
 	   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */
-	if (s->pixelformat == V4L2_PIX_FMT_HM12) {
+	if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16) {
 		s->vb_bytes_per_frame = h * 720 * 3 / 2;
 		s->vb_bytes_per_line = 720; /* First plane */
 	} else {
@@ -470,7 +470,7 @@  static int cx18_enum_fmt_vid_cap(struct file *file, void *fh,
 			.index = 0,
 			.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
 			.description = "HM12 (YUV 4:1:1)",
-			.pixelformat = V4L2_PIX_FMT_HM12,
+			.pixelformat = V4L2_PIX_FMT_NV12_16L16,
 		},
 		{
 			.index = 1,
diff --git a/drivers/media/pci/cx18/cx18-streams.c b/drivers/media/pci/cx18/cx18-streams.c
index c41bae118415..16d37ab48906 100644
--- a/drivers/media/pci/cx18/cx18-streams.c
+++ b/drivers/media/pci/cx18/cx18-streams.c
@@ -133,7 +133,7 @@  static int cx18_prepare_buffer(struct videobuf_queue *q,
 
 		/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))
 		   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */
-		if (s->pixelformat == V4L2_PIX_FMT_HM12)
+		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)
 			s->vb_bytes_per_frame = height * 720 * 3 / 2;
 		else
 			s->vb_bytes_per_frame = height * 720 * 2;
@@ -155,7 +155,7 @@  static int cx18_prepare_buffer(struct videobuf_queue *q,
 
 		/* HM12 YUV size is (Y=(h*720) + UV=(h*(720/2)))
 		   UYUV YUV size is (Y=(h*720) + UV=(h*(720))) */
-		if (s->pixelformat == V4L2_PIX_FMT_HM12)
+		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)
 			s->vb_bytes_per_frame = height * 720 * 3 / 2;
 		else
 			s->vb_bytes_per_frame = height * 720 * 2;
@@ -287,7 +287,7 @@  static void cx18_stream_init(struct cx18 *cx, int type)
 			s, &cx->serialize_lock);
 
 		/* Assume the previous pixel default */
-		s->pixelformat = V4L2_PIX_FMT_HM12;
+		s->pixelformat = V4L2_PIX_FMT_NV12_16L16;
 		s->vb_bytes_per_frame = cx->cxhdl.height * 720 * 3 / 2;
 		s->vb_bytes_per_line = 720;
 	}
@@ -733,7 +733,7 @@  static void cx18_stream_configure_mdls(struct cx18_stream *s)
 		 * Set the MDL size to the exact size needed for one frame.
 		 * Use enough buffers per MDL to cover the MDL size
 		 */
-		if (s->pixelformat == V4L2_PIX_FMT_HM12)
+		if (s->pixelformat == V4L2_PIX_FMT_NV12_16L16)
 			s->mdl_size = 720 * s->cx->cxhdl.height * 3 / 2;
 		else
 			s->mdl_size = 720 * s->cx->cxhdl.height * 2;
diff --git a/drivers/media/pci/ivtv/ivtv-ioctl.c b/drivers/media/pci/ivtv/ivtv-ioctl.c
index da19b2e95e6c..0cdf6b3210c2 100644
--- a/drivers/media/pci/ivtv/ivtv-ioctl.c
+++ b/drivers/media/pci/ivtv/ivtv-ioctl.c
@@ -339,7 +339,7 @@  static int ivtv_g_fmt_vid_cap(struct file *file, void *fh, struct v4l2_format *f
 	pixfmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
 	pixfmt->field = V4L2_FIELD_INTERLACED;
 	if (id->type == IVTV_ENC_STREAM_TYPE_YUV) {
-		pixfmt->pixelformat = V4L2_PIX_FMT_HM12;
+		pixfmt->pixelformat = V4L2_PIX_FMT_NV12_16L16;
 		/* YUV size is (Y=(h*720) + UV=(h*(720/2))) */
 		pixfmt->sizeimage = pixfmt->height * 720 * 3 / 2;
 		pixfmt->bytesperline = 720;
@@ -417,7 +417,7 @@  static int ivtv_g_fmt_vid_out(struct file *file, void *fh, struct v4l2_format *f
 			pixfmt->field = V4L2_FIELD_ANY;
 			break;
 		}
-		pixfmt->pixelformat = V4L2_PIX_FMT_HM12;
+		pixfmt->pixelformat = V4L2_PIX_FMT_NV12_16L16;
 		pixfmt->bytesperline = 720;
 		pixfmt->width = itv->yuv_info.v4l2_src_w;
 		pixfmt->height = itv->yuv_info.v4l2_src_h;
@@ -917,7 +917,7 @@  static int ivtv_enum_fmt_vid_cap(struct file *file, void *fh, struct v4l2_fmtdes
 	static const struct v4l2_fmtdesc hm12 = {
 		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
 		.description = "HM12 (YUV 4:2:0)",
-		.pixelformat = V4L2_PIX_FMT_HM12,
+		.pixelformat = V4L2_PIX_FMT_NV12_16L16,
 	};
 	static const struct v4l2_fmtdesc mpeg = {
 		.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
@@ -944,7 +944,7 @@  static int ivtv_enum_fmt_vid_out(struct file *file, void *fh, struct v4l2_fmtdes
 	static const struct v4l2_fmtdesc hm12 = {
 		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
 		.description = "HM12 (YUV 4:2:0)",
-		.pixelformat = V4L2_PIX_FMT_HM12,
+		.pixelformat = V4L2_PIX_FMT_NV12_16L16,
 	};
 	static const struct v4l2_fmtdesc mpeg = {
 		.type = V4L2_BUF_TYPE_VIDEO_OUTPUT,
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
index 27935f1e9555..68698fc51921 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
@@ -61,7 +61,7 @@  bool sun6i_csi_is_format_supported(struct sun6i_csi *csi,
 	     || sdev->csi.v4l2_ep.bus_type == V4L2_MBUS_BT656)
 	     && sdev->csi.v4l2_ep.bus.parallel.bus_width == 16) {
 		switch (pixformat) {
-		case V4L2_PIX_FMT_HM12:
+		case V4L2_PIX_FMT_NV12_16L16:
 		case V4L2_PIX_FMT_NV12:
 		case V4L2_PIX_FMT_NV21:
 		case V4L2_PIX_FMT_NV16:
@@ -124,7 +124,7 @@  bool sun6i_csi_is_format_supported(struct sun6i_csi *csi,
 	case V4L2_PIX_FMT_VYUY:
 		return (mbus_code == MEDIA_BUS_FMT_VYUY8_2X8);
 
-	case V4L2_PIX_FMT_HM12:
+	case V4L2_PIX_FMT_NV12_16L16:
 	case V4L2_PIX_FMT_NV12:
 	case V4L2_PIX_FMT_NV21:
 	case V4L2_PIX_FMT_NV16:
@@ -269,7 +269,7 @@  static enum csi_output_fmt get_csi_output_format(struct sun6i_csi_dev *sdev,
 	case V4L2_PIX_FMT_VYUY:
 		return buf_interlaced ? CSI_FRAME_RAW_8 : CSI_FIELD_RAW_8;
 
-	case V4L2_PIX_FMT_HM12:
+	case V4L2_PIX_FMT_NV12_16L16:
 		return buf_interlaced ? CSI_FRAME_MB_YUV420 :
 					CSI_FIELD_MB_YUV420;
 	case V4L2_PIX_FMT_NV12:
@@ -311,7 +311,7 @@  static enum csi_input_seq get_csi_input_seq(struct sun6i_csi_dev *sdev,
 		return 0;
 
 	switch (pixformat) {
-	case V4L2_PIX_FMT_HM12:
+	case V4L2_PIX_FMT_NV12_16L16:
 	case V4L2_PIX_FMT_NV12:
 	case V4L2_PIX_FMT_NV16:
 	case V4L2_PIX_FMT_YUV420:
@@ -526,7 +526,7 @@  static void sun6i_csi_set_window(struct sun6i_csi_dev *sdev)
 
 	planar_offset[0] = 0;
 	switch (config->pixelformat) {
-	case V4L2_PIX_FMT_HM12:
+	case V4L2_PIX_FMT_NV12_16L16:
 	case V4L2_PIX_FMT_NV12:
 	case V4L2_PIX_FMT_NV21:
 	case V4L2_PIX_FMT_NV16:
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
index c626821aaedb..3a38d107ae3f 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
@@ -105,7 +105,7 @@  static inline int sun6i_csi_get_bpp(unsigned int pixformat)
 	case V4L2_PIX_FMT_SGBRG12:
 	case V4L2_PIX_FMT_SGRBG12:
 	case V4L2_PIX_FMT_SRGGB12:
-	case V4L2_PIX_FMT_HM12:
+	case V4L2_PIX_FMT_NV12_16L16:
 	case V4L2_PIX_FMT_NV12:
 	case V4L2_PIX_FMT_NV21:
 	case V4L2_PIX_FMT_YUV420:
diff --git a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c
index 07b2161392d2..33459892c1a9 100644
--- a/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c
+++ b/drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c
@@ -48,7 +48,7 @@  static const u32 supported_pixformats[] = {
 	V4L2_PIX_FMT_YVYU,
 	V4L2_PIX_FMT_UYVY,
 	V4L2_PIX_FMT_VYUY,
-	V4L2_PIX_FMT_HM12,
+	V4L2_PIX_FMT_NV12_16L16,
 	V4L2_PIX_FMT_NV12,
 	V4L2_PIX_FMT_NV21,
 	V4L2_PIX_FMT_YUV420,
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 0aaeb79d7a22..9a4195dcd2aa 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1274,7 +1274,6 @@  static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	case V4L2_PIX_FMT_YUV410:	descr = "Planar YUV 4:1:0"; break;
 	case V4L2_PIX_FMT_YUV420:	descr = "Planar YUV 4:2:0"; break;
 	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_NV12:		descr = "Y/CbCr 4:2:0"; break;
 	case V4L2_PIX_FMT_NV21:		descr = "Y/CrCb 4:2:0"; break;
@@ -1282,6 +1281,7 @@  static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 	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_NV12_16L16:	descr = "Y/CbCr 4:2:0 (16x16 linear tiles)"; break;
 	case V4L2_PIX_FMT_NV12_32L32:   descr = "Y/CbCr 4:2:0 (32x32 linear tiles)"; 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;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 97cfcc861865..60abed3243f3 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -601,7 +601,6 @@  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_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
 
 /* 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  */
@@ -628,6 +627,7 @@  struct v4l2_pix_format {
 #define V4L2_PIX_FMT_YVU444M v4l2_fourcc('Y', 'M', '4', '2') /* 24  YVU444 planar */
 
 /* Tiled YUV formats */
+#define V4L2_PIX_FMT_NV12_16L16 v4l2_fourcc('H', 'M', '1', '2') /* 12  Y/CbCr 4:2:0 16x16 tiles */
 #define V4L2_PIX_FMT_NV12_32L32 v4l2_fourcc('S', 'T', '1', '2') /* 12  Y/CbCr 4:2:0 32x32 tiles */
 
 /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
@@ -2619,6 +2619,7 @@  struct v4l2_create_buffers {
 
 /* Deprecated definitions kept for backwards compatibility */
 #ifdef __KERNEL__
+#define V4L2_PIX_FMT_HM12    v4l2_fourcc('H', 'M', '1', '2') /*  8  YUV 4:2:0 16x16 macroblocks */
 #define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */
 #endif