Commit 627a5ef7 authored by Jim Paris's avatar Jim Paris Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (9876): gspca - main: Allow subdrivers to handle v4l2_streamparm requests.



Add get_streamparm and set_streamparm operations so subdrivers can
get/set stream parameters such as framerate.

Signed-off-by: default avatarJim Paris <jim@jtan.com>
Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent c06eb619
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -1327,6 +1327,17 @@ static int vidioc_g_parm(struct file *filp, void *priv,
	memset(parm, 0, sizeof *parm);
	parm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	parm->parm.capture.readbuffers = gspca_dev->nbufread;

	if (gspca_dev->sd_desc->get_streamparm) {
		int ret;

		if (mutex_lock_interruptible(&gspca_dev->usb_lock))
			return -ERESTARTSYS;
		ret = gspca_dev->sd_desc->get_streamparm(gspca_dev, parm);
		mutex_unlock(&gspca_dev->usb_lock);
		return ret;
	}

	return 0;
}

@@ -1341,6 +1352,17 @@ static int vidioc_s_parm(struct file *filp, void *priv,
		parm->parm.capture.readbuffers = gspca_dev->nbufread;
	else
		gspca_dev->nbufread = n;

	if (gspca_dev->sd_desc->set_streamparm) {
		int ret;

		if (mutex_lock_interruptible(&gspca_dev->usb_lock))
			return -ERESTARTSYS;
		ret = gspca_dev->sd_desc->set_streamparm(gspca_dev, parm);
		mutex_unlock(&gspca_dev->usb_lock);
		return ret;
	}

	return 0;
}

+4 −0
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ typedef void (*cam_v_op) (struct gspca_dev *);
typedef int (*cam_cf_op) (struct gspca_dev *, const struct usb_device_id *);
typedef int (*cam_jpg_op) (struct gspca_dev *,
				struct v4l2_jpegcompression *);
typedef int (*cam_streamparm_op) (struct gspca_dev *,
				  struct v4l2_streamparm *);
typedef int (*cam_qmnu_op) (struct gspca_dev *,
			struct v4l2_querymenu *);
typedef void (*cam_pkt_op) (struct gspca_dev *gspca_dev,
@@ -106,6 +108,8 @@ struct sd_desc {
	cam_jpg_op get_jcomp;
	cam_jpg_op set_jcomp;
	cam_qmnu_op querymenu;
	cam_streamparm_op get_streamparm;
	cam_streamparm_op set_streamparm;
};

/* packet types when moving from iso buf to frame buf */