Commit efab6b6a authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] vivi: queue_setup improvements

Drop the vid_limit module option: there is really no need to limit this.
No other driver does that. If you try to allocate more buffers then vb2
will automatically reduce the number of buffers anyway.

Also add sanity checks if the size in the fmt argument is going to be
used and drop the code that checks against *nbuffers == 0: this can
never happen (the vb2 framework ensures that) and the code was wrong
anyway since *nbuffers should have been set to the minimum number of
required buffers which is 1 for this driver.

Since vivi is often used as a template driver it is good to have this
driver be as compliant as possible. This broken code was for example
copied to the s2255 driver (which is being fixed as well).
Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 38aed47b
...@@ -70,10 +70,6 @@ static unsigned debug; ...@@ -70,10 +70,6 @@ static unsigned debug;
module_param(debug, uint, 0644); module_param(debug, uint, 0644);
MODULE_PARM_DESC(debug, "activates debug info"); MODULE_PARM_DESC(debug, "activates debug info");
static unsigned int vid_limit = 16;
module_param(vid_limit, uint, 0644);
MODULE_PARM_DESC(vid_limit, "capture memory limit in megabytes");
/* Global font descriptor */ /* Global font descriptor */
static const u8 *font8x16; static const u8 *font8x16;
...@@ -816,19 +812,15 @@ static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt, ...@@ -816,19 +812,15 @@ static int queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt,
struct vivi_dev *dev = vb2_get_drv_priv(vq); struct vivi_dev *dev = vb2_get_drv_priv(vq);
unsigned long size; unsigned long size;
if (fmt)
size = fmt->fmt.pix.sizeimage;
else
size = dev->width * dev->height * dev->pixelsize; size = dev->width * dev->height * dev->pixelsize;
if (fmt) {
if (size == 0) if (fmt->fmt.pix.sizeimage < size)
return -EINVAL; return -EINVAL;
size = fmt->fmt.pix.sizeimage;
if (0 == *nbuffers) /* check against insane over 8K resolution buffers */
*nbuffers = 32; if (size > 7680 * 4320 * dev->pixelsize)
return -EINVAL;
while (size * *nbuffers > vid_limit * 1024 * 1024) }
(*nbuffers)--;
*nplanes = 1; *nplanes = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment