media: ti-vpe: vpe: fix a v4l2-compliance failure about invalid sizeimage
v4l2-compliance fails with this message: fail: v4l2-test-formats.cpp(463): !pfmt.sizeimage fail: v4l2-test-formats.cpp(736): \ Video Capture Multiplanar is valid, \ but TRY_FMT failed to return a format test VIDIOC_TRY_FMT: FAIL This failure is causd by the driver failing to handle out range 'bytesperline' values from user space applications. VPDMA hardware is limited to 64k line stride (16 bytes aligned, so 65520 bytes). So make sure the provided or calculated 'bytesperline' is smaller than the maximum value. Signed-off-by: Benoit Parrot <bparrot@ti.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
e20b248051
commit
0bac73adea
|
@ -57,6 +57,7 @@ struct vpdma_data_format {
|
|||
* line stride of source and dest
|
||||
* buffers should be 16 byte aligned
|
||||
*/
|
||||
#define VPDMA_MAX_STRIDE 65520 /* Max line stride 16 byte aligned */
|
||||
#define VPDMA_DTD_DESC_SIZE 32 /* 8 words */
|
||||
#define VPDMA_CFD_CTD_DESC_SIZE 16 /* 4 words */
|
||||
|
||||
|
|
|
@ -1694,6 +1694,10 @@ static int __vpe_try_fmt(struct vpe_ctx *ctx, struct v4l2_format *f,
|
|||
if (stride > plane_fmt->bytesperline)
|
||||
plane_fmt->bytesperline = stride;
|
||||
|
||||
plane_fmt->bytesperline = clamp_t(u32, plane_fmt->bytesperline,
|
||||
stride,
|
||||
VPDMA_MAX_STRIDE);
|
||||
|
||||
plane_fmt->bytesperline = ALIGN(plane_fmt->bytesperline,
|
||||
VPDMA_STRIDE_ALIGN);
|
||||
|
||||
|
|
Loading…
Reference in New Issue