media: Rename V4L2_PIX_FMT_HM12 to V4L2_PIX_FMT_NV12_16L16
authorEzequiel Garcia <ezequiel@collabora.com>
Thu, 5 Aug 2021 02:47:50 +0000 (04:47 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 30 Sep 2021 08:07:39 +0000 (10:07 +0200)
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>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
13 files changed:
Documentation/admin-guide/media/ivtv.rst
Documentation/userspace-api/media/drivers/cx2341x-uapi.rst
Documentation/userspace-api/media/v4l/pixfmt-reserved.rst
Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst
Documentation/userspace-api/media/videodev2.h.rst.exceptions
drivers/media/pci/cx18/cx18-ioctl.c
drivers/media/pci/cx18/cx18-streams.c
drivers/media/pci/ivtv/ivtv-ioctl.c
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c
drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h
drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c
drivers/media/v4l2-core/v4l2-ioctl.c
include/uapi/linux/videodev2.h

index 7b8775d20214380a9f5b84e9d52660d66be47937..101f16d0263e64863d25fdbc5dd10717ce068316 100644 (file)
@@ -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.
index 8a7977af79d540a2135f1f73f3a9ef3a38259de9..debde65fb8cd8d795f82d1e698ed55fc491c9e9e 100644 (file)
@@ -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.
index e762f911737a5e8b8c2c084db9778dc470e57774..adcad9454175302b41539130a19462e9a11a3197 100644 (file)
@@ -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``
index edeaf7628b284f905b70f78c83467d1a3eafc71c..884828f2272c8d41fd0300ba531c45c5a225c192 100644 (file)
@@ -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
index 982675a2342e2aabade7f2c4515a5f48543f89b7..eb0b1cd37abd938110b9542afe8910e037dbd60b 100644 (file)
@@ -187,6 +187,7 @@ replace define V4L2_CAP_IO_MC device-capabilities
 # V4L2 pix flags
 replace define V4L2_PIX_FMT_PRIV_MAGIC :c:type:`v4l2_pix_format`
 replace define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA format-flags
+replace define V4L2_PIX_FMT_HM12 :c:type:`v4l2_pix_format`
 replace define V4L2_PIX_FMT_SUNXI_TILED_NV12 :c:type:`v4l2_pix_format`
 
 # V4L2 format flags
index 4864def20676ecef6caceda4a69900f407d7bf5c..ce3f0141f94efc6babae1d60f129fa4a9ac45655 100644 (file)
@@ -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,
index c41bae118415da1d9f1751d302c12581e4892697..16d37ab48906fb7223f2b02b818b3aab5902ba29 100644 (file)
@@ -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;
index da19b2e95e6cf07dd5e8ee2d990172b2d7c40de1..0cdf6b3210c2f0db3e3fbb8bda3f3f194a8aef15 100644 (file)
@@ -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,
index 08df0c833423b91c929a1ec8076529bc6c150365..4b8d66fec3cf7acfdf60d4bfa5be5a3f96bc399e 100644 (file)
@@ -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:
index c626821aaedb5fba77e0a0e0755289f85d242c56..3a38d107ae3ff0b1d079c31c8ea7376897eaf590 100644 (file)
@@ -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:
index 07b2161392d218e75ebcefa7b7f925dc57cbe05d..33459892c1a97269a4d8534f27a0d539f4e836e4 100644 (file)
@@ -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,
index ed194e9da7b0a13b3568c6b50d8f70f7734e6a5e..8731d65ad39e15ba0620a4d228f88f4bd344abfc 100644 (file)
@@ -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)"; break;
        case V4L2_PIX_FMT_NV12_32L32:   descr = "Y/CbCr 4:2:0 (32x32 Linear)"; 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;
index 0188cd39468f355d9d0782e2ad291e83d1b785e6..40fec00ce73a60b8205eb084df8e969f5b20f14c 100644 (file)
@@ -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 */
 #ifndef __KERNEL__
+#define V4L2_PIX_FMT_HM12 V4L2_PIX_FMT_NV12_16L16
 #define V4L2_PIX_FMT_SUNXI_TILED_NV12 V4L2_PIX_FMT_NV12_32L32
 #endif