On Wed May 13 11:49:22 2026 +0000, Ricardo Ribalda wrote:
> In the initial version we set the min value to 250msec. Looks like
> 100msec can also provide a good value.
> 
> Now that we are at it, add a macro to make it cleaner.
> 
> Fixes: 6243c83be6ee8 ("media: uvcvideo: Allow hw clock updates with buffers 
> not full")
> Cc: [email protected]
> Reviewed-by: Hans de Goede <[email protected]>
> Tested-by: Yunke Cao <[email protected]>
> Signed-off-by: Ricardo Ribalda <[email protected]>
> Link: 
> https://patch.msgid.link/[email protected]
> Signed-off-by: Hans de Goede <[email protected]>
> Signed-off-by: Hans Verkuil <[email protected]>

Patch committed.

Thanks,
Hans Verkuil

 drivers/media/usb/uvc/uvc_video.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

---

diff --git a/drivers/media/usb/uvc/uvc_video.c 
b/drivers/media/usb/uvc/uvc_video.c
index bb3ee942e570..d2e61be35bf6 100644
--- a/drivers/media/usb/uvc/uvc_video.c
+++ b/drivers/media/usb/uvc/uvc_video.c
@@ -494,6 +494,13 @@ static int uvc_commit_video(struct uvc_streaming *stream,
  * Clocks and timestamps
  */
 
+/*
+ * The accuracy of the hardware timestamping depends on having enough data to
+ * interpolate between the different clock domains. This value is sof cycles,
+ * this is, milliseconds.
+ */
+#define UVC_MIN_HW_TIMESTAMP_DIFF 100
+
 static inline ktime_t uvc_video_get_time(void)
 {
        if (uvc_clock_param == CLOCK_MONOTONIC)
@@ -843,13 +850,13 @@ void uvc_video_clock_update(struct uvc_streaming *stream,
         * buffer, but RAM is expensive these days, specially the infinitely
         * big.
         *
-        * The value of 1/4th of a second was determined by running Android's
-        * CTS on different devices.
+        * The value of UVC_MIN_HW_TIMESTAMP_DIFF was determined by running
+        * Android's CTS on different devices.
         *
-        * dev_sof runs at 1KHz, and we have a fixed point precision of
-        * 16 bits.
+        * y1 and y2 are dev_sof with a fixed point precision of 16 bits.
         */
-       if (clock->size != clock->count && (y2 - y1) < ((1000 / 4) << 16))
+       if (clock->size != clock->count &&
+           (y2 - y1) < (UVC_MIN_HW_TIMESTAMP_DIFF << 16))
                goto done;
 
        y = (u64)(y2 - y1) * (1ULL << 31) + (u64)y1 * (u64)x2
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to