From nobody Fri Jun 12 21:40:32 2026 Received: from mail-lf1-f47.google.com (mail-lf1-f47.google.com [209.85.167.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B05F388871 for ; Tue, 12 May 2026 12:31:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589073; cv=none; b=dA7CuADcmGRg9oOeTxb+nMnJ7TTnIWklwU93Is0XW9R07SFE8przX6UDDrq/Xdp+E9fiZyY3nR7MbnpphhFLautF5M6znIz1ONKeXn4tM7bH8yLidEJ9tmp7fIdHou3iyc1ba3W06MSLMEUw50nKFud4PsczAtxKrNQpeCAdDDw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589073; c=relaxed/simple; bh=sVF69CzaRVhIMaxnpfoXycHZBCoqXjnX6UDOqVWo4uc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VATCbBxM58Nqtooq2gNbsbrN3MQpoah33OAYpWQ62b8TzmuiUZh8vRUU95uHBYuiLGSqd5Dup9GIh0sRAfgFoCheXY/RRtm6ULmQv9jV2aXxPKAexCAWyIcefp0t97jwAUcmmsBPaYekiiDIPund5l1fFM7xUaBf9rLeFxhl8fk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=YHACXRcS; arc=none smtp.client-ip=209.85.167.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="YHACXRcS" Received: by mail-lf1-f47.google.com with SMTP id 2adb3069b0e04-5a86bfa2a4eso6079114e87.1 for ; Tue, 12 May 2026 05:31:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778589064; x=1779193864; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=1AdI6VgavsPYoDm4OezW7Aw/oko1M4Tdgq3gnzd4Y6Q=; b=YHACXRcSkdDSfD0GCoZRlhqcsBU0avOYtJP8L7LcwHqpEZmLsN3UngVO0s70BaijDw oINCd2GeME6HqpgC2K6c58f119ndow2v9L6irgY73S121C2GtdOWu3rEfo1LenNlf8zU W5RzxV3epSM6SU7r6x40rR5fdUCKrA443G7Ds= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778589064; x=1779193864; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=1AdI6VgavsPYoDm4OezW7Aw/oko1M4Tdgq3gnzd4Y6Q=; b=jGfQc1w2px0aB0pYD6X24Tkj/OvcK+fOvmZffDSVru3XXknG+qCWeRXDL9EbMHB8bc 4Yr5SPoWjwBSV914d7v9Tv0LcgesECJWmHvAE57ZaUmrPfTYb/E/0XQKmKSZf+E64eQw gT497kPLW0RNKI/IkXz19FlrS4J0vpCOWs1axaNs+MYKBbC4l7tsVHAG9EExXG7N4oA1 dDds3F2GY/579dThLQECDCxc4oYJckiQPtqKh1BnGIvMonXkXdV09BN+0sNxMm56lIq3 x2p2JoXNQMg4RUFBtCKoIkmkS6eomvQ7qyrx+0tmPDysUENmmUltw/b4/ze027HL+8/n yKEQ== X-Forwarded-Encrypted: i=1; AFNElJ8KDfr0V8rnhjgas+/PwA/ruklZJ6abVISsEL+P+YlCBegcPuppnoifeKOFEKUkusoniJpW+s8yNR5XqWE=@vger.kernel.org X-Gm-Message-State: AOJu0YyJGPBmyypAk+bkJdyiQqWOZ0QWHk9Ztx5GdNCMzmQnOM0YE10o IN+Vb0Oq1vkAJoO6tWoM/8K34AkSPMCkl2ZV7dQR++UNBypoWhVer3Ecf6/eJqAEyg== X-Gm-Gg: Acq92OGu2a3Bv/i72xj8FtQM09odOkuKaTs45QHnfiI4C8blsjkOLVCfZEAi5/9FGD0 VBZMojDe3AHlbvPkOntnTtsZ5+2Bw4sS4GtJ49PwFjmqIIXdh5WdnDAL6bYTaNaWiuYaMmrhDuS YS2ziquoncT2o989u948m4KUfxdFyYciZMio2o9RAV/oFzZRvmt7Fw13oTXJ/KLP0AzSAAmoZ+E 68LyrInrAQtzcJ6dauJWa1sThH+4YbKVH8NSGo97ceIOJT4jeNUGn3Z/3vOWIzB/SDakfJONc89 QZ9N5hagiOpoPyA7BupxfQpN7mQ1vCWLHm86skD0ysQ+iS4/A185ixLDD8LHbc13RfIeXP9MdOx qM3/yMuSRV2pSQFaE2RcYcZGTClv5dg5x0ZHhwPnWt1Wh5acoGJ92cqE9etERnoirXED5BBbZq0 J8uo3l6psSczRQuv95Q4LIl2pW0AAQKqhUewY789M3PKCtGnMYRP7M3rPIJAfINejARQ/V7CebU Q== X-Received: by 2002:a05:6512:3dac:b0:5a8:6e64:a932 with SMTP id 2adb3069b0e04-5a8e31ec7camr944916e87.32.1778589064250; Tue, 12 May 2026 05:31:04 -0700 (PDT) Received: from ribalda.c.googlers.com (11.36.88.34.bc.googleusercontent.com. [34.88.36.11]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a8c66facc2sm1861344e87.22.2026.05.12.05.31.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 05:31:02 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 12 May 2026 12:30:55 +0000 Subject: [PATCH v2 1/5] media: uvcvideo: Fix dev_sof filtering in hw timestamp Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-uvc-hwtimestamp-v2-1-3c2905c733bb@chromium.org> References: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> In-Reply-To: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org, Hans de Goede X-Mailer: b4 0.14.3 To avoid filling the clock circular buffer with duplicated data we only add it if the new value sof is different than the last added sof. The issue is that we compare the unprocess sof with the processed sof. If there is a sof_offset, or UVC_QUIRK_INVALID_DEVICE_SOF is enabled, the comparison will not work as expected. This patch moves the comparison to the right place. Fixes: 141270bd95d4 ("media: uvcvideo: Refactor clock circular buffer") Cc: stable@vger.kernel.org Reviewed-by: Hans de Goede Tested-by: Yunke Cao Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index f6c8e3223796..cbf67c17a49a 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -583,16 +583,7 @@ uvc_video_clock_decode(struct uvc_streaming *stream, s= truct uvc_buffer *buf, if (!has_scr) return; =20 - /* - * To limit the amount of data, drop SCRs with an SOF identical to the - * previous one. This filtering is also needed to support UVC 1.5, where - * all the data packets of the same frame contains the same SOF. In that - * case only the first one will match the host_sof. - */ sample.dev_sof =3D get_unaligned_le16(&data[header_size - 2]); - if (sample.dev_sof =3D=3D stream->clock.last_sof) - return; - sample.dev_stc =3D get_unaligned_le32(&data[header_size - 6]); =20 /* @@ -664,6 +655,16 @@ uvc_video_clock_decode(struct uvc_streaming *stream, s= truct uvc_buffer *buf, } =20 sample.dev_sof =3D (sample.dev_sof + stream->clock.sof_offset) & 2047; + + /* + * To limit the amount of data, drop SCRs with an SOF identical to the + * previous one. This filtering is also needed to support UVC 1.5, where + * all the data packets of the same frame contains the same SOF. In that + * case only the first one will match the host_sof. + */ + if (sample.dev_sof =3D=3D stream->clock.last_sof) + return; + uvc_video_clock_add_sample(&stream->clock, &sample); stream->clock.last_sof =3D sample.dev_sof; } --=20 2.54.0.563.g4f69b47b94-goog From nobody Fri Jun 12 21:40:32 2026 Received: from mail-lf1-f44.google.com (mail-lf1-f44.google.com [209.85.167.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7910A38887B for ; Tue, 12 May 2026 12:31:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589075; cv=none; b=Hi2SipUowdnP4ERIqlnNLTaPCek7uyYv12+MQg7tCBwnarzUFv5dY01QL6RAhRrC9Ma9fLTQTr3SSAP7mlgBjixV7wt578XIGF80AUGdKfGHyF5b5NApUZtcwljj8H5Do9j1GstvGS9/edLaJityoiSRJd96kgqDgl1Gl+H6PTM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589075; c=relaxed/simple; bh=PyPstSDPnSS7go2Eeoifto3b0yR6kerSh2wHnfrgQC8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nGi8JMORYbCj9SRB2hHLi2ZHZjrWj4PAUys89XWp1Cv0Lr1t2yPl/RPy4x+iKiIMC2mhSYatJPPKlxHAiiFLU0mPF8FIeIuB+b7RBLrtnx57qfFrNienLtx/krJaAOav2cqa1k0x65v6ui12YVROeEy6C6o7g7Ak2m6sqTbNB2o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=DWKZPVYu; arc=none smtp.client-ip=209.85.167.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="DWKZPVYu" Received: by mail-lf1-f44.google.com with SMTP id 2adb3069b0e04-5a62f43b76aso4717817e87.3 for ; Tue, 12 May 2026 05:31:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778589066; x=1779193866; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=tn8yR9axPkcG+PDvfr1W0s/qaLqZqhB6pcQAbzPTKls=; b=DWKZPVYuipI5YjoJWvErpuVrVH+RQ3HKWEZlL9o7QygdYY5/0lmuC2NIbFa0yUPuSg R9TdzCaeKAodbc5z8Z4KXXZ+OTkSCHNgjw45kLDh2ze19sH+vNmd4M7sY1+S1wUAI7vQ 9diag2lx/ra+l5UoEApLcJP02XDCDhTzhzkDU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778589066; x=1779193866; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=tn8yR9axPkcG+PDvfr1W0s/qaLqZqhB6pcQAbzPTKls=; b=M2OJ2f/lKNZc0ORxxcRqTxkFidgjQwlyNydd0tUUnP7veePXSVFCneYHueIzEYeXKG /FoXQ44myNtzMebKxoPx4Ttx/9wS6OtAqeTmis6H0wSh7rvysmtpfyN95rKPLBm3IIeZ yKC3KH1XFh1PsoU9ABm2h6ERfiiogfUtfsGSmt9ddK1IpBCcHG79IpNjwa/YHSgQq210 jP0iWgjYV7z6xPc8rLPICJAsCrikBRne22X4kOIlZOH9OZvV9uJ4AhM4t7Ef03r4y4LV mySPbc3bYXr6SQxVzItLcGXBm3DmD7DTrU445ATr9izAnkG7AGmZ3IFIMZrgmEwCzsOS LPpA== X-Forwarded-Encrypted: i=1; AFNElJ8LeLzdEZbyhVwgkBQJmG0AL7WOnh82TEk2ISDr595YT4QgFYumqcwrdV8EyO14f9JzIt/AaAot8pPGoJA=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/+RoJeQKvuipgpq0vamU/2xsmgoqiZK/65b7y8k18tjwUwgeH Qnks+m4ksM5hsggm1008OB0gYIA/7t4YDC2vX8GksZ7RaTH7TLSo62SzSZEHCUjsmg== X-Gm-Gg: Acq92OEjtHUaEdggnxAuVsT3nm3SLOqDEcAN72BW4NIbM27/RW9lYQ90sjC02frGHal VHm7vbQKe4QMzuizonGHtC3s0hWops85nD0ybdHBMFkdKh2c6qluB6cZGX3bkAIKPKXjqK2G/9F gSuQzeaer+/ZqdQZ4A3s9h6O5yM27GWM3R1g5D/d2grd9MWzGa+dlgyKA1r/68BW3qW7gIAJNKU TrF6Uq++be9eYksc+9dcX8tIsjIgk6vRrM9UPg4/0Sp9ttDjbHas5EJ8eEhUvSWWkiEMpEGs5OM ZUzFJ3PluRGajhgb733JJJbzd6z4YAgP1dOmazvsplDgR7g/kS9/HY8yVAOmQ7r7nb7khuYCtV+ 0tD9f+VqoykyIOZRqoR1oMDhe4r/nk20W5GMDvfrWTxTQ0EMYl8LvPNncB1f5p+sa9CZS/ftfJt onVKGZrUYXwcJITknd7lYiYFFsn6Lm/9IXNifwCwJmdKTyJr3SNb8lUm9lCrpCsvZ/e4afPahSS Q== X-Received: by 2002:a05:6512:23aa:b0:5a8:9135:128a with SMTP id 2adb3069b0e04-5a891351b9bmr7594663e87.15.1778589065945; Tue, 12 May 2026 05:31:05 -0700 (PDT) Received: from ribalda.c.googlers.com (11.36.88.34.bc.googleusercontent.com. [34.88.36.11]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a8c66facc2sm1861344e87.22.2026.05.12.05.31.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 05:31:04 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 12 May 2026 12:30:56 +0000 Subject: [PATCH v2 2/5] media: uvcvideo: Use hw timestaming if the clock buffer is full Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-uvc-hwtimestamp-v2-2-3c2905c733bb@chromium.org> References: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> In-Reply-To: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org, Hans de Goede X-Mailer: b4 0.14.3 In some situations, even with a full clock buffer, it does not contain 250msec of data. This results in the driver jumping back from software to hardware timestapsing creating a nasty artifact in the video. If the clock buffer is full, use it to calculate the timestamp instead of defaulting to software stamps, the reduced accuracy is less visible than jumping from one timestamping mechanism to the other. Fixes: 6243c83be6ee8 ("media: uvcvideo: Allow hw clock updates with buffers= not full") Cc: stable@vger.kernel.org Reviewed-by: Hans de Goede Tested-by: Yunke Cao Signed-off-by: Ricardo Ribalda --- 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 cbf67c17a49a..19a2880e0dc9 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -834,15 +834,22 @@ void uvc_video_clock_update(struct uvc_streaming *str= eam, y2 +=3D 2048 << 16; =20 /* - * Have at least 1/4 of a second of timestamps before we - * try to do any calculation. Otherwise we do not have enough - * precision. This value was determined by running Android CTS - * on different devices. + * If the buffer is not full, we want to gather at least 1/4th of + * timestamps before using HW timestamping. We do this to avoid jitter + * on the initial frames. + * + * If the buffer is full we would use it regardless of how much data + * it represents. This could be solved with an infinite big circular + * 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. * * dev_sof runs at 1KHz, and we have a fixed point precision of * 16 bits. */ - if ((y2 - y1) < ((1000 / 4) << 16)) + if (clock->size !=3D clock->count && (y2 - y1) < ((1000 / 4) << 16)) goto done; =20 y =3D (u64)(y2 - y1) * (1ULL << 31) + (u64)y1 * (u64)x2 --=20 2.54.0.563.g4f69b47b94-goog From nobody Fri Jun 12 21:40:32 2026 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 299B838887A for ; Tue, 12 May 2026 12:31:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589078; cv=none; b=p9gKXtxzL/gI8RuAWhZm9WbDpWsnFPJzagO40HF3mAsr2rIQbVBAwb8qU5XqcjlvOfA4BHETspEiRE4ulhQvIK1bNNpbl6f89fhZ/SiyCc+/BWr/8q/3s85pkPTL/l5IYFhyPSXCkeV9Sq/7eNBvGzu5HD37CIr1DE/FOZRdvKI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589078; c=relaxed/simple; bh=QXZqxLkq5iFv9Y5EXJVO+rFjPbN/6N4mmA5gawFFR8Y=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CIx4CS9jXOs/OGiKSKxIG5Rw9D62yRP2fTYwHC+nq6NUoKj6sweNjZY4ZDdIpuPaXshOoWW+Hs1IlaA3dzdBmByELsrJvnx33ODD0wMcOPleg3kGBu2WlTEg2z6hGdSoNAOWWadVu2t3Ye2rdxd8JawMXkX874FV69bXFMSBFUQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=dYZht6Es; arc=none smtp.client-ip=209.85.208.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="dYZht6Es" Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-39393ec4ed0so47851321fa.0 for ; Tue, 12 May 2026 05:31:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778589067; x=1779193867; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=m9zYGesGzTkd0DsUCizsvVcECB6Unr6npXv+sKC4A5I=; b=dYZht6Es1vqFhALhcGKBJWB+hACU06x1HdhjWN91c+4Nr974wzyacmwo+qewTfkvbv 4GN6ie77hgwwQ3VdBpPtzVOkAtHqkYHfJPCP2Y/NwlNe9Tmj3EUgnqr1QnT2kPHbpLCC TIldZNzg/cxqvRn9XymdM/nplaBQBQUyqTWb0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778589067; x=1779193867; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=m9zYGesGzTkd0DsUCizsvVcECB6Unr6npXv+sKC4A5I=; b=Jv7b17AAnkPk2lwO6nndK+Fy2juRNAqh2umJ2iIr9qbK9Qi6pQAzFuheUdkNZmJfru ki9S2GS4edKzSFXdPczN1Tax/WSW7ZVCXlU8vY8t8gNt7lh7Wty1q8lj4WIwpHbF5CK8 SQBwplijqIp2BmWv1rMExduxI+socX2EaRDq1Qr4W9mQXtVf7aU1tLPVaJQ2+hCC0EQb 8Biy2gsNuVwp58LpMaBkdhmOEZ83euM1C/vBzX3XLeWmGiCVbciwx9Vd0F/9I3wsXGPy aCL0nwu2/uJPOlFs44o0eu+h1wZt9siGyAR7JBkJJOXHO0f1AagnaueCAwE9Tm4SS1+t Wd9g== X-Forwarded-Encrypted: i=1; AFNElJ9HUlSbsq4i7RnSyzY+BaH1nFdfJ09OeT0Z0oDk6ruxGr2egBjway9363q0PdjpSbh+cEKr0nRKck54YEI=@vger.kernel.org X-Gm-Message-State: AOJu0YzwtXPnok7ZPsFUhcdJTwcr9sdegFFGQTyy2JBLAtIw0/Ei8OXp 2J83hscJW8QYtdDyMhrWtiHSawgZsE18Rg8hxUX0kqP2irvqN3YWES5JO0IBMFTDzg== X-Gm-Gg: Acq92OGPiscgip+V2lBQqRr1r0izZD73MxFeN9OVXQf1n6bn8Am2n0/OOFuU7XhJ4j/ +XGJDyrSINr5xbwkQXjJmHrnMQ0fh3A/wAL3St1ri3ZL43KyuGuEovtnKpvWl5Aqo54mqWJXaAs 7X97xIq/s49o2LPAmfeNTkQTtKW9n0EUqqn+twKnnnOSei9JV8jzsAGEzrJxvn3zoDqAwgut6TT yXWkikoJEyTIIu7ARL8nWU0egFbx9Xa1k+IAgrPMdNj2Ql1+WKUQsshkLWmZ4vS5QuehbcXgWr/ /0G5s322f+8kYHTBcXBoOWeEZ/GUxAUI0ha9xJV3m5A/RoPucEEGU1LG+JXNiYfAeAVppWjxDob Uq6MWnt5YoaIlrpnBzOMN4hxQ9Hfxd+j/rT1vm1MWl9pN1SkkYvDRvyYN4nalSNIxB3vkOnIQiC 2VfuxDnHpD3ug7bBIfBPov1R1DrxU9DZv6DFAWTFV+TvzbWdnpr7eEmCPB9NecEjPF9gRxZXI9P Q== X-Received: by 2002:a05:6512:124c:b0:5a8:8db6:b1f with SMTP id 2adb3069b0e04-5a8e31e0f56mr917863e87.24.1778589067182; Tue, 12 May 2026 05:31:07 -0700 (PDT) Received: from ribalda.c.googlers.com (11.36.88.34.bc.googleusercontent.com. [34.88.36.11]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a8c66facc2sm1861344e87.22.2026.05.12.05.31.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 05:31:06 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 12 May 2026 12:30:57 +0000 Subject: [PATCH v2 3/5] media: uvcvideo: Relax the constrains for interpolating the hw clock Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-uvc-hwtimestamp-v2-3-3c2905c733bb@chromium.org> References: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> In-Reply-To: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org, Hans de Goede X-Mailer: b4 0.14.3 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: stable@vger.kernel.org Reviewed-by: Hans de Goede Tested-by: Yunke Cao Signed-off-by: Ricardo Ribalda --- 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 19a2880e0dc9..093186308eac 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 *stre= am, * Clocks and timestamps */ =20 +/* + * The accuracy of the hardware timestamping depends on having enough data= to + * interpolate between the different clock domains. This value is sof cycl= es, + * this is, milliseconds. + */ +#define UVC_MIN_HW_TIMESTAMP_DIFF 100 + static inline ktime_t uvc_video_get_time(void) { if (uvc_clock_param =3D=3D CLOCK_MONOTONIC) @@ -843,13 +850,13 @@ void uvc_video_clock_update(struct uvc_streaming *str= eam, * 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 !=3D clock->count && (y2 - y1) < ((1000 / 4) << 16)) + if (clock->size !=3D clock->count && + (y2 - y1) < (UVC_MIN_HW_TIMESTAMP_DIFF << 16)) goto done; =20 y =3D (u64)(y2 - y1) * (1ULL << 31) + (u64)y1 * (u64)x2 --=20 2.54.0.563.g4f69b47b94-goog From nobody Fri Jun 12 21:40:32 2026 Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 93F7038E8DE for ; Tue, 12 May 2026 12:31:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589078; cv=none; b=KO9e6wHyF+/ZN1BJ0NQfo20zq3py9N+16b+/d4d4Eb7IsQnbUfQbJdramj516l9gU5iwlbUKc28fLFpqiudjpZu7WmIGzEylOTxloxaGUf8hrweK5aVwdteHRZg415pLp3ZqKYLxI9TBgbfuO3AQ78DTqfO2gPxKdCAM0j9m5TI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589078; c=relaxed/simple; bh=Da2xgNXyPA++qo4a3AVVh/CrbIYpXjUjeW3H+9Mq4SY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eOH0GTLx7bWuLZ8L/alFj28HR0jrD2nhqXjcQo7MoFdeRR7vyC57N5ULXqcxiZXnZ+saHFnUuI27mvtLA340vKKP2YIZ8p1NlefcWbIQhZXFLotLDW6z75C2MDh9A2xZ3XoWa8/lSEauZN5wrHxGB8Pp4jKIrL2MTCKrxc4KRZ0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=eKgZh4P7; arc=none smtp.client-ip=209.85.167.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="eKgZh4P7" Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-5a746f9c092so8572864e87.1 for ; Tue, 12 May 2026 05:31:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778589069; x=1779193869; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cY1eLcRD4F4XK6/iq2cI2ENR4Yo5ocParDIUGJvyGEM=; b=eKgZh4P7Z+MDhnHyvFEO4ehSw6xxQlbOpOUNc/YWGaYdm4oAj4j315jKtL89LQ2Kw5 kywprRPerNBpR2oFX6RjDSX3pNmdOHEdQiytXWvX8X3dFCQo/5VG6L/iKqbGXsi6emKD LbwXw4gA9EMV6plh9vIRnPT50k6Dr1MLR5hnE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778589069; x=1779193869; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cY1eLcRD4F4XK6/iq2cI2ENR4Yo5ocParDIUGJvyGEM=; b=k4WU4ULD+tGNP/EiKwgvXyn1wY1cmsy8U8ipPy6+3iAHMWGkjf1AKRwnZHyTGFW900 NuMVZpY91NWnxEIhrUnmTXRnX77G9LrhmALeXPzTIoUJxLy38+47AsEqphR18LuFadnm m3mhd3Hw3kkWn6gFMkI4/khWKHuaP+7ainSr9aLw3rrEWcIoVKe9PNz7ILPUENA8CgCe BcG2kCg96Yoj0CIN0Xv8wAzZnAJCNpNOt2Nhnc+ClbET+HuHAd9M825WbqRGsUJYOA+V a6riH94RJF9FVb2i4+FAEIxUc/HZMAITh6ngUB26PnFfGO7MOdF4tHmwT1mnfp15N44h /YGQ== X-Forwarded-Encrypted: i=1; AFNElJ8/xKUzmHjlvHfZ2REIDi/70O7abn49S17HIsOuC4q62+FEKczekCHqvctERAg2+iex2J3cKw4Nr8lVsN4=@vger.kernel.org X-Gm-Message-State: AOJu0YxC95RwXFcRJ5w4g/nlK8RWXPzRrCER8SjVABE7gSbpfov/NC2T 2+ydjvFAszv1Q9G6XhFgytWRRW0zskvvAUoELU2wWG2u5NAasZylpiSnS8L0WGXzgg== X-Gm-Gg: Acq92OFYY7QLQYQb3aeeFA9bMHWWj1tXkqLp2bUBCYhf3kyNBa+2lbVrDilxnn4WBqt wLTvWMyGO4hM4LbhTy5Rc2HUziMq7gcNS/0krB/d7aoPNbZzZHuV9A1uMIIhvnCsYznGrq+VXV4 89Gc+pXUenOJJT1ZGE/7y35YRtd7kmO6Skf8uXIYjrYdv2HhYrx7gECz1jhpvQ5BC4p7sVmBRHZ 8T16MNurPd/qRC0FszciqqtmAs71lXOi/stC0g6djZ6T7y69jvxzz88jec16lMvvsKFe1xcS7j+ UaZzhgdWbZHkmWyR5w2YAsdWmGR5A8Z03FJaIHu50WOuuVCB8Ym0Am5SqZP1LnOVWvFakjwOome sweNDT83rHPQCrsD4UX6frnh3p29qx2EfJynmJ83BZKFdKMixEf+9i36prJiDMO7Tf8Z0v3RO/T tw+PvALDD429hjlHBPBQp6X0fYedzzCZ3zR3yu0pYCrKqH+HIw7DZRqyAMqZI2uDgEUO+XVebP6 jx0VP+7i3oY X-Received: by 2002:a05:6512:22d5:b0:5a8:e129:af6f with SMTP id 2adb3069b0e04-5a8e129b003mr931546e87.23.1778589068566; Tue, 12 May 2026 05:31:08 -0700 (PDT) Received: from ribalda.c.googlers.com (11.36.88.34.bc.googleusercontent.com. [34.88.36.11]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a8c66facc2sm1861344e87.22.2026.05.12.05.31.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 05:31:07 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 12 May 2026 12:30:58 +0000 Subject: [PATCH v2 4/5] media: uvcvideo: Do not add clock samples with small sof delta Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-uvc-hwtimestamp-v2-4-3c2905c733bb@chromium.org> References: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> In-Reply-To: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda , stable@vger.kernel.org, Hans de Goede X-Mailer: b4 0.14.3 Some UVC 1.1 cameras running in fast isochronous mode tend to spam the USB host with a lot of empty packets. These packets contain clock information and are added to the clock buffer but do not add any accuracy to the calculation. In fact, it is quite the opposite, in our calculations, only the first and the last timestamp is used, and we only have 32 slots. Ignore the samples that will produce less than MIN_HW_TIMESTAMP_DIFF data. Fixes: 141270bd95d4 ("media: uvcvideo: Refactor clock circular buffer") Cc: stable@vger.kernel.org Tested-by: Yunke Cao Reviewed-by: Hans de Goede Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 093186308eac..8d0fd7003c62 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -544,6 +544,19 @@ static void uvc_video_clock_add_sample(struct uvc_cloc= k *clock, spin_unlock_irqrestore(&clock->lock, flags); } =20 +static inline u16 sof_diff(u16 a, u16 b) +{ + u32 aux; + + a &=3D 2047; + b &=3D 2047; + if (a >=3D b) + return a - b; + + aux =3D a + 2048; + return (u16)(aux - b); +} + static void uvc_video_clock_decode(struct uvc_streaming *stream, struct uvc_buffer *bu= f, const u8 *data, int len) @@ -664,12 +677,13 @@ uvc_video_clock_decode(struct uvc_streaming *stream, = struct uvc_buffer *buf, sample.dev_sof =3D (sample.dev_sof + stream->clock.sof_offset) & 2047; =20 /* - * To limit the amount of data, drop SCRs with an SOF identical to the + * To limit the amount of data, drop SCRs with an SOF similar to the * previous one. This filtering is also needed to support UVC 1.5, where * all the data packets of the same frame contains the same SOF. In that * case only the first one will match the host_sof. */ - if (sample.dev_sof =3D=3D stream->clock.last_sof) + if (sof_diff(sample.dev_sof, stream->clock.last_sof) <=3D + (UVC_MIN_HW_TIMESTAMP_DIFF / stream->clock.size)) return; =20 uvc_video_clock_add_sample(&stream->clock, &sample); --=20 2.54.0.563.g4f69b47b94-goog From nobody Fri Jun 12 21:40:32 2026 Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 170F447DD43 for ; Tue, 12 May 2026 12:31:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589081; cv=none; b=UBmnk6/RwQDcnzlUEHnaQYJE7U2quGoz+ivr++QbgLgDjfx24cAPNY+OWWXdNPLbgBaNqnFdCg6r4Q3zZoOWan8ympJfGHu1cp+iU9NXVkzWPqx0Kq0aF6fULfXYZYF3GxAxio3A6DvFQ9xReNjPPGFv2VqJndvLz49uCqUmtPM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778589081; c=relaxed/simple; bh=l9FXCUw60GnCzKXcX5xUJTqEOuVJb0iD37iZBXVS9hw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Ot+7jbH6sEF6ww00E5Vt4/t9HnOc8dSmpcdexYVLlRjz+1SbzzSJb2n2yIM7vd3e52zFW5ZtDXLYW6cMsx6tzumxJmcXthEOVQuYVvNcr0EAL/gkGj/H6UFP84M0ebhYQ9gzPmBbTlhZ02dwg/JDeLghH8Diz1m5GiIgyfTuXrw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=f5FTEE9e; arc=none smtp.client-ip=209.85.167.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="f5FTEE9e" Received: by mail-lf1-f45.google.com with SMTP id 2adb3069b0e04-5a877510541so5674073e87.2 for ; Tue, 12 May 2026 05:31:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778589071; x=1779193871; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=GVh1akv6yDpLSRpVscSXtSxbkx56kM04oh1jXo8Wj6c=; b=f5FTEE9eR5usAZ/1GdkR9MRdOtbmKiWX5tDuG8PEoyNs9BEC+ckQwsHUB47mFz31jm 0/lGwMusjf5Z99P4j+Incx92+pASr4Y6xJ1oSZrPya+ZnoK9h8iQ3lwj2oe8R/y4LS5h 7piZHCsCwOEjqhP/TQVmNGZ55SHM+3/yhOp+w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778589071; x=1779193871; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=GVh1akv6yDpLSRpVscSXtSxbkx56kM04oh1jXo8Wj6c=; b=W7NwVquJKtvuKRmaB2C/FFeH1SskqIsSC8HBzxRkYCcLni9zV8VqskS9teJkymPnDc aF0CZUJVSP2C+pSKInLFj4dYn3Z8fuvOpERKtdu5JVx9xQmPPT03+oIqnscajfZdGUfO YhpeXBI3xWUElcGJEKTBl+rNMCt7F6pnkxT+lw0Bad+MY+7NP9NxvvpX4s8f8kdjywCX ze7V0D4ebmChzVhUORkipwo7FEHGnCvygz8Fw00uOPUP4DBCWi2ngTtKVuWkV4G0pp5k r01P3IIH6jj5T7TuNvHc1yeiaIx6U1uyVgx3ktqqn09pwrxMC8cPxfq2QUHFqcbMg/xD Bhng== X-Forwarded-Encrypted: i=1; AFNElJ88RukBesLbzqZft8+xqrXui7xpzMyKANHUnuK1ibja0ce0GsiJlr9UuJcIwW4XjBt8zLNFUxsxyIWb1+c=@vger.kernel.org X-Gm-Message-State: AOJu0YwDkfxBzNx/I5LbIp2Y7RSc6GdT6RnN+3gkBK4HWgkXpJUPE2aw 0hBVvke+PitMwWp2BBnX4MnvTEANOCGiZZMaL0PpP9NVdYdRfFhiTT7KVGZ02z5n7g== X-Gm-Gg: Acq92OFG63rA7d9JSZu3xC94L4RlPc9F1wGH0S6rlta0sXktdfpC0qBlENNOaMrzGIV o3Y2/9PLvGAkYS6xp0MTm7pjdVJVcDLnZuW8A2L+UgmxpG0JaK4bGY2kIi3kYiajnI26OTqAdla OkTr7N2vNLlA3Rdl060eVchPVdIsUhS14wADblp7bqae4q4Qlkv1139a2kv2eu03i5MBlbd82pt pTJjfgDYxdwWkQPT9snvUZeFxPj2P8jRV1galXwv3XE3wM8/nClYXKdFQk9NRbrkjWi3CSed7qp yvjGaOtBm7uKnmVMY6l1Lzuk6yR8RXWpTWbuOil8Jzm1XREPLLPzQSi/fBsI6VGktocOX3nvhq0 lvudKo7v6Znd27w1DHLG0Wr8sEeNyKHFpNHlBZAkw0iyahzhJLi+NIobwO+nGDFbTBWYA+JOysm CIZfurftX7TUdlGZ5M4RhusV4HV/hKHEEscUK4jEqY+uKnVd8fU2OlUbN2HgBWoZ0VZGoTcmE8y A== X-Received: by 2002:a05:6512:1050:b0:5a8:87eb:b118 with SMTP id 2adb3069b0e04-5a8e31e7903mr1154240e87.22.1778589070750; Tue, 12 May 2026 05:31:10 -0700 (PDT) Received: from ribalda.c.googlers.com (11.36.88.34.bc.googleusercontent.com. [34.88.36.11]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a8c66facc2sm1861344e87.22.2026.05.12.05.31.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 05:31:08 -0700 (PDT) From: Ricardo Ribalda Date: Tue, 12 May 2026 12:30:59 +0000 Subject: [PATCH v2 5/5] media: uvcvideo: clock: Do not run expensive code if not needed Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260512-uvc-hwtimestamp-v2-5-3c2905c733bb@chromium.org> References: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> In-Reply-To: <20260512-uvc-hwtimestamp-v2-0-3c2905c733bb@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab , Tomasz Figa , Sergey Senozhatsky Cc: Yunke Cao , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Ricardo Ribalda X-Mailer: b4 0.14.3 We only save relevant samples into the circular buffer. If the data is very similar to the previous one, exit early. If the data is not going to be added, do not calculate the wall time. Suggested-by: Hans de Goede Suggested-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 20 ++++++++++++++------ drivers/media/usb/uvc/uvcvideo.h | 3 ++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 8d0fd7003c62..ea8a76f57963 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -524,7 +524,7 @@ static void uvc_video_clock_add_sample(struct uvc_clock= *clock, =20 spin_lock_irqsave(&clock->lock, flags); =20 - if (clock->count > 0 && clock->last_sof > sample->dev_sof) { + if (clock->count > 0 && clock->last_sof_processed > sample->dev_sof) { /* * Remove data from the circular buffer that is older than the * last SOF overflow. We only support one SOF overflow per @@ -606,6 +606,12 @@ uvc_video_clock_decode(struct uvc_streaming *stream, s= truct uvc_buffer *buf, sample.dev_sof =3D get_unaligned_le16(&data[header_size - 2]); sample.dev_stc =3D get_unaligned_le32(&data[header_size - 6]); =20 + /* If the sample sof is very similar to the previous one quit early. */ + if (stream->clock.last_sof_raw =3D=3D sample.dev_sof) + return; + + stream->clock.last_sof_raw =3D sample.dev_sof; + /* * STC (Source Time Clock) is the clock used by the camera. The UVC 1.5 * standard states that it "must be captured when the first video data @@ -644,8 +650,6 @@ uvc_video_clock_decode(struct uvc_streaming *stream, st= ruct uvc_buffer *buf, if (stream->dev->quirks & UVC_QUIRK_INVALID_DEVICE_SOF) sample.dev_sof =3D sample.host_sof; =20 - sample.host_time =3D uvc_video_get_time(); - /* * The UVC specification allows device implementations that can't obtain * the USB frame number to keep their own frame counters as long as they @@ -682,19 +686,23 @@ uvc_video_clock_decode(struct uvc_streaming *stream, = struct uvc_buffer *buf, * all the data packets of the same frame contains the same SOF. In that * case only the first one will match the host_sof. */ - if (sof_diff(sample.dev_sof, stream->clock.last_sof) <=3D + if (sof_diff(sample.dev_sof, stream->clock.last_sof_processed) <=3D (UVC_MIN_HW_TIMESTAMP_DIFF / stream->clock.size)) return; =20 + /* This is expensive, only do it if needed */ + sample.host_time =3D uvc_video_get_time(); + uvc_video_clock_add_sample(&stream->clock, &sample); - stream->clock.last_sof =3D sample.dev_sof; + stream->clock.last_sof_processed =3D sample.dev_sof; } =20 static void uvc_video_clock_reset(struct uvc_clock *clock) { clock->head =3D 0; clock->count =3D 0; - clock->last_sof =3D -1; + clock->last_sof_processed =3D -1; + clock->last_sof_raw =3D -1; clock->last_sof_overflow =3D -1; clock->sof_offset =3D -1; } diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvi= deo.h index 0a0c01b2420f..7b8477e5a0ba 100644 --- a/drivers/media/usb/uvc/uvcvideo.h +++ b/drivers/media/usb/uvc/uvcvideo.h @@ -522,7 +522,8 @@ struct uvc_streaming { unsigned int size; unsigned int last_sof_overflow; =20 - u16 last_sof; + u16 last_sof_processed; + u16 last_sof_raw; u16 sof_offset; =20 u8 last_scr[6]; --=20 2.54.0.563.g4f69b47b94-goog