From nobody Fri Jun 12 14:19:34 2026 Received: from mail-lj1-f169.google.com (mail-lj1-f169.google.com [209.85.208.169]) (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 803AC54652 for ; Wed, 13 May 2026 11:49:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672970; cv=none; b=VbCcREdHYMJwHSIMn8xoUg+Y3Q+X/OHTy16bTG1yZPIYpMw8Ca135q5iyOkbqwqBBw1Sn35DTKnXnFycLoX03deHzFYxvuqgcpZ8NxEAwVXuvsBt5wAjVKLP9i2sq8bvCkYnkA0KpI7+0n1UWzpfjk3tdtgy9Yr2B20QS/rc0Fs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672970; c=relaxed/simple; bh=klHvoOAvLgogJCjXF1p9Lx1AYWJ1Uy7uv4LHsL7Achw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IcT/Ylisv6OwB0916eWjLlQ+GeNK06+4TPBo3kTl6CWedC8ssIPvEsmf0Zgucrp1RTz6mP2el1pT8XHLlAU6FpCg7RpxVwL3xKQPMeT6Rm5Lgv2JBXBBEDsGNAox7ACTje/8EFaYpyQGJagtCdsN9h+sw6c/fiBDYi1hI2esx98= 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=hCK1Rflz; arc=none smtp.client-ip=209.85.208.169 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="hCK1Rflz" Received: by mail-lj1-f169.google.com with SMTP id 38308e7fff4ca-39393c1b5aaso58607191fa.3 for ; Wed, 13 May 2026 04:49:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672967; x=1779277767; 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=3k96l0fVwsw325zvQ7IYk4KSy6vkoaRijnncfaGnQlI=; b=hCK1RflzTzY590UlZvqnSVg/uqwsHfC5cBXzmlgJwZ1QlEJjPbqJKnHf3B1kvY3LCJ Ugbzuwg/M3wKXODfslU6+cB6ntmitLYZNNKT2jGfDJ0Oe5aWLkfI1FHJuWofFOv9TJ6+ nmZTREO+0VaHOk/25FpOGfAUWvOUmJYPpaHqU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672967; x=1779277767; 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=3k96l0fVwsw325zvQ7IYk4KSy6vkoaRijnncfaGnQlI=; b=Jm4uGMuQUx2tTQF8JH0X8AO2J98hsRA8EHtbn76lV+ldhOAg66yiAYaN+TnnFTNLGV gF6HNkfLGHcN6gxD2YB7sAJI63yFiOVQEOhdLTRDpZvQm9y3Ynb1iGnAYw4IkEDHtokr snli9gUPmOf6pOHe4GmNP9XqnGDOuVlomt86Qvxke+Y+l/RVYxGl+Lkh81y0kRWwpFhM cXY0kLklkp0I/pZxkP2f6yJmHwnw/BOh9IaJa6hz7+L9X202uN1eln3d7U0oXxiX+I+J D4S5ejcWHjsw5u6mN+qaGDpsDmbIZgF7vEJjnFStRh/yElHlcAk033tEDDj4dW0DEZjs C5ow== X-Forwarded-Encrypted: i=1; AFNElJ8S3MnQM92XVeWtl61cBcjQ1yfVCs6JKc3vjTIuCLlXHhef5XmFOnQdzz/5Y3dM7Mg1x++/KySCR8MarCY=@vger.kernel.org X-Gm-Message-State: AOJu0YyARJqQodFLq1y1P36zl8SPp32o2ktuzklY5U1AF/FN26w3qNdE 8+PEu9LuopuEEMz8KvhSayVgUo6FASKJrBn9fSjO+NDG7T4lZUVuDYWmoEAzRcNWoA== X-Gm-Gg: Acq92OGdIEwpf45DNVWCT3+5dGZP7OMJleFVfppqzXfLuIu7EooqqWMuBFRCZi1k7+2 YjhFFgly4eE859zBMKXQ8PzRr0uZ/5y/03dvEA4Y9BKtRH37zAW/FNnnY+rYqvPia4xcyCrS8Wv V5Ei6yT/BFVOiUWm5OHirSk9nDayW4zT5sVzyqOyQcMa5tXBru1BgJiB+MNYVNP+ZiNqrxzGkyr DZCP0aWM9G0eE2D4zJADrf1Nxmu4Szni0lltmLcwg1QWJusy79u4DnaMxSqKu3phbIqHJ88Bmxb ApkfMaf4seqlgZi5HOVIt2z7bctCq0y5ljrAjiBJM/HOexS4SGx6PtovbLEDiq3rW1N7+jat2+W x2nej9XFvRHVr0JE/5YhJ8JpUEEEd3YPasth2Kv3tBNdfJhmJAwi+BD5FW9a+nhKri4dZqhRe+7 xxKh8l/JWBnV9GNIL5YxoW6tdIN9cFNCEO1+ETU+7ml42xO7pwNITkZVsPbbolK1wySfjV9h9bw A== X-Received: by 2002:a2e:bd06:0:b0:394:f1a:2706 with SMTP id 38308e7fff4ca-3944b7661b7mr9834031fa.30.1778672966794; Wed, 13 May 2026 04:49:26 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:25 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:20 +0000 Subject: [PATCH v3 1/6] 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: <20260513-uvc-hwtimestamp-v3-1-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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 62db4db4e565..2ad36a1f4948 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 14:19:34 2026 Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) (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 50D8C3FF88C for ; Wed, 13 May 2026 11:49:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672970; cv=none; b=iz6y2JrmoCZqx64Pwjzpt1ZAdz7GSnFbpWsUTGpXnS0aFPnmtIPLT9rld4+XP1ULgMVJoD363gMn1mkasBGmfFDUbTUQSAI2zrhKb9RdSVEraSYolwBlNCGZFkm2usumLjGIp40b7YgHxv+WHMh3FJkO46Z/4yX3xTtaOrZ3icU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672970; c=relaxed/simple; bh=BTavFQqvBL+LMmhch8FaEL/DUp0Dd0SD0+CSvzVTCiY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LUcp6M/KKi1HkWMZGp7EBil1+Ih87vOwua3WQGTvKm3cnCuYBo2ObH4Dv2lXOJnUaitUc8Vjr7NgNLWjOUaSmQeagH1ma7SgPctFq2rms0oFC0CeLmEIHBDqHQ96ai3tn2BAt73KJqVn39NruMjevCZ6YBhW0Y0FEIZRtfVQO4I= 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=T1ATj60i; arc=none smtp.client-ip=209.85.208.174 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="T1ATj60i" Received: by mail-lj1-f174.google.com with SMTP id 38308e7fff4ca-38eab6cf7d8so49176351fa.1 for ; Wed, 13 May 2026 04:49:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672968; x=1779277768; 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=JeR0kpbZ0azLZa8HmN4tFEG0Uiamyb5RJeB0ZdUGKx4=; b=T1ATj60iO9iXPKnwor7dD8X/mq+PLoGXUj+UmvVJUSARkf5d02/rh3SNB2GzhZVxv6 rRUqxAWbLVxZlcqy9jG+mOtHiD3/xmmcbLxjKMqa1VzaoFAWEqbyHHTXMYYLg6RQ69Aq L6C9nmTCpZI375HmzjCaDzdLJcs3cc1jwR9EE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672968; x=1779277768; 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=JeR0kpbZ0azLZa8HmN4tFEG0Uiamyb5RJeB0ZdUGKx4=; b=M01rNpvB830R8s6m5aHhqj68E1l2vZla3pQE/4vAODrZJnOzcHp4Do2L4ea2G1RdN/ 8LIsHgRUnodGP5wDiAxot/cHXXYDSq5P3OzGlXjOwrQnNTyHsASlJgL5C4wSgENmgGtg KsQDee2un5QMyQEMuuJ1dLeuJAwsyTSNctM6jnokzk93QisFCRbcDAIvLT2z92ZYmwFj 5jVEXh7/V3B4GWAvzlTLULqfO4bUprYDdUJ/KkV4zJL+jzE+39PRigRW2r+QQLotGLxj jY/Z2pvc6xb09YVDUqIAnH/Zu6VCx6ayGZoiaSHUSzWheDJCmJPK/TS+q3162wSjXRYC g+cw== X-Forwarded-Encrypted: i=1; AFNElJ9yDQ7tfmE7td2iNJizu9RiKTpc/ggA008wYbE0/j4SVWrRQCca13izXwQRnyn9RhZQAKgro1h2h6PjbqE=@vger.kernel.org X-Gm-Message-State: AOJu0YzM8jRqzIhuydJr0XBzBkBwxhYeFzDSAqplvNbcP/X89by80T/L 1MzOZlGpQhMmPmpt+YuUADd8/1IFWt6pcNGQyZoq/XApb85AHU4RuaNDEF+2OVzv5g== X-Gm-Gg: Acq92OHfKQ+Rz+ZZC+2796zI5sChneu2Z/JbDQPsNR54OOK7aPF+ooQRDQJAzWJYT/i s9QigaYYVVoXfUk5z4gBBRI22WafP/Gv6Q78HO+WTjAWeqqz1mkNi3RHzWD9TTJSn8PRvY9fvko qZ8+czQKlhSg+2TZ37ki5NRQyA/6hOvLmVUiQBrFOP7H9t2Ehiw8Wd+EBJx5jsDQLzT7lqxCA0g R+xXjnrREyHADugC87Gkx0fPd2V8KxSZM/qD8AHs7iZqQUidOAoD1y97x2PVuuFva9iwJdBQd/o PUSRsQyx2I+R41bkv1rKvNgwznkwPmnqddJi9KZdAw0vLTqsLVQHlQ1W78ocNfo6+KLNwvgSOvw m1LhHnfIvuojnov49WN4q2obJ75pm4M/67KlgetD/AjWJhzdDd1oaErGcGCGcsrh5MSTgKT7tVX B/4P4/1+2KKPVByXlhpKaaKWccy6vLpmHUUoqblQIIBETJwPDKHufXjcBzenCuRIHarte6eumUq A== X-Received: by 2002:a05:651c:553:b0:393:d776:bc89 with SMTP id 38308e7fff4ca-3944b584e57mr9347471fa.21.1778672967563; Wed, 13 May 2026 04:49:27 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:27 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:21 +0000 Subject: [PATCH v3 2/6] 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: <20260513-uvc-hwtimestamp-v3-2-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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 2ad36a1f4948..01dcb81d96fd 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 14:19:34 2026 Received: from mail-lj1-f172.google.com (mail-lj1-f172.google.com [209.85.208.172]) (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 5D4DE3FFAB1 for ; Wed, 13 May 2026 11:49:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672972; cv=none; b=IJsUtJMCfGWZspmEDG5Ur9uEceOfhPDlecSdjqVS4ygJLku0b0BeOOTIELPFeL3PMVYkGwHWLBitB+WMCshsxgodvb7hx7V3EUDutqjWBWjBAw94m+KFmLHlVzA/jd3+LujhA+XS4PIRNc2rnvGO2OJ6yT3dIz3VVg05jvsdYXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672972; c=relaxed/simple; bh=JUaMHkC5DDmGPxOxMX018PdMdBjM0VT9k/OIdCbMX/w=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=U/WtFbfXf0wShiTLV74s1izqJDqqSl4cu+mH+IdAC16UqhRCRhfRL/AJmLnbJVO1cxzKIRrjAZ37LZlTCllBVwiVmA9LcINEvgBcWizwFVuX3ERupMEetxX1GqhwBozIcc0I35s1gil2qFyajmADGSo7vYVDWxy5jyDoQoxrdIc= 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=GuxwttD6; arc=none smtp.client-ip=209.85.208.172 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="GuxwttD6" Received: by mail-lj1-f172.google.com with SMTP id 38308e7fff4ca-392445f11c5so68342651fa.1 for ; Wed, 13 May 2026 04:49:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672969; x=1779277769; 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=Bmtb+ICKBQ1P69XGsTJCXIGwUDaGvqHA8PV94ag1Rbs=; b=GuxwttD67/612PrCpbW3r5nKyITrCcIr26pX5oQirvgkobSFARzoagLuvrO0edYYyw 7lp7kWSV1eM6EYnkrbR5HlGQhGhkygNNkXPnFsCozSNEWiy2yxOk3m/II0wNnJxHyMT7 ezYsv/AAbskZWz2cqDJrdII8F4ZK6bqNXNEWM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672969; x=1779277769; 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=Bmtb+ICKBQ1P69XGsTJCXIGwUDaGvqHA8PV94ag1Rbs=; b=Jeo1KwjxcYgn7DxyqCyN45pg2G3fLMDLPRHKiHPaQTfQfsoaeA9HLjxgGq9UtDLsrB W9No1E+PdAZX7ChLH1zQuy9g8AHx9z4kaowPZLakR1VbJuGSQdy2IWHJfq4UbyiKJRI9 C7Llvm1YSMNWYp4qHkBZU7ahSbyJAYB9nJsTgN3X8CQnXWhnJ3BRiEwtH9eLo15+DYYk Na//QmAmWQFaJOxHTuAYgiRsjt34aT3qiCoybC24THcXBdzaJILhS4RsffDnoh8eZbKR DSgurnfs/d9NfyUVcZNaf0MuIsVqPF6AdFmqRKA/F6SdKJ7LI3dAlajA35dmeB2d7uLZ 1z5g== X-Forwarded-Encrypted: i=1; AFNElJ99kc2xw/QNDv8fYedOOSaMUFy0zit2eCyggFPQjzu/AXmN6OpC6NMnk0QWwfX4kb61v+nBu67R1tIoGTw=@vger.kernel.org X-Gm-Message-State: AOJu0YwMLWHy/8PE3YbFSgWYsXjlbnPDcHNoqyVxjDVykVq5kxNbjdMd pyiLbx72Gum+1DAe2ikCKRqrxF+eWE/EOSdagEk/aX6vunVibBEzueTbqc9kZHwR9g== X-Gm-Gg: Acq92OE90/Lm7xnHs5WrcVdKSfo22hZtlPFIMtwM0nmRHmcE+x3Ug3mgWepsqpVYgKA fifEw1rfP0K8AwQVyJrlgUsS4HhMP273U/PKDA8mYAyaR+jZn7phqdIRlOFXSyYXdjx3LJzpZx/ FtrtiXYiTxbHqzbotl66NS4XeUTA1LAF0UfhxERlq5HxEG4SoPBAU9OwiGjIKai9Eb/CuxPgfZ1 ftrKoa0Nfcupdo/PTMEMcLLv9Z8JwU9Emo4rFjbC8j0s2HYumWJl+qict1ZQg5cx9BvJppjfW2C Gmb8p2RzWTbz0bpRBkgcnFSys+/pwyYRwsXtxu+FpAxWi2CHUDp0j9qtZ+MJoSk0l/8annDKTd6 wnLLOIq+U0Rnm8MHuwmw22c8/TtihAVMyyCVjnqf8GyAOcnlW49IUeOMod3e2kSN6gbSUoXEywj 4wRgrfPhzkB2AuvB2aFvlRDCFlP4GS6dSEJ4NUWR2s9FRFFOGWySMs2hNsSKSx0m8xDq2ys4qVZ g== X-Received: by 2002:a05:651c:41d8:b0:394:8fc:8c3d with SMTP id 38308e7fff4ca-3944af67cbdmr9578691fa.4.1778672968626; Wed, 13 May 2026 04:49:28 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:27 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:22 +0000 Subject: [PATCH v3 3/6] 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: <20260513-uvc-hwtimestamp-v3-3-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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 01dcb81d96fd..355b9bfb799e 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 14:19:34 2026 Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) (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 9D64D4014AE for ; Wed, 13 May 2026 11:49:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672974; cv=none; b=BZPWui8VjDrOFVncE+L7bITTUvGNvZscXIp43/g/xI81z0cB6O+qXR5nH/WUc+UZAzxlnthKbL0ZWi6bkPTr6vDpL6CxRGxZLIQ9hGy6emsXA7Km5NijjWNyLz1gIMe7eLYTf/3xIijXcawVaK9agM+EByDnILZPZGLhh/ScyTk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672974; c=relaxed/simple; bh=RF4pGcE9NoU02iwInJt+MH18862e4woYfVw3r5w+0sE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hGsGLz5uypBw71aOtf1GcrVFJEAEksQGddqVFbS+zvHV+xQ+OU2Smc757TErBg+6Pzy6ooANPzjUteoNty53c3vb78ciB6zKf60fAn4YfPOBNH2pfPF/+HmkIdHfQVAGtoNL6IHd9tO66Nt0pA1WArVwooOKD1HZHygHMEZsXpw= 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=ivksZWN/; arc=none smtp.client-ip=209.85.208.182 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="ivksZWN/" Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-38e7b0903cdso61983931fa.3 for ; Wed, 13 May 2026 04:49:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672970; x=1779277770; 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=S0ZRwxo5likBdhusuGC3nYZtwDAXyPPbS6VC4yvRn8U=; b=ivksZWN/IchrCl6FYZBkoW4qS/MBnvbVC0cADUGPwCYyN7lLgtBG801nhv61Kvqjr4 HHM8BOoAzQSqd2lxQWT9esGMtdnoQmnWIiUnRRxZjLuba5O4iloxTzE35qS2H4cHhhLq +RpKgHqi2/XvAod89aIDZtWJMq9/GptwetbYM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672970; x=1779277770; 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=S0ZRwxo5likBdhusuGC3nYZtwDAXyPPbS6VC4yvRn8U=; b=on7FVINtz0Tn1I19BK5MfsicWhganx8hELP6szX1Fs9Ok/A2pL0pmtLmAptg7qtQBr myZ8XXAHJNfK/5tGzVsiUJ6c/q5PH7QEMovwwnoqUWYD1ta5vyaYOZPfHqSZA0TgBCVQ MIzM7qPvrrqMwf3XUORPSPGZ8P9sASKtwdcS0GsWKFZptN+4YIewcSYQAjeFFXEPoZNf p1QlN9zzcuazBQyZv08r6gEwJcmGS5IQrZX4jgRoY9Q3gZgKKBefdMODJWs+X+kLbJSg 0BvpqEDRECOt5LZ3GqofM8lvRVHFRgPuu1JjSbasfcb0DKcss/u8Q3meuO27IhL0ywLs 1DTg== X-Forwarded-Encrypted: i=1; AFNElJ/MSYofNFQFGmpxJ25ds1YXEshbAhZsUZF9dIMw/JO7V1oUlVO4cPXSH7ZuN9Uc155RPA7vb/dfiG0legk=@vger.kernel.org X-Gm-Message-State: AOJu0YzPWlMLxyuVdFTKyo4IadedlImnGPBV8BpuP6WVNYXdGV4TA5Bm B470DDP9VzSPy6fJF3Hc9Fxls9z/WNDaOBL4dQpX+Gv6Hzv8vbxje98cjKcE0E9Y2w== X-Gm-Gg: Acq92OE3HDjJGVkRMAJ7m17WjcC6/scoctjjEoBA5Mwic8BV+vxkDkxM/3zXDKEgNlz gmOSayEDGRl7sUpZho77xEdCI/jyfv7rjD5XOZeQHh/gO3vnfTv7/B6yoIEMKQ22nJXmrmEdd5H OYWWFlGLaXGQ/9xRyZCydf6h6jgNJ0VjL0Jd6ewHZxBGihrcOMeptIZQFS0BagLz+ZRXIM+Zlwo rLNQ+71qQYqfBR5we1AYb84EKiOzptMzLv4mX46p9+loo+vSskK63MMZN3MwcnInp8X9p6wXfj8 i1z/2ZpQ2ahrhRGaa/9gxm7xocJ/JMb3Fms4JBYQJZO92uglCmWBh9kxFQJLt68Iy5uM/IH5zaI AIKJWCMosx0JZ6Ec09h4xSgTuE5rfoq2YZQjtMWm7SdzHtAzGn9Dcj9VPyP80RPQHQGx+3OVStR xvndxi3/GeRYyLtxS9dJxND8E3wx/dikA9/YxCVPLZagtREjvBMP1ekKbM0ROUWrxb7WrSslC65 nOz5Vg1bo99 X-Received: by 2002:a2e:b52a:0:b0:38e:98b9:9fcd with SMTP id 38308e7fff4ca-3944ea71a76mr5768831fa.27.1778672969751; Wed, 13 May 2026 04:49:29 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:28 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:23 +0000 Subject: [PATCH v3 4/6] 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: <20260513-uvc-hwtimestamp-v3-4-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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 | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 355b9bfb799e..63850b779e24 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -544,6 +544,15 @@ 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) +{ + /* + * Because the result is modulo 2048 (via & 2047), we do not need a + * special case for a < b. + */ + return (a - b) & 2047; +} + static void uvc_video_clock_decode(struct uvc_streaming *stream, struct uvc_buffer *bu= f, const u8 *data, int len) @@ -664,12 +673,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 14:19:34 2026 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) (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 5D181401A11 for ; Wed, 13 May 2026 11:49:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672974; cv=none; b=r3Btde79ORCQOY5Q2ABVqkhYaLN46mYXCUdCb6JmJVsVqtBW/NkE1IslhGd6VrbGj5531k1JqQ/m68wh1Dedp9lYPa053LgQSRCvNMBi9K/ej+NIE3BD34a8NmxJH+2N0YVXkQgP7LUlr5n/IUa1TCF1fYJbaTb1lwpRsPPLLDg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672974; c=relaxed/simple; bh=DCkjyOBWZRcHIA6nU//LVMUpl0tnorfSv5T3WpPg3Cc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JY6DRiA/9G+6L8Du+nNsFc2BkJjlmWVsGx89K8VohdXlhvGSqL1s4vIIQTm6G8kQH9+1fjAkhmcDpU5oUiKlZrdGuwfD/iI/tTH8aIYGGJ7jRMVUqa6EqlJijNY8XKgFzhRyzLCppkZlXuL3XznJFGz8xxHXZuDChNXNpe3H2BU= 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=eStO93dL; arc=none smtp.client-ip=209.85.167.49 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="eStO93dL" Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-5a8d648466bso4302923e87.3 for ; Wed, 13 May 2026 04:49:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672970; x=1779277770; 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=RXgj880JmBdfDZbOWn+8yzsEMqNo4ZRXvagLZHIR1MI=; b=eStO93dL7mEPrx6e8kdOboPp1SSB1O4XA3gv9fXC1YHeNWzR6ZIkbz34gYNJFuiDiU xUo2HsYIq+ZfvvvSOeY9qgv4yTafzsXn3O9MtJYu+X/iIhwfLknZStl+TYNkxtMIinGV yOL8oqd2UA6bhsXqj7ZKiJV6XqmBGrWl6/TsM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672970; x=1779277770; 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=RXgj880JmBdfDZbOWn+8yzsEMqNo4ZRXvagLZHIR1MI=; b=FuNZ8xcqQUm0dcKOQuquiNa2GHzn4Yr4NQEeOKdyNHtQRH8Swz4QxkvqHPm9PNgCLu ZNZj76Y6A3VKgtUgxyt0l0QQWTSmmNc9/PvDQAQ9+z46etphpV4wS8EFa8fYbUlE4+oD a9DwLWEHH0Ais946QrltdTc7rRnsn5OLCOs9My/SaZy0v+q4Pv0ljA6chenuANqkUp3K bprCI4HNU+DWpNpOdwfZIOnqU6WKiBaz/sKS1wrFDHIDLNZstDWG7zryXaG15sbvFPZK d7m2kXpyjcgrSuSFlSmAqJId1druxvdXTutpl44vzrEcYn6aPIeEZdSmmqHLYcAiPgab Wrbw== X-Forwarded-Encrypted: i=1; AFNElJ/xEAsbXFJVMM2eAjzId+8bdysGcJTH99xNHD+LfX5ii4gPMXp6bmVR1rtUE3iSYRiEqtHnBZwx31Mtta8=@vger.kernel.org X-Gm-Message-State: AOJu0YzPeuU8sgiTOsaEpNQ2P+U5tTGyR3tpg64IVfoIH/hsKKuArUlT 2rQZd5PoSCS1d5RSuJ1/7axAHKUhYupDsBPfd/vNOs7wCaFGNXHOMFTqnlkJ+iQ0wg== X-Gm-Gg: Acq92OFMhWzCdL4bzNQz8UpztqkMMKU8CYumhjbt8nrOH2xsyS7ekn1Vl1uOCflIZgx Bom2FkVL5eNlo/NYiwBfbuoSCNBmQtfWaD32iy6YCVxHJ2AiKUBDjg7SslUZo8StM7rxaKT7Pk7 Re1oy/DD/qJS/2+zyJmr9mPpkFUcVXUKGGqTwLSY8HdZTi4lGUKZtnU/+s8z99CWoJ9m5y2CMyw D7x7Sa2iqpqfnUu0j+G0N6mDypqIapXLfTfvKBZh0gNH5o3nEc6/8lqIcNf/oJfsmENISDVApKw YjBqT5MY2kPUR8YQkiQMir4IKz2Cw3Q+W3Cuv/ZkbBmUltHjwbYuqFjNwRBxM4hzxTkPXVI+xzs pT/VRkKPtYfkHvPo5m2jJyJMptre5+FZEzirNUK9jpvLENHvD29CkpKa2VMPwxwA5OzH7Q3+Emv ARhSOAOSkSKt8PSEDbxZ3lufS2oxkHKujLnyMEBftfJdPrkDQga15+Ox9BjUFrvfXJg/bZV3w1V n278CsadlR1 X-Received: by 2002:a05:6512:1086:b0:5a8:a201:f27f with SMTP id 2adb3069b0e04-5a8ef99abc8mr1223224e87.34.1778672970533; Wed, 13 May 2026 04:49:30 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:30 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:24 +0000 Subject: [PATCH v3 5/6] media: uvcvideo: Do not add samples if dev_sof has not changed 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: <20260513-uvc-hwtimestamp-v3-5-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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, this allows us to avoid some expensive operations such as usb_get_current_frame_number(). Suggested-by: Laurent Pinchart Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede --- drivers/media/usb/uvc/uvc_video.c | 16 +++++++++++----- drivers/media/usb/uvc/uvcvideo.h | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 63850b779e24..6794031cd0fb 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 @@ -599,7 +599,12 @@ uvc_video_clock_decode(struct uvc_streaming *stream, s= truct uvc_buffer *buf, if (!has_scr) return; =20 - sample.dev_sof =3D get_unaligned_le16(&data[header_size - 2]); + sample.dev_sof =3D get_unaligned_le16(&data[header_size - 2]) & 2047; + /* If the sample SOF is identical 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; + sample.dev_stc =3D get_unaligned_le32(&data[header_size - 6]); =20 /* @@ -678,19 +683,20 @@ 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 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 4ba35727e954..b6bcee4a222f 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 From nobody Fri Jun 12 14:19:34 2026 Received: from mail-lj1-f181.google.com (mail-lj1-f181.google.com [209.85.208.181]) (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 3828340243B for ; Wed, 13 May 2026 11:49:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672976; cv=none; b=So/T0ywrjE9u2ZnitRre/tz5BRMvk3Wm65inZRMQq/io0RWj9laEYP/BdCpGBOluDX//fspLNp9nqbLRs/kdtSXroawOPZEC0ANdv0l09T3JI08ZlBQe+zkcrMViqPFfle5gzNeW9C+HNjVBlleuhDYNVgTGDow+pmUMiYEtfps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778672976; c=relaxed/simple; bh=0DsXZoaDfXXbjyCKAKWk/McSEvrCl4LqpnbtmOy08v0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JTA/7LObpU3pmV4Ri5w7wotrMUBWN3nhWOz4a4gG1jpefByuolUrK10y11aDUdlwkazvemmVL51zB2PfPT0dkXtH8PZnfvng97V9QBv/gxwzyoiDqWoqRSp8evHLCdwIAIneGjoS0CJi589rswVu3mxU973SvwJVw9pneoCifEE= 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=BOlT5w6F; arc=none smtp.client-ip=209.85.208.181 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="BOlT5w6F" Received: by mail-lj1-f181.google.com with SMTP id 38308e7fff4ca-39389398838so58674171fa.3 for ; Wed, 13 May 2026 04:49:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1778672971; x=1779277771; 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=pE3CdveYrFhi2NESD3mYXm+51E27T6CYjOU3ktIZuZU=; b=BOlT5w6FCqQX0keKD8rfDiWS+OvLTeh3AOsI9qDcBHzSZsy549hRZZe/oSO3yU37f+ 40wgtLafkv7Q/A+o+Xrj7s8pCZh2mJXKB3jCaJaXlWKpZZ6SV/9Kz4MqIxF8f4qzabQe /Dpu//BvE6qiHaz+g5E+hvCJ8XlGDyPz+O6/g= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778672971; x=1779277771; 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=pE3CdveYrFhi2NESD3mYXm+51E27T6CYjOU3ktIZuZU=; b=c0/GphEhLWPet5D8uw5Y8EhH/HCm4GD7sxTtJHUf0yWikqkqleoACm28lJ815utWQ/ BDX1LqbIZYbBlx402/Rdt1cdjnoYC0YeyPn1v8a7ZbpJqoLLjl3KG1Gk39v3IkfWu54u UkMpjRhwZQqJDSOn66MlmrEHt7XjsbUGEcHFAfM8T+CKIF99dILkSHSKuuzGfxZX3pFL BQAUEJFvEiKZFoMf8aTAFgUrCV5jXwf0C75zSAsmtUuMJlmgxX5MYnpRHO2mapT1OGfT CFBJqGV5Xsmt3UwstI7GLa34r/WDwhhrZsY36bAbpSQwJR0es3OnrpH+tnW1mEQKv0/U +soA== X-Forwarded-Encrypted: i=1; AFNElJ86tvZygW1HjSstpzFfysJBd9b7zGpYrRxb3tst7G0N6lTsqv5CDKl3W5NnV1Q9dQoFeJLAp+SB9Bhm/b0=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+qeAl6AoT30XeIx3nctLsY5noOvXOaYOkb2f4eDjfWDY1h4L2 mX7uGU7piSjw0R/VJtT83+jmV9YIAGS7Rxy16BGmIC5Mvmlr+imcxXmaY2QKCINpUg== X-Gm-Gg: Acq92OF1o46ZHCvKiFSgEZ8zx04IB9wlPJlkxD+ArdWDgu1CDN87pxO2fRtktmqD3I9 fHl8ovBpkEeaJABwhXxjqlWrNd/9nnYUoQJiFiDJAWn0HpaEqQbFDE9sOscmiUHW3JxvEV9L9ON 8G+e4eXshfvkyRGQaz3foEIaDdvLJG0032fOZ/mEZ/bYLx/toEaubMReOxWK4CgIF/OSHryzGTI EuTJS0Gfay96itBnHEhNHzLussLH50YRiScxVDXGrf0gK/8lEbGs/Q43yZeivzlMQF5KcqfzSSk Du7jzY4UlQdYqHUK2Q3cuX921PlZM5SuCpG66liUp7QxrDoVmNdQZDvse4FXtE5idhxbwsN8ROI w6Ko7WjyDKhmJPxLjWE3aieN3CGk7KYG2c1vjv0thpj7rUxJvD6kWPwsqAJRh8pmuGSUunNcT9g KDYC9QyeT+p0u7Aqg7Y66XDiTTwuyFUl8u8GQNHi2HfldlpiPQO+703TeNXAY2AgV4XFY5U39nJ g== X-Received: by 2002:a2e:bd13:0:b0:38a:45d6:c246 with SMTP id 38308e7fff4ca-3944e709c0dmr9086591fa.8.1778672971574; Wed, 13 May 2026 04:49:31 -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 38308e7fff4ca-393f60db4f1sm40971071fa.27.2026.05.13.04.49.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 May 2026 04:49:30 -0700 (PDT) From: Ricardo Ribalda Date: Wed, 13 May 2026 11:49:25 +0000 Subject: [PATCH v3 6/6] media: uvcvideo: Only do uvc_video_get_time() if 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: <20260513-uvc-hwtimestamp-v3-6-7a64838b0b02@chromium.org> References: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@chromium.org> In-Reply-To: <20260513-uvc-hwtimestamp-v3-0-7a64838b0b02@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 There is no need to calculate the current time if the sample is going to be filtered. Move the assignment close to uvc_video_clock_add_sample(). Suggested-by: Hans de Goede Signed-off-by: Ricardo Ribalda Reviewed-by: Hans de Goede Tested-by: Yunke Cao --- drivers/media/usb/uvc/uvc_video.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 6794031cd0fb..1cc86a18b2bb 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -645,8 +645,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 @@ -687,6 +685,9 @@ uvc_video_clock_decode(struct uvc_streaming *stream, st= ruct uvc_buffer *buf, (UVC_MIN_HW_TIMESTAMP_DIFF / stream->clock.size)) return; =20 + /* This is expensive, only do it if the sample will be added. */ + sample.host_time =3D uvc_video_get_time(); + uvc_video_clock_add_sample(&stream->clock, &sample); stream->clock.last_sof_processed =3D sample.dev_sof; } --=20 2.54.0.563.g4f69b47b94-goog