On Thu May 21 00:44:09 2026 +0200, Sven Püschel wrote:
> Add a has_alpha value to the v4l2_format_info struct to indicate if the
> format contains an alpha component. This information can currently not
> be queried in a generic way, but might be useful for potential drivers
> to properly setup alpha blending to copy or set the alpha value.
> The implementation is based on the drm_format_info implementation.
> 
> Reviewed-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Sven Püschel <[email protected]>
> Signed-off-by: Nicolas Dufresne <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/v4l2-core/v4l2-common.c | 32 ++++++++++++++++----------------
 include/media/v4l2-common.h           |  2 ++
 2 files changed, 18 insertions(+), 16 deletions(-)

---

diff --git a/drivers/media/v4l2-core/v4l2-common.c 
b/drivers/media/v4l2-core/v4l2-common.c
index b55ab72958ea..3cc8b04e1ea6 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -248,26 +248,26 @@ const struct v4l2_format_info *v4l2_format_info(u32 
format)
                /* RGB formats (1 or 2 bytes per pixel) */
                { .format = V4L2_PIX_FMT_RGB332,   .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB444,   .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ARGB444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ARGB444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XRGB444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_RGBA444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_RGBA444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_RGBX444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ABGR444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ABGR444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XBGR444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_BGRA444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_BGRA444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_BGRX444,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB555,   .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ARGB555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ARGB555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XRGB555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_RGBA555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_RGBA555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_RGBX555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ABGR555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ABGR555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XBGR555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_BGRA555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_BGRA555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_BGRX555,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB565,   .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB555X,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ARGB555X, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ARGB555X, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XRGB555X, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB565X,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
 
@@ -276,24 +276,24 @@ const struct v4l2_format_info *v4l2_format_info(u32 
format)
                { .format = V4L2_PIX_FMT_BGR24,       .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB24,       .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_BGR32,       .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ABGR32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ABGR32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XBGR32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_BGRA32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_BGRA32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_BGRX32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB32,       .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_RGBA32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_RGBA32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_RGBX32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ARGB32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ARGB32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
                { .format = V4L2_PIX_FMT_XRGB32,      .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGBX1010102, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_RGBA1010102, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ARGB2101010, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_RGBA1010102, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
+               { .format = V4L2_PIX_FMT_ARGB2101010, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
 
                /* RGB formats (6 or 8 bytes per pixel) */
                { .format = V4L2_PIX_FMT_BGR48_12,  .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_BGR48,     .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
                { .format = V4L2_PIX_FMT_RGB48,     .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
-               { .format = V4L2_PIX_FMT_ABGR64_12, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 8, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
+               { .format = V4L2_PIX_FMT_ABGR64_12, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 8, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1, .has_alpha = true },
 
                /* HSV formats */
                { .format = V4L2_PIX_FMT_HSV24, .pixel_enc = 
V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, 
.bpp_div = { 1, 1, 1, 1 }, .hdiv = 1, .vdiv = 1 },
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index f8b1faced79c..401d8506c24b 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -520,6 +520,7 @@ enum v4l2_pixel_encoding {
  * @vdiv: Vertical chroma subsampling factor
  * @block_w: Per-plane macroblock pixel width (optional)
  * @block_h: Per-plane macroblock pixel height (optional)
+ * @has_alpha: Does the format embeds an alpha component?
  */
 struct v4l2_format_info {
        u32 format;
@@ -532,6 +533,7 @@ struct v4l2_format_info {
        u8 vdiv;
        u8 block_w[4];
        u8 block_h[4];
+       bool has_alpha;
 };
 
 static inline bool v4l2_is_format_rgb(const struct v4l2_format_info *f)
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to