mirror of https://gitee.com/openkylin/linux.git
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:
parent
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];
|
||||
|
|
|
@ -42,7 +42,7 @@ int vsp1_du_setup_lif(struct device *dev, unsigned int pipe_index,
|
|||
/**
|
||||
* struct vsp1_du_atomic_config - VSP atomic configuration parameters
|
||||
* @pixelformat: plane pixel format (V4L2 4CC)
|
||||
* @pitch: line pitch in bytes, for all planes
|
||||
* @pitch: line pitch in bytes for the first plane
|
||||
* @mem: DMA memory address for each plane of the frame buffer
|
||||
* @src: source rectangle in the frame buffer (integer coordinates)
|
||||
* @dst: destination rectangle on the display (integer coordinates)
|
||||
|
|
Loading…
Reference in New Issue