]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: renesas: vsp1: Expose color space through the DRM API
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tue, 29 Apr 2025 23:29:03 +0000 (02:29 +0300)
committerHans Verkuil <hverkuil@xs4all.nl>
Fri, 2 May 2025 08:16:44 +0000 (10:16 +0200)
Now that the VSP1 driver supports color spaces, expose them through the
API used by the DU driver. This allows configuring the YCbCr encoding
and quantization used by each plane, ensuring correct color rendering.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen+renesas@ideasonboard.com>
Link: https://lore.kernel.org/r/20250429232904.26413-9-laurent.pinchart+renesas@ideasonboard.com
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/platform/renesas/vsp1/vsp1_drm.c
drivers/media/platform/renesas/vsp1/vsp1_drm.h
include/media/vsp1.h

index e5339fda59413183bb0bbc000bef4a050b7ee54f..fe55e8747b05aa351c1547469f9cbbe2b6d25408 100644 (file)
@@ -136,6 +136,8 @@ static int vsp1_du_pipeline_setup_rpf(struct vsp1_device *vsp1,
        format.format.height = input->crop.height + input->crop.top;
        format.format.code = rpf->fmtinfo->mbus;
        format.format.field = V4L2_FIELD_NONE;
+       format.format.ycbcr_enc = input->ycbcr_enc;
+       format.format.quantization = input->quantization;
 
        ret = v4l2_subdev_call(&rpf->entity.subdev, pad, set_fmt, NULL,
                               &format);
@@ -876,6 +878,8 @@ int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
        input->crop = cfg->src;
        input->compose = cfg->dst;
        input->zpos = cfg->zpos;
+       input->ycbcr_enc = cfg->color_encoding;
+       input->quantization = cfg->color_range;
 
        drm_pipe->pipe.inputs[rpf_index] = rpf;
 
index 7234737cc46404d45f9e0ae99bba171ac93a8fe0..07a5d0adbd089967fff35e2391446d73ef0358d5 100644 (file)
@@ -52,8 +52,8 @@ struct vsp1_drm_pipeline {
  * struct vsp1_drm - State for the API exposed to the DRM driver
  * @pipe: the VSP1 DRM pipeline used for display
  * @lock: protects the BRU and BRS allocation
- * @inputs: source crop rectangle, destination compose rectangle and z-order
- *     position for every input (indexed by RPF index)
+ * @inputs: source crop rectangle, destination compose rectangle, z-order
+ *     position and colorspace for every input (indexed by RPF index)
  */
 struct vsp1_drm {
        struct vsp1_drm_pipeline pipe[VSP1_MAX_LIF];
@@ -63,6 +63,8 @@ struct vsp1_drm {
                struct v4l2_rect crop;
                struct v4l2_rect compose;
                unsigned int zpos;
+               enum v4l2_ycbcr_encoding ycbcr_enc;
+               enum v4l2_quantization quantization;
        } inputs[VSP1_MAX_RPF];
 };
 
index 48f4a5023d81512d0bd7a7e0afc409d706ede2e1..4ea6352fd63fec152593133845f684e0c32f34d4 100644 (file)
@@ -52,6 +52,8 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index,
  * @alpha: alpha value (0: fully transparent, 255: fully opaque)
  * @zpos: Z position of the plane (from 0 to number of planes minus 1)
  * @premult: true for premultiplied alpha
+ * @color_encoding: color encoding (valid for YUV formats only)
+ * @color_range: color range (valid for YUV formats only)
  */
 struct vsp1_du_atomic_config {
        u32 pixelformat;
@@ -62,6 +64,8 @@ struct vsp1_du_atomic_config {
        unsigned int alpha;
        unsigned int zpos;
        bool premult;
+       enum v4l2_ycbcr_encoding color_encoding;
+       enum v4l2_quantization color_range;
 };
 
 /**