Message ID | 1438006696-30678-1-git-send-email-laurent.pinchart@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello Laurent, I was experimenting with a web-camera integrated in my laptop and was extremely confused by non-monotonic timestamps coming from the uvc driver. In fact, the very first timestamp was bigger then the second every time I tried. This patch helped. More details: 1. I'm testing with avconv -f video4linux2 -i /dev/video0 -codec copy test.mkv 2. Prior to applying the patch I was always getting "Non-monotonous DTS in output stream 0:0" errors 3. I'm using kernel version 3.6.8 (yes, that's old, I'm ready to upgrade if you really need that for debugging) 4. The camera is 5986:0100 Acer, Inc Orbicam Anything else I can do to help you with this issue? My real usecase is having a single-board computer capturing a steady stream from a UVC webcam (h264 pixel format) while keeping timestamps reasonably accurate (within 0.1s) for the future processing and spending as little CPU time as possible. Thank you in advance.
On 07/27/2015 04:18 PM, Laurent Pinchart wrote: > The hardware timestamping implementation has been reported as not > working correctly on at least the Logitech C920. Until this can be > fixed, disable it by default. As stated earlier on freenode#v4l - this patch seems to do the job for me as well. Thanks a lot! Are there extra steps necessary to get this merged into media_tree.git ? Cheers -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index d9ddddb50e4d..ca8acc6fd9ed 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -32,6 +32,7 @@ #define DRIVER_DESC "USB Video Class driver" unsigned int uvc_clock_param = CLOCK_MONOTONIC; +unsigned int uvc_hw_timestamps_param; unsigned int uvc_no_drop_param; static unsigned int uvc_quirks_param = -1; unsigned int uvc_trace_param; @@ -2090,6 +2091,8 @@ static int uvc_clock_param_set(const char *val, struct kernel_param *kp) module_param_call(clock, uvc_clock_param_set, uvc_clock_param_get, &uvc_clock_param, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(clock, "Video buffers timestamp clock"); +module_param_named(hwtimestamps, uvc_hw_timestamps_param, uint, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(hwtimestamps, "Use hardware timestamps"); module_param_named(nodrop, uvc_no_drop_param, uint, S_IRUGO|S_IWUSR); MODULE_PARM_DESC(nodrop, "Don't drop incomplete frames"); module_param_named(quirks, uvc_quirks_param, uint, S_IRUGO|S_IWUSR); diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c index 25ea8cf1b8b3..85d99882a5ca 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -667,6 +667,9 @@ void uvc_video_clock_update(struct uvc_streaming *stream, u32 rem; u64 y; + if (!uvc_hw_timestamps_param) + return; + spin_lock_irqsave(&clock->lock, flags); if (clock->count < clock->size) diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h index 4bba30e5a1a5..18647f78f164 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -599,6 +599,7 @@ extern unsigned int uvc_clock_param; extern unsigned int uvc_no_drop_param; extern unsigned int uvc_trace_param; extern unsigned int uvc_timeout_param; +extern unsigned int uvc_hw_timestamps_param; #define uvc_trace(flag, msg...) \ do { \
The hardware timestamping implementation has been reported as not working correctly on at least the Logitech C920. Until this can be fixed, disable it by default. Reported-by: Peter Rabbitson <rabbit@rabbit.us> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> --- drivers/media/usb/uvc/uvc_driver.c | 3 +++ drivers/media/usb/uvc/uvc_video.c | 3 +++ drivers/media/usb/uvc/uvcvideo.h | 1 + 3 files changed, 7 insertions(+) Peter, could you please test this ?