lkml.org 
[lkml]   [2023]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH 06/10] media: Add B412 video format
    From
    On 20/12/2022 04:11, Ming Qian wrote:
    > B412 is a reversed RGB format with alpha channel last,
    > 12 bits per component like ABGR32,
    > expanded to 16bits.
    > Data in the 12 high bits, zeros in the 4 low bits,
    > arranged in little endian order.
    >
    > Signed-off-by: Ming Qian <ming.qian@nxp.com>
    > ---
    > Documentation/userspace-api/media/v4l/pixfmt-rgb.rst | 9 +++++++++
    > drivers/media/v4l2-core/v4l2-common.c | 1 +
    > drivers/media/v4l2-core/v4l2-ioctl.c | 1 +
    > include/uapi/linux/videodev2.h | 1 +
    > 4 files changed, 12 insertions(+)
    >
    > diff --git a/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst b/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst
    > index f7785c93292a..b9d1e48c0224 100644
    > --- a/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst
    > +++ b/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst
    > @@ -793,6 +793,15 @@ arranged in little endian order.
    > - G\ :sub:`15-4`
    > - R\ :sub:`15-4`
    > -
    > + * .. _V4L2-PIX-FMT-B412:
    > +
    > + - ``V4L2_PIX_FMT_B412``
    > + - 'B412'
    > +
    > + - B\ :sub:`15-4`
    > + - G\ :sub:`15-4`
    > + - R\ :sub:`15-4`
    > + - A\ :sub:`15-4`
    >
    > .. raw:: latex
    >
    > diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
    > index 0cc58abae562..5384648903a9 100644
    > --- a/drivers/media/v4l2-core/v4l2-common.c
    > +++ b/drivers/media/v4l2-core/v4l2-common.c
    > @@ -253,6 +253,7 @@ const struct v4l2_format_info *v4l2_format_info(u32 format)
    > { .format = V4L2_PIX_FMT_RGB555, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
    > { .format = V4L2_PIX_FMT_BGR666, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
    > { .format = V4L2_PIX_FMT_B312, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
    > + { .format = V4L2_PIX_FMT_B412, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 8, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
    >
    > /* YUV packed formats */
    > { .format = V4L2_PIX_FMT_YUYV, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
    > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
    > index 8c3d40d3acf5..8cb21024bd96 100644
    > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
    > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
    > @@ -1299,6 +1299,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
    > case V4L2_PIX_FMT_RGBA32: descr = "32-bit RGBA 8-8-8-8"; break;
    > case V4L2_PIX_FMT_RGBX32: descr = "32-bit RGBX 8-8-8-8"; break;
    > case V4L2_PIX_FMT_B312: descr = "12-bit Depth BGR"; break;
    > + case V4L2_PIX_FMT_B412: descr = "12-bit Depth BGRA"; 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;
    > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
    > index c67f895210de..a26ff16a52c8 100644
    > --- a/include/uapi/linux/videodev2.h
    > +++ b/include/uapi/linux/videodev2.h
    > @@ -579,6 +579,7 @@ struct v4l2_pix_format {
    >
    > /* RGB formats (6 or 8 bytes per pixel) */
    > #define V4L2_PIX_FMT_B312 v4l2_fourcc('B', '3', '1', '2') /* 48 BGR 12-bit per component */
    > +#define V4L2_PIX_FMT_B412 v4l2_fourcc('B', '4', '1', '2') /* 64 BGRA 12-bit per component */

    This would be ABGR32_12, to correspond with the 8 bit ABGR32.
    Unfortunately, that define has a terrible mismatch with the actual component
    order (alpha comes last in memory, not first as the name suggests).

    It would be nice to be able to fix this, but I think that would be even
    more confusing.

    Regards,

    Hans

    >
    > /* Grey formats */
    > #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */

    \
     
     \ /
      Last update: 2023-03-26 23:58    [W:4.026 / U:0.252 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site