diff options
| -rw-r--r-- | include/uvcgadget/stream.h | 13 | ||||
| -rw-r--r-- | lib/stream.c | 6 | ||||
| -rw-r--r-- | lib/uvc.c | 5 | 
3 files changed, 24 insertions, 0 deletions
| diff --git a/include/uvcgadget/stream.h b/include/uvcgadget/stream.h index 9ab068f..bc83cfa 100644 --- a/include/uvcgadget/stream.h +++ b/include/uvcgadget/stream.h @@ -91,6 +91,19 @@ int uvc_stream_set_format(struct uvc_stream *stream,  			  const struct v4l2_pix_format *format);  /* + * uvc_stream_set_frame_rate - Set the frame rate for the stream + * @stream: the UVC stream + * @fps:    the frame rate in frames per second + * + * This function is called from the UVC protocol handler to configure the frame + * rate for the video source of the @stream. It must not be called directly by + * applications. + * + * Returns 0 on success, or a negative error code on failure. + */ +int uvc_stream_set_frame_rate(struct uvc_stream *stream, unsigned int fps); + +/*   * uvc_stream_enable - Turn on/off video streaming for the UVC stream   * @stream: the UVC stream   * @enable: 0 to stop the stream, 1 to start it diff --git a/lib/stream.c b/lib/stream.c index 19f0d78..168dc71 100644 --- a/lib/stream.c +++ b/lib/stream.c @@ -156,6 +156,12 @@ int uvc_stream_set_format(struct uvc_stream *stream,  	return video_source_set_format(stream->src, &fmt);  } +int uvc_stream_set_frame_rate(struct uvc_stream *stream, unsigned int fps) +{ +	printf("=== Setting frame rate to %u fps\n", fps); +	return video_source_set_frame_rate(stream->src, fps); +} +  /* ---------------------------------------------------------------------------   * Stream handling   */ @@ -269,6 +269,7 @@ uvc_events_process_data(struct uvc_device *dev,  		const struct uvc_function_config_format *format;  		const struct uvc_function_config_frame *frame;  		struct v4l2_pix_format pixfmt; +		unsigned int fps;  		format = &dev->fc->streaming.formats[target->bFormatIndex-1];  		frame = &format->frames[target->bFrameIndex-1]; @@ -286,6 +287,10 @@ uvc_events_process_data(struct uvc_device *dev,  			pixfmt.sizeimage = dev->maxsize * 1.5;  		uvc_stream_set_format(dev->stream, &pixfmt); + +		/* fps is guaranteed to be non-zero and thus valid. */ +		fps = 1.0 / (target->dwFrameInterval / 10000000.0); +		uvc_stream_set_frame_rate(dev->stream, fps);  	}  } | 
