media: vsp1: Fix YCbCr planar formats pitch calculation
YCbCr planar formats can have different pitch values for the luma and
chroma planes. This isn't taken into account in the driver. Fix it.
Based on a BSP patch from Koji Matsuoka <koji.matsuoka.xm@renesas.com>.
Fixes: 7863ac504b
("drm: rcar-du: Add tri-planar memory formats support")
[Updated documentation of the struct vsp1_du_atomic_config pitch field]
Signed-off-by: Koji Matsuoka <koji.matsuoka.xm@renesas.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:

committed by
Mauro Carvalho Chehab

vanhempi
de2bc45c84
commit
9b2798d5b7
@@ -770,6 +770,7 @@ int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
|
||||
struct vsp1_device *vsp1 = dev_get_drvdata(dev);
|
||||
struct vsp1_drm_pipeline *drm_pipe = &vsp1->drm->pipe[pipe_index];
|
||||
const struct vsp1_format_info *fmtinfo;
|
||||
unsigned int chroma_hsub;
|
||||
struct vsp1_rwpf *rpf;
|
||||
|
||||
if (rpf_index >= vsp1->info->rpf_count)
|
||||
@@ -810,10 +811,18 @@ int vsp1_du_atomic_update(struct device *dev, unsigned int pipe_index,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Only formats with three planes can affect the chroma planes pitch.
|
||||
* All formats with two planes have a horizontal subsampling value of 2,
|
||||
* but combine U and V in a single chroma plane, which thus results in
|
||||
* the luma plane and chroma plane having the same pitch.
|
||||
*/
|
||||
chroma_hsub = (fmtinfo->planes == 3) ? fmtinfo->hsub : 1;
|
||||
|
||||
rpf->fmtinfo = fmtinfo;
|
||||
rpf->format.num_planes = fmtinfo->planes;
|
||||
rpf->format.plane_fmt[0].bytesperline = cfg->pitch;
|
||||
rpf->format.plane_fmt[1].bytesperline = cfg->pitch;
|
||||
rpf->format.plane_fmt[1].bytesperline = cfg->pitch / chroma_hsub;
|
||||
rpf->alpha = cfg->alpha;
|
||||
|
||||
rpf->mem.addr[0] = cfg->mem[0];
|
||||
|
Viittaa uudesa ongelmassa
Block a user