Skip to content

Commit

Permalink
[media] V4L: soc-camera: explicitly require V4L2_BUF_TYPE_VIDEO_CAPTURE
Browse files Browse the repository at this point in the history
The soc-camera core accesses the "pix" member of the struct v4l2_format::fmt
union, which is only valid for V4L2_BUF_TYPE_VIDEO_CAPTURE streams. This
patch adds explicit checks for this to {g,s,try}_fmt methods.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Guennadi Liakhovetski authored and Mauro Carvalho Chehab committed Mar 22, 2011
1 parent 0e4c180 commit d366d4a
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions drivers/media/video/soc_camera.c
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,10 @@ static int soc_camera_try_fmt_vid_cap(struct file *file, void *priv,

WARN_ON(priv != file->private_data);

/* Only single-plane capture is supported so far */
if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;

/* limit format to hardware capabilities */
return ici->ops->try_fmt(icd, f);
}
Expand Down Expand Up @@ -396,10 +400,6 @@ static int soc_camera_set_fmt(struct soc_camera_device *icd,
if (ici->ops->init_videobuf)
icd->vb_vidq.field = pix->field;

if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
dev_warn(&icd->dev, "Attention! Wrong buf-type %d\n",
f->type);

dev_dbg(&icd->dev, "set width: %d height: %d\n",
icd->user_width, icd->user_height);

Expand Down Expand Up @@ -618,6 +618,11 @@ static int soc_camera_s_fmt_vid_cap(struct file *file, void *priv,

WARN_ON(priv != file->private_data);

if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) {
dev_warn(&icd->dev, "Wrong buf-type %d\n", f->type);
return -EINVAL;
}

if (icd->streamer && icd->streamer != file)
return -EBUSY;

Expand Down Expand Up @@ -661,6 +666,9 @@ static int soc_camera_g_fmt_vid_cap(struct file *file, void *priv,

WARN_ON(priv != file->private_data);

if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;

pix->width = icd->user_width;
pix->height = icd->user_height;
pix->bytesperline = icd->bytesperline;
Expand Down

0 comments on commit d366d4a

Please sign in to comment.