From nobody Fri Apr 3 20:54:51 2026 Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) (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 2FC883A6B88 for ; Mon, 23 Mar 2026 13:10:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271439; cv=none; b=fZCvvQSCvfaKysC17E8lpZEfalUQENxSREdghnC3dCHMBFsqGGF953Tbcr9uowvA7JvWQ+QrTso1dyO9S4adABA/s8bSdfF5ZXXLnTJwyb0Xt32UkJGDwQf+3zvgiwAzEiaoK/pFnP+eqkbeSuOfgDSA/MHZDJlpzFNf76GuPBE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271439; c=relaxed/simple; bh=Dik3qCI9WwYhQtWNVwsHglbalL0D4dBZsnePm7m7Hjk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nVCdRMFFBztd4VdOVR7Kl6UZEw+umwkARww9A/tGqF4nMktEEn5E/UkHpBZ2ntAWYyM+BrS8axWMD8+WS90dyOq+kIj3AhJXcWGKxhTg4uVwB31UJX4CmhMeBbLeTj7qCo7tAcUlXkx2OiT1q45hytcZy8GY6ytcuX2kuFcTqCU= 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=NtdAjaCv; arc=none smtp.client-ip=209.85.208.178 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="NtdAjaCv" Received: by mail-lj1-f178.google.com with SMTP id 38308e7fff4ca-38a01c80c34so32050231fa.0 for ; Mon, 23 Mar 2026 06:10:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271435; x=1774876235; 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=l9dStjhiWrEZzM9Aql0LQkX++HFAYapf9Vi1OVY9kvs=; b=NtdAjaCvIlgJ44VFq+QAflHjV8aLwP9c0INLCzifuk0kwJ7TR4kbIzrni0cqXvRxUa a0gMG0YST+t9i4I9XX5ddX+TUG6xxCKoXd/t4TxfAC0LagLgVd60U4HZerSSpIB9/KjJ ZebhO8eyrdySNBxYfX+QkDA6OpLtYfFAd7qvA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271435; x=1774876235; 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=l9dStjhiWrEZzM9Aql0LQkX++HFAYapf9Vi1OVY9kvs=; b=PCxq3m1DBhZve94NgV1EM+JypaUy8taAiXEqWA8UomzF1jcT0d6r01wo45EYelA5YU RHmGD0gK97w3W9Ix3SrOvD42ymDp21/n/Kz5pJd56dTTvenQe0JUzvaWVLwM1agSOeam lR5UI/L0SLnB3p7H3k3Hjaa0fDPz+McjWkloIvIlLDIHGM7hILGhDWySHHhAI6vHyAsa +CFJDTo++vGLA8+whyp67rxao/RIXjBzt8pK6oiuXr/ws0+pu5MkO+9YD8Z9oH7fhPJD kM1tdr9wYGSBCZQL/RfhWuPUn5U2rls5OtLZZu3b55d5s/l+qwWK38QhbZfWL1r0cIl6 3thA== X-Forwarded-Encrypted: i=1; AJvYcCVybUL2hfb24jowZkiLtrQnB83DNBU6luwzTsMscHXpsUdsXYAwOrRV6681A9ATRrE/glaiwOUQZkgSeYY=@vger.kernel.org X-Gm-Message-State: AOJu0YwMEUJxeU69Q4bqaRRtCF7ur+o1ID2XMoNeuDmksm8BN3DZFIt1 Aqx7spgY+U+J4mavAXbCM4kOS/P63CVStcYlez+lHUXJLjlbXzzxm9CbsQtBH9XWmw== X-Gm-Gg: ATEYQzx4ivyFjU5nf/nAj5OoZVpg4uJQYz1HX14/NKd5WoRigYz/KeaJJeo49tOiuCt 8PJ8bGjgIfdqNeLvRdTkspBMEaRM3JG3qndtfxPipbAzjMMF/21bXBweOt20176uVMaTdtJnAf6 vXJlFPlSMPicvc6gdH8TkjcYWjqDJQ4Y+a2fsGykOceEa/1B0e/Oyyu12+UW7MNjBPgNnG4ZMas mlOwuA64zTOg7rYeY090xbpIxDZ697Bk+VRcnq97EHpuQuUt4xgEEXBYgGDIwdF60pndOIBj6oq jVYTz3mlbF0uljfjEXJepUtbi0tGVq1FNtns8YN2BGz+LZnvUZchLzDQjHPlYF64AiAs3eWzVSQ rNrfG+sEwngoc9nS6nAafX0qWqECQVRxwBRyb6LCY/R+qWp8kKqASZYLuM9ijd8f58tk1D3PS76 YvkreZSdxKU5RslpAlPwwJUq/NGHCzJy8jwDKdsHeXCTFsQJq/99w3ELOpgHZvxVGHW0/Ibqhpr m/pWh8= X-Received: by 2002:a05:6512:39d1:b0:5a1:2a71:cc3b with SMTP id 2adb3069b0e04-5a285b06943mr4155949e87.18.1774271435364; Mon, 23 Mar 2026 06:10:35 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:33 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:28 +0000 Subject: [PATCH 1/4] 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: <20260323-uvc-hwtimestamp-v1-1-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@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 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 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 40c76c051da2..6786ca38fe5e 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.53.0.959.g497ff81fa9-goog From nobody Fri Apr 3 20:54:51 2026 Received: from mail-lf1-f50.google.com (mail-lf1-f50.google.com [209.85.167.50]) (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 D1BCF3A63E1 for ; Mon, 23 Mar 2026 13:10:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271442; cv=none; b=stkhRRjwZ2McHW2dsERIXiJBOtOzy5xfoTyzKGtL/tp7+mKY797WNWvKtqae5cpebDsq70JjDlyqBkQASLGfXuxKYnSsssjXygcd620tVAjz1FimRalDDAtqdhjSpr0KSChwUDzIWPNGEz6WcnABS2EOujYrwQVJI0XZMLrznpA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271442; c=relaxed/simple; bh=vY4TcenAOFgGP74tpglPTaL2A4UIW1qGNpu9kH26VSc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pNWPpz8yGS2gMhijbFPv1ESh8oyhzhgq15zq/A2dp0nWTJ8j6jPP/tnqyzeBb5yHIGnlYdFhb1ccqAk+LNifP4rJKBO5JvpJkYPD55fBDhqjm/tqzWgaLh2oiMkg6KEwHETtNKGEU/Uu+Qcg5bXJN3i50mBl22IDQwgGEHUi0Cg= 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=OLO94n08; arc=none smtp.client-ip=209.85.167.50 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="OLO94n08" Received: by mail-lf1-f50.google.com with SMTP id 2adb3069b0e04-5a1307438ddso2913891e87.1 for ; Mon, 23 Mar 2026 06:10:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271439; x=1774876239; 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=WzNp/JcL77myXdZwPsBD1eDno+MS1KWcO+UVbGYOu0k=; b=OLO94n08y70qU8jA9GyFN2o5tEp3oLLfqEKv/9xdr6ByaqSdZcgCw5YI+0Zb1IUYnX PmGY4V7uEZTqGtLV0kPZLDC/u9OLH7AW7UJSJ/Ve0wkqwKJDl09tVvGUualpnPFvl2MD ZfXXrao+0LoiAd+2eUlQv1AOYlm6HobwOQMYQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271439; x=1774876239; 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=WzNp/JcL77myXdZwPsBD1eDno+MS1KWcO+UVbGYOu0k=; b=DonT9V/2A3ukK2sucwW8+7k04VfTcJ2FXt9N2VQ2NNoAxRuh6M4RYhZI45tu2xUsPW pcoE7dceU2j/FUYjXYEH9GUyk+//4XgAxxGM33q7wzG3ttX4ad5IhOxo7/9KZJDivTlc qwDXBWtnXsgTfLkxPnJB6UFsxXcEWHOXjji2lB6ylrlwKUw391lJUN8lHjmta5FFEt8o pTNwzKZjbsFQYg+CasjCoUr0x+vsAJkNsXgEGwf3Kc/ZjbH7G9mgEki5+m9c7uuUXnCs O8wH2h0RT+Jh/9UzHgvFD8PL2gM7rbZ+ZsRHFSUiV6IHvpOcIPJISP0qeRheFrRq1rrF b2OA== X-Forwarded-Encrypted: i=1; AJvYcCXco4RFqU0elKLs66SO+fWkobtbrTNLwRa7r73NUzTwIfUH7cAiuQlypxvavETE2R8ZfCfQQmu2WsPWtlg=@vger.kernel.org X-Gm-Message-State: AOJu0YzuugPOK7oTPAvV3gJBNSN77QhqAf9jXHOj1W6cCgx8C1MOu0al tU8XdVUTCA52HMM0Q7l8Ye1UHuNrRbzDQkXNRmCLZy13hlOVBFGtdbQvAYCQ31EoOupChBERZfh FkPo16g== X-Gm-Gg: ATEYQzyGdejQpw76nL8QuPsEIHt7nfqYKd/rBRuthKvDflRuv8/tA0pjt9lgoPT1eVv +XVtIOlmuhtfcN5QYZfbdyG0rCmgrTKgJkjYc3XKyR5wjRReB+w/QdSLCCLLvomTz8PFvITSOJZ /PU4uDoS9yzWPZT4+fFJIvikI22GTtlkyQ1SSPoWtzBelzC8D+HDp4pfZCyMddvzA8SGcHgnT0b G1zZPbrEAZXB64jjq6XzKqRU+rf8FeN2REldyGVix1aV6P1Omi3E2M5f3+yK93mp9HP2vOSyfeG TRLGVt3tDlwurOZWs0LjFiF57lXtOVn9Vgwuwp7/MYw35tfkr0kxwxUa8X6Oc2HfyXYx1s3hRdJ RJvHKZsU8CGHaPCq+8u9H4KmwdVwaKAtUAMJ8tovqF3eH+u91fDF6WB6MeVuzLie6S65tJSW3AS 1puZ1AJH70IqrHtXSPECcP1hP7okNrQR3GIWBY8abifsCZe5CCzeZfpQNGP6F36Kc9lfo2tXWny ZjZ6jI= X-Received: by 2002:a05:6512:158a:b0:5a2:7eb8:2f90 with SMTP id 2adb3069b0e04-5a285b5d65fmr3764860e87.39.1774271439020; Mon, 23 Mar 2026 06:10:39 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:37 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:29 +0000 Subject: [PATCH 2/4] 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: <20260323-uvc-hwtimestamp-v1-2-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@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 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 Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 6786ca38fe5e..c7ebedb3450f 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -842,7 +842,7 @@ void uvc_video_clock_update(struct uvc_streaming *strea= m, * 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.53.0.959.g497ff81fa9-goog From nobody Fri Apr 3 20:54:51 2026 Received: from mail-lf1-f46.google.com (mail-lf1-f46.google.com [209.85.167.46]) (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 83C473AB27B for ; Mon, 23 Mar 2026 13:10:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271443; cv=none; b=OiacTXHDFc034YVhaPZVb+YSsIFKZZfzs+Kr5+Teba0g3H4OFaJ23Cc3KfF7Y2cIrJA7gq+4XVyBI1oqeanr/8zw0Lwcq8DKCHUjmlRbgKUbEhnvbbVypwizuMEFCSlTDVADlrYHZPE6LlIfvf88fxlp6Ik3CN9N6fhPW6hcM1U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271443; c=relaxed/simple; bh=+sjG9Y89xiTyAd2WtTGciLIS9T6N5GSrKMdc4XxAA04=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W5Uk+9+VbvA+AIu1cNXsMy08reuIUGZEXwWAmy/0kTYkruVaxj8yiDB3R/nX7zWlS9g5utsT8sPRtA17LQ9QAYVJCi8eMlXzLxWZULq0zoiwVG9qLXGVAghfX3nrSrUGwvRLsCVWW6O60PCrtLerEPl9FC4TKG5GAtx/AYdBWwg= 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=bA2XrGdr; arc=none smtp.client-ip=209.85.167.46 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="bA2XrGdr" Received: by mail-lf1-f46.google.com with SMTP id 2adb3069b0e04-5a281b091c2so124813e87.0 for ; Mon, 23 Mar 2026 06:10:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271441; x=1774876241; 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=OHX78l0IWaFY465sZIyem0S3+5Hdcjbh+Os+s15sjNo=; b=bA2XrGdrfDhmPW1AYucVq1zKukGlv+tLHJrTtpwiclAGIlPMd8r+blfM4Gb7drR5xB djgI+RQsCyANMam/LsDsAwVK3fSpPcmmD/ds9xJwa1NOGOp7QcwiYHZShpI4r/k/p7zA k6uAvqlz9WSSKGBKdeH/jDVr0OLqii36rkEJA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271441; x=1774876241; 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=OHX78l0IWaFY465sZIyem0S3+5Hdcjbh+Os+s15sjNo=; b=PoV9kJ+RnaHZJgnyvPBjQvWeyzXNL1LgyBmp1TMI1xQrmoa/2jD5B6SBQhanJH2hmI P0sMTr4TKCXRHRVBU4HPhQbC6RBqc64Kxwx1es6euEk2TqoLkgtrXQ/8Ebkmq6m3hyar aHzxIIAuGD9KSHy2DZkq2bufwrmfj3oq2Yo1IrPG69tfU/SRhffYxRxwWvaUUg4KbtQo 8f8qAh1gez/CwHOgidOB4fyL4pcMSIMeHVE5csIaqF0FK3UqBvSoqGYeFto/hrs/LV8r SQVtxOFQOOR4LywlegrbM8NdLANFczdWmz3Nu7Q7OxbdxqhMjEs4rcsUOikSFqzkBGTd q3cg== X-Forwarded-Encrypted: i=1; AJvYcCWlNQj+eks/kCTIYSFa4HNxTDaqouLCqiZgs1Bv7rr2vOH7XGQ9ixSeAZUktrIAKOhjlOvkvhbZiEreWlY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxh0+wZqDB0Ng3h/qHiP4U1aVWm9pq9X6p80wY1vJ98ekYhq+Lf lv9ukS0CBIuLv/qCoUk+DB7Vg0Y3LHoc+x+g9wPoghQs1kDidGFv7ZAXWA+v6Hew2A== X-Gm-Gg: ATEYQzzhGiYDxDeUnjYMaCJQpLPGmy7mefDltHUHVEOL8PWJnstIW2b34iYsJaksLzX VANxySSes+JgvqvQaHYBo+tmxsESLqcky3DQzAv8tQt5v5BTEWTqH9iKBS6cwXx29NcsWxPtEVk Ju4Akvh9VgE+Jvt4styO3wDvQfGDBei85e5cCJqEDKOFQcz7DLapY32baHDBvBG/cJQB/BgmdwV WWov2/1w+UPEd8nVDYgdrmM/R3YzbSPe4qfrDegmcgIMUJ75P+n1GBAvTtcX10wnAqN3LQbI1yo oeyDHw1rvFjzdPTDXTl4BsjHV2CCfY2INoYgsDyhZlH16ByppL/lFFds/XTMq9xgdZhgHpsKAOw DJHY0H0fZ9x/LUHuXowQpzFh5w9taH79xc+bkeHO3lGdrmvaNsXBQom6UCkk0zkN+F6dPW5lsYf NsxiZAQVrLLZPJGWIQzyjOWPU/ug5LKm5DRyjKbLY8op+XrHueebSEkyEph+bFK9VlbNP5K0JQp iWUaYGEu0wVrfw+pA== X-Received: by 2002:a05:6512:1294:b0:5a2:777f:8323 with SMTP id 2adb3069b0e04-5a285b3150cmr3866798e87.18.1774271440713; Mon, 23 Mar 2026 06:10:40 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:39 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:30 +0000 Subject: [PATCH 3/4] 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: <20260323-uvc-hwtimestamp-v1-3-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@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 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, refactor a bit the code to make it cleaner. Fixes: 6243c83be6ee8 ("media: uvcvideo: Allow hw clock updates with buffers= not full") Cc: stable@vger.kernel.org Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index c7ebedb3450f..dcbc0941ffe6 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 MIN_HW_TIMESTAMP_DIFF 100 + static inline ktime_t uvc_video_get_time(void) { if (uvc_clock_param =3D=3D CLOCK_MONOTONIC) @@ -834,15 +841,12 @@ 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. + * Check that we have enough data to do the interpolation. * - * 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) < (MIN_HW_TIMESTAMP_DIFF << 16)) goto done; =20 y =3D (u64)(y2 - y1) * (1ULL << 31) + (u64)y1 * (u64)x2 --=20 2.53.0.959.g497ff81fa9-goog From nobody Fri Apr 3 20:54:51 2026 Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) (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 D54943A9DAB for ; Mon, 23 Mar 2026 13:10:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271446; cv=none; b=WEPWnsSbb3f+yfPyUpM3qcKLASAa4lScllVOmn91odi1CJv2mI9wVib57XBbD7WY1NgCxJc9u2sTHK1cGX3ErXhsGSLHk///uqsbcCy9pJZdvEPHyrNjR/NlTNrDFlMQes+MlatZdIINtH2JtCA66cEUWYEWVVNGM7XAPs182y0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774271446; c=relaxed/simple; bh=F309xMOsoYAt3en3fSULuoIwejw2mSILjG/RfAGmen4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jAWa/FbFIo5cdyAZYkyeDgzUsfmiYpP2/wZNQOBh98aAZPmTo2WDGWqKhKFmF/+4ewTDEKo/n7ca7+36Mznbv7T6I5khN5XQScpPgD2zhhc0BDWCjxz21Gf2itQLfm+n9QGX6KPxRFUFSgnjrx8swDUcBZX5zFRiMVYB9nZ+kDw= 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=W4FNoOAJ; arc=none smtp.client-ip=209.85.167.42 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="W4FNoOAJ" Received: by mail-lf1-f42.google.com with SMTP id 2adb3069b0e04-5a126c8aab9so3194817e87.0 for ; Mon, 23 Mar 2026 06:10:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1774271443; x=1774876243; 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=HU1BwRIgJwIonvocfX7YrDLQqPhrL3H19ZNgFff0aO0=; b=W4FNoOAJ/P0Lqq2IBz7ZOYmRaw0OnlX+2bnVbZuT/rz/SQJcXnvcfGUD8juIyFrFk/ pyB+TI2yaLKYEuSzlpaNnIixlGchvsF/Dk2S5JCfPAtKQ25ZE0qDsuaXBfuuCvjdu9VI THwN41llnsIXDmr42wpnsjWFSPKkC9XhFyFsM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774271443; x=1774876243; 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=HU1BwRIgJwIonvocfX7YrDLQqPhrL3H19ZNgFff0aO0=; b=OfMmgMjnt6G+98BekQRZD+UDi7RkaEILjg7lIwUKo3bDinLmMgKvhM1/z89MXKliEE 1BkQOwrRj9GU63F23EJIPXPfkB95/JfWE8jyeqq1MdD5p+a428kAyGiclFKg5zo2zvjF McDt72/uCcT2pyNwiPodQz0jfGdJFO8j9j+0/ixFKxT8OEvBn+dKsq2Dypzz+pnHKmfq VWZTYwLl4NJJtWdCgZ+UOvSv4QhbfH7zD3Tr+kZBgE+ghJS/mB0YclKNhRJA1RvLJj0L B+7YZm9zBwQVf5Dk2NicyKeBdhlvNH0o7ZTXEboJSbntSNnFFZUFrXlybZycxIp4ZgZi 3Cww== X-Forwarded-Encrypted: i=1; AJvYcCUut3SpaS+QXFocklz/wZXazFW3x4NfNSNGwwpqTpVV9UL0PsTrxMpNSzvMNKuLfGUoUU+eHoGqka60upI=@vger.kernel.org X-Gm-Message-State: AOJu0YxYjadXG6R/TVTOH6/geAEUORm2Zr7RVfGliLguHwPTsxrTS0Qs MBkuAGpQP64Mm8jxfxKi/ofZgQh/u5ze6An4hI6KVd8+y/aRJqhbIaXrYIweXTsiog== X-Gm-Gg: ATEYQzwlqMhWOJEv9zNvMt2Ivp5ENYUcNfblnd5KkwVDHzpJKtIMIQKAB5Y6Hh1x8HL Oq92UCKWn6ctUv1DuJVvtZO90yDXDnUaZN9hVYBYLdXrtDodYzhYWeFuX4kIQvCUjqQjikOKmh2 shn8pOhOHow6yZ+hpCAK0u/kkhpUvN2gFfikqvxjhgjvoT5+VBF8OwSOwIu2TxdXBJEUvc7CEVv 0LwYgwcnlLv8Ru9fsrhNNYYXaKqkkzVnmNexUDfrx7CYfygWDADX5GFRAa2RCRzHjRaSZgj/Qqc r0RCpKT0D53o1VzY3TywoHPoRtlsyBcfYwpaonYWi9sWemHKXzPJEApaz9WEW+54To+FfR0h2I1 HRNWDJz0+nrHzS0U+8Q7k+aDQPYcbWwZBzLQ8d2cs7bD4qtVM9Hn5MdkXRIZp/F9ufGJ+618bJv a78jiyL3BQC1jwWKyq9IN21hDlyfS0LXt1jlJX+NUMbeLYKIJDtCmb6EF15AIM1bsoTmdrJnm50 GRvoSc= X-Received: by 2002:a05:6512:3781:20b0:5a2:8637:8189 with SMTP id 2adb3069b0e04-5a2863781a0mr2777613e87.23.1774271443002; Mon, 23 Mar 2026 06:10:43 -0700 (PDT) Received: from ribalda.c.googlers.com (252.116.88.34.bc.googleusercontent.com. [34.88.116.252]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a285305e07sm2515904e87.66.2026.03.23.06.10.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Mar 2026 06:10:42 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 23 Mar 2026 13:10:31 +0000 Subject: [PATCH 4/4] 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: <20260323-uvc-hwtimestamp-v1-4-aa42e3865204@chromium.org> References: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@chromium.org> In-Reply-To: <20260323-uvc-hwtimestamp-v1-0-aa42e3865204@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 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 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 dcbc0941ffe6..e1a4e84d6841 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 + (MIN_HW_TIMESTAMP_DIFF / stream->clock.size)) return; =20 uvc_video_clock_add_sample(&stream->clock, &sample); --=20 2.53.0.959.g497ff81fa9-goog