diff options
| author | Paul Elder <paul.elder@ideasonboard.com> | 2018-08-28 02:10:01 -0400 | 
|---|---|---|
| committer | Paul Elder <paul.elder@ideasonboard.com> | 2019-02-06 01:48:50 -0500 | 
| commit | 9889a1223028a14ac2fd56323fc813b62087c918 (patch) | |
| tree | c7f462a4b949cc98b9923d2eee374d1f3b858e19 | |
| parent | 8bee8cdb3c98c6489bd525a5588e391f8ae3aaa1 (diff) | |
v4l2: add v4l2_set_frame_rate
We would like to be able to set the frame rate of video sources. This
patch adds such a function for v4l2-based video sources to use.
Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
| -rw-r--r-- | lib/v4l2.c | 20 | ||||
| -rw-r--r-- | lib/v4l2.h | 14 | 
2 files changed, 34 insertions, 0 deletions
| @@ -500,6 +500,26 @@ int v4l2_set_format(struct v4l2_device *dev, struct v4l2_pix_format *format)  	return 0;  } +int v4l2_set_frame_rate(struct v4l2_device *dev, unsigned int fps) +{ +	struct v4l2_streamparm parm; +	int ret; + +	memset(&parm, 0, sizeof parm); +	parm.type = dev->type; +	parm.parm.capture.timeperframe.numerator = 1; +	parm.parm.capture.timeperframe.denominator = fps; + +	ret = ioctl(dev->fd, VIDIOC_S_PARM, &parm); +	if (ret < 0) { +		printf("%s: unable to set frame rate (%d).\n", dev->name, errno); +		return -errno; +	} + +	dev->fps = fps; +	return 0; +} +  /* -----------------------------------------------------------------------------   * Buffers management   */ @@ -31,6 +31,7 @@ struct v4l2_device  	struct list_entry formats;  	struct v4l2_pix_format format;  	struct v4l2_rect crop; +	unsigned int fps;  	struct video_buffer_set buffers;  }; @@ -86,6 +87,19 @@ int v4l2_get_format(struct v4l2_device *dev, struct v4l2_pix_format *format);  int v4l2_set_format(struct v4l2_device *dev, struct v4l2_pix_format *format);  /* + * v4l2_set_frame_rate - Set the frame rate + * @dev: Device instance + * @fps: Frame rate + * + * Set the frame rate specified by @fps. + * The device can modify the requested format and size, in which case @dev->fps + * will be updated to reflect the modified setting. + * + * Return 0 on success or a negative error code on failure. + */ +int v4l2_set_frame_rate(struct v4l2_device *dev, unsigned int fps); + +/*   * v4l2_get_crop - Retrieve the current crop rectangle   * @dev: Device instance   * @rect: Crop rectangle structure to be filled | 
