From nobody Tue Apr 7 02:59:59 2026 Received: from mail-lf1-f41.google.com (mail-lf1-f41.google.com [209.85.167.41]) (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 82BD33976AC for ; Mon, 16 Mar 2026 13:30:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667835; cv=none; b=J6mRAGiLg/+Qu009enbzwYqZC6Rk9jnyTsoNHnn46Hf6TdvJGWDLNJGZpzUEexQZh5sbRNVVaiTflDH/B5fYPAQC+R2sPfxfC8GGU+c3JR9uGWZzr25RIswkY9b0ZVfGcZw7uQjIDqYuD0j6GpmD74Pcdkax2LXW6w5u3i+B78E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667835; c=relaxed/simple; bh=RB+Ts3QkIKlZ/tRagbOBunzShfDi7jafPn0xkXpiu9k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kBBwVRgVdnxstNDbPXVcUD/1Z8CkkvrVQdimeW4LMzARkyAAcmeMJwJPjaHdb1uvWNNUCvyo+ZIFZEY34zn6xoBw9vZMR7vrKP6dCAYln/+My6AcqigzbHmjsQJ8rjaWkR0VjITlmi9XoU3DsjEn4Gl9ZmSMO42M44gAQxWrbh4= 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=ILn5y5KI; arc=none smtp.client-ip=209.85.167.41 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="ILn5y5KI" Received: by mail-lf1-f41.google.com with SMTP id 2adb3069b0e04-5a107b387a5so5945398e87.2 for ; Mon, 16 Mar 2026 06:30:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773667832; x=1774272632; 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=ZWcSfGy9KQONYfZbcr63kentbs7tqTbeJBgJ1hS1gko=; b=ILn5y5KIZGFilQab4r3Y++jBJmuD1590hAunuMNNFNxAmO8/RSA+g0s6JTCfW1fhtY Rb0n5ARnYEPrkNQuSN0DqfhlIhvpyIv2o0nIV/RIq9nMyFsJSH/c0hiq2TzuwilQVc3Y WvQlFVvQ51qYJ4nq6ee5eDKXtNWAtqq84LFr8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773667832; x=1774272632; 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=ZWcSfGy9KQONYfZbcr63kentbs7tqTbeJBgJ1hS1gko=; b=b3mlqilRT3O2Mc85itZE1TtYTnueIi8euRzGy6RQEjaq5sve0YDAolDPHbgYj6ifXq 0u7ZZwlAbsEvdCl7hSzohlSIZmtW178MFpMaa1PoZSX34yA80MeACygtY/dC4YjcZTGI IaYjhF9fC7fXJ5TK8YMCygaB8gQ1wYpMl+x1aoM8InKx7ZemmKlLDJp8gYkaq7b8U2Zb WBVHlFRfFNWnOTbYBlam4qt+9dYuMCdbX4/YXYd1xC93TuiDkAjl9UhGrJs/GN83w90d RORCbb9MUr5lZDEt4OCNhIPjpD/E7FrrTVqGHpa6IA7mFIq70bPDpxD8bVDbuUCi8mAw D32w== X-Forwarded-Encrypted: i=1; AJvYcCW74/QbUPrKD3ar6he3wyiig1BnLUdQTjBQybE7KbOg3fz0PNzcSjecRUV6c7eyQwLhdrVM/Xjp9DissXg=@vger.kernel.org X-Gm-Message-State: AOJu0YyjXPKEHrX44coJjlkEJvzM8kmcgsnZockCXyPPB6GEWM6uWAwv RpvBi0FHBfJ1XB1Thl3+xH8SEfYRaefKeexn4xY1GvEtfRenEYNSVyocKBh4sRBb5Q== X-Gm-Gg: ATEYQzyy7RICWtKY0eT+ulUk6LUzhV4TPsoecYkIYLLIPhKVlDHDW6lOOZ4a1xA566x MzKg/uQqtPRPA81HZNbJrsIyllN/mRKOd0jk3q/FPFipsKa5GfYJtGfxREbzZaZUjYyHe3zs/jV 5clXqiK5aGLFoDReh3h4/4FxzQSNBHly4dbRBHndmAiHroJCwbgatrnX0g4PUXS8J1OkbEwITLy 225m7MUeyDQaiXfc5BvIal7PZBBMD8BzfX1kpvRmUB/esfkV9CwhCbYE4oGJfSgp40ExPfdbWDb PHmkHP88QbkIhfFMRrByf67czPCkDlRy0mdmLu4Chv3seKiLwc50Xz7NTJSTcRyHibifsJyW53C QfoxFrHGNKz1Qdl/3c/TZOjQFYGAyO1LU5sikcgoXWM0adA65/FIrpECYsK5DLu/emhhf8p3MxB wCxof98YPUYbYSuRyifQTzaTgrepjbOgp38633eew7cN05RQCYxRS7Ws3a9BE8feFRWiFBDRT/2 A== X-Received: by 2002:ac2:4ed9:0:b0:5a1:2a20:9255 with SMTP id 2adb3069b0e04-5a16270eaf4mr4277043e87.18.1773667831543; Mon, 16 Mar 2026 06:30:31 -0700 (PDT) Received: from ribalda.c.googlers.com (27.69.88.34.bc.googleusercontent.com. [34.88.69.27]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a15636b69dsm3469985e87.82.2026.03.16.06.30.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 06:30:31 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 16 Mar 2026 13:30:29 +0000 Subject: [PATCH v3 1/2] media: uvcvideo: Fix buffer sequence in frame gaps 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: <20260316-uvc-fid-v3-1-c793354469b5@chromium.org> References: <20260316-uvc-fid-v3-0-c793354469b5@chromium.org> In-Reply-To: <20260316-uvc-fid-v3-0-c793354469b5@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Yunke Cao , Ricardo Ribalda , stable@kernel.org X-Mailer: b4 0.14.3 In UVC, the FID flips with every frame. For every FID flip, we increase the stream sequence number. Now, If a FID flips multiple times and there is no data transferred between the flips, the buffer sequence number will be set to the value of the stream sequence number after the first flip. Userspace uses the buffer sequence number to determine if there has been missing frames. With the current behaviour, userspace will think that the gap is in the wrong location. This patch modifies uvc_video_decode_start() to provide the correct buffer sequence number and timestamp. Cc: stable@kernel.org Fixes: 650b95feee35 ("[media] uvcvideo: Generate discontinuous sequence num= bers when frames are lost") Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 40c76c051da2..9e06b1d0f0f9 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1176,6 +1176,20 @@ static int uvc_video_decode_start(struct uvc_streami= ng *stream, stream->sequence++; if (stream->sequence) uvc_video_stats_update(stream); + + /* + * If there is a FID flip and the buffer has no data, + * initialize its sequence number and timestamp. + * + * The driver already takes care of injecting FID flips for + * UVC_QUIRK_STREAM_NO_FID and UVC_QUIRK_MJPEG_NO_EOF. + */ + if (buf && !buf->bytesused) { + buf->buf.field =3D V4L2_FIELD_NONE; + buf->buf.sequence =3D stream->sequence; + buf->buf.vb2_buf.timestamp =3D + ktime_to_ns(uvc_video_get_time()); + } } =20 uvc_video_clock_decode(stream, buf, data, len); @@ -1216,10 +1230,6 @@ static int uvc_video_decode_start(struct uvc_streami= ng *stream, return -ENODATA; } =20 - buf->buf.field =3D V4L2_FIELD_NONE; - buf->buf.sequence =3D stream->sequence; - buf->buf.vb2_buf.timestamp =3D ktime_to_ns(uvc_video_get_time()); - /* TODO: Handle PTS and SCR. */ buf->state =3D UVC_BUF_STATE_ACTIVE; } --=20 2.53.0.851.ga537e3e6e9-goog From nobody Tue Apr 7 02:59:59 2026 Received: from mail-lf1-f48.google.com (mail-lf1-f48.google.com [209.85.167.48]) (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 2104926E6F2 for ; Mon, 16 Mar 2026 13:30:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.167.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667836; cv=none; b=WyIQyyxytjOwPlOQbq7H1/YOh5Ej5V/rNUAu+nZhylIMay7VGkS3wKyqORFiyITaQ9gnTvhOpCqQXmB6e3bxcYcf/MrMpHujQ+IZTO4YhMdg7yUZ8o978jOqGq0mLhlEnHcAVqTgGyrLSpWds4ervbShQaCnm/Q614GVWQ00H3c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773667836; c=relaxed/simple; bh=Yq7adSLvEY5q4q42T4Hel6YbK+rT6LRdgNp2DFqfKmo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZaJXIt64/XAGk9uq9OgniOUHjtVFZyOq8zdaKEZ2Oo/2T4rVYPza8hlXSP/Fn/tTqbqJ7o9e4e7H7je3yL1rtChsRhLWEBX+GP/M8sa7GTFVaEv+y3zZfAgtF5bMDsvs3D6UKnHS3t3FR1L/PSrDUwM7DvYySHUdjiY25NqwBvk= 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=UazB3YNu; arc=none smtp.client-ip=209.85.167.48 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="UazB3YNu" Received: by mail-lf1-f48.google.com with SMTP id 2adb3069b0e04-5a140efd2d5so8284224e87.2 for ; Mon, 16 Mar 2026 06:30:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1773667832; x=1774272632; 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=nNpO7clZEY/eZEw4c7Ur6m3POITgkwC7i5ZcONx8gKw=; b=UazB3YNuR1OA9YQAf40Rqtk97+mCLzD0Ydb9SuvnVn3lX/m9jj6TpJTH5/JBtH1KUi UWkMYniUkrdbmDft0nV82PGhiMjJQjcdTNGre2vJC4eWmgTMlTP9U+pjtcGgrdRjYZTp QwvaEOGTnDcsvhXFf5F9wwGZRgel4t1vpEUg4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773667832; x=1774272632; 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=nNpO7clZEY/eZEw4c7Ur6m3POITgkwC7i5ZcONx8gKw=; b=adZB8s+dE7xJTIfJwUCoXZj+HPb6zg9y51yOsxqaPaS2g9MIDxs6kftcC49jsbUkvH pLxYWvWUoTdQETtI8RbYK3n7NYlxnMi5Fq7uMuZapG9dQR6AovDyISz8mGj5/Tp/ceto 0AJPeD5vJvQwp6J2G8X5+pMlNLMiF1IDwFULoE864PYFx5n22dLSrpa3lyb+2jGONsho YRGWK1MYyc6bRhRRBqHycKrczH1A7dERMISYnYJuTJIjE5+YqQ+OdhSglZhhdS7Z6+YT z6YFnEQKnNSiYjAMga+95xYnnrvz2O7E0hmUkDBBGSM5C78TqJteMjRXvdoCCT3ehHbM O+RQ== X-Forwarded-Encrypted: i=1; AJvYcCVLQiaYJjv8Ugp0SmiyLLY4r+RbFkqeBq4roBRpetdJtNMwrqQUaGPbJBnWlduqBA3sZ9bf1nROzeYMQlI=@vger.kernel.org X-Gm-Message-State: AOJu0YxshT1szeDKAuPcyrUGuD/OSpibrCs/1w6oZUjKwe/0USUxzQ58 GQD5+SV6JSVzH0xsRb4kMvdh55AoVFq04lS2vmFaoJfYoGxm50luiyftkrKivMINJg== X-Gm-Gg: ATEYQzwGJ6iGBmbd6c5E+1mo5EUl/myLDRkLiaKowIfvbv+FkFWL59UBmibQt0AqZtg E0kDKAM/fqKPIP6KWYaYqblinVv31hc62AuegHHOmUSdlOBSbhKd/t2KdY/PPFKAJsxX8+CD2tL B/QGi5CI+5AIrPrDzaAqhZJjXB9zsMKclcwAlQXqezfvoMQctm0ELJfubmlgDtcEa+2qcNchrkm Ito0pPu3PcbWiW3UPdS55Rq+xrIrcwIQAw98npzIIOCHZmucKykvuJtqEMp3o5sazUV/2Po8piy Fz6YfFFsHANPvyiqxRnuhOpqe5L72yGc31g0FpWKTJ6En0a7en0XP7IQ0JU3mlkdO9IUD78lJsn 3sIi3Ijnd5FXOC/y8RtN+QATlarrNhkEI1/A2OvcdDu2ad77qfIAmGMMu7iKuT6ayEs+v7s7ApE Zz7ZHgNXqsO8ukUSwCVizbh/i39eD1rf47lQRMVq+1wvyLezAaiSvg+0hdnZt1SWejGzksKA7t6 g== X-Received: by 2002:ac2:559b:0:b0:5a1:440f:512f with SMTP id 2adb3069b0e04-5a162b0c48fmr3716581e87.27.1773667832281; Mon, 16 Mar 2026 06:30:32 -0700 (PDT) Received: from ribalda.c.googlers.com (27.69.88.34.bc.googleusercontent.com. [34.88.69.27]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5a15636b69dsm3469985e87.82.2026.03.16.06.30.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 16 Mar 2026 06:30:31 -0700 (PDT) From: Ricardo Ribalda Date: Mon, 16 Mar 2026 13:30:30 +0000 Subject: [PATCH v3 2/2] media: uvcvideo: Fix sequence number when no EOF 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: <20260316-uvc-fid-v3-2-c793354469b5@chromium.org> References: <20260316-uvc-fid-v3-0-c793354469b5@chromium.org> In-Reply-To: <20260316-uvc-fid-v3-0-c793354469b5@chromium.org> To: Laurent Pinchart , Hans de Goede , Mauro Carvalho Chehab Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, Yunke Cao , Ricardo Ribalda , stable@kernel.org X-Mailer: b4 0.14.3 If the driver could not detect the EOF, the sequence number is increased twice: 1) When we enter uvc_video_decode_start() with the old buffer and FID has fliped =3D> We return -EAGAIN and last_fid is not flipped 2) When we enter uvc_video_decode_start() with the new buffer. Fix this issue by saving last_fid on the first FID flip. Cc: stable@kernel.org Fixes: 650b95feee35 ("[media] uvcvideo: Generate discontinuous sequence num= bers when frames are lost") Reported-by: Hans de Goede Closes: https://lore.kernel.org/linux-media/CANiDSCuj4cPuB5_v2xyvAagA5FjoN8= V5scXiFFOeD3aKDMqkCg@mail.gmail.com/T/#me39fb134e8c2c085567a31548c3403eb639= 625e4 Signed-off-by: Ricardo Ribalda --- drivers/media/usb/uvc/uvc_video.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_= video.c index 9e06b1d0f0f9..3e6ded69388f 100644 --- a/drivers/media/usb/uvc/uvc_video.c +++ b/drivers/media/usb/uvc/uvc_video.c @@ -1254,6 +1254,12 @@ static int uvc_video_decode_start(struct uvc_streami= ng *stream, uvc_dbg(stream->dev, FRAME, "Frame complete (FID bit toggled)\n"); buf->state =3D UVC_BUF_STATE_READY; + + /* + * If the EOF detection has failed, we need to save the last_fid + * to avoid increasing the sequence number twice. + */ + stream->last_fid =3D fid; return -EAGAIN; } =20 --=20 2.53.0.851.ga537e3e6e9-goog