Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d366d4a0 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by Mauro Carvalho Chehab
Browse files

[media] V4L: soc-camera: explicitly require V4L2_BUF_TYPE_VIDEO_CAPTURE



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: default avatarGuennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 0e4c180d
Loading
Loading
Loading
Loading
+12 −4
Original line number Original line Diff line number Diff line
@@ -144,6 +144,10 @@ static int soc_camera_try_fmt_vid_cap(struct file *file, void *priv,


	WARN_ON(priv != file->private_data);
	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 */
	/* limit format to hardware capabilities */
	return ici->ops->try_fmt(icd, f);
	return ici->ops->try_fmt(icd, f);
}
}
@@ -396,10 +400,6 @@ static int soc_camera_set_fmt(struct soc_camera_device *icd,
	if (ici->ops->init_videobuf)
	if (ici->ops->init_videobuf)
		icd->vb_vidq.field = pix->field;
		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",
	dev_dbg(&icd->dev, "set width: %d height: %d\n",
		icd->user_width, icd->user_height);
		icd->user_width, icd->user_height);


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


	WARN_ON(priv != file->private_data);
	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)
	if (icd->streamer && icd->streamer != file)
		return -EBUSY;
		return -EBUSY;


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


	WARN_ON(priv != file->private_data);
	WARN_ON(priv != file->private_data);


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

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