Received: by 2002:ab2:6c55:0:b0:1fd:c486:4f03 with SMTP id v21csp314645lqp; Wed, 12 Jun 2024 02:23:48 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXtpEqigccET6mUy8RUnVA3Yvle/wuaGF6ANoW8WknsSp1X7bKGeYmlOlDoTUKVZhbWRBaaumjXCDhuA15IPjBp7ylFX/1Xv2rUMuCMPA== X-Google-Smtp-Source: AGHT+IEEjJEsvd3GlVe3XmPTFDCv2aIy6j5Fniz5EZ59pylU6MeGr/sx2tCKTqnuIcw5Net4WUn+ X-Received: by 2002:a17:902:e80e:b0:1f6:1a86:37ba with SMTP id d9443c01a7336-1f83ae5eccemr24055845ad.2.1718184228523; Wed, 12 Jun 2024 02:23:48 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718184228; cv=pass; d=google.com; s=arc-20160816; b=YCDSEZZEUCz6bG33oS4nuCq77oPx3ZlNke0RmXRedDFwMJJOlDpqBfFRg/Fy3I+UQo R9LW8KrE12WkUvMQikDKZLmoweloOhAutqy3UQvDt8DtXnL/p9lPML3hlLAt7Fnb4lSz p4TYTRGNkL92DgwJ8PAPp5e5ZCjZhcwZtBfocgcuNfenKCV4w+7Yx2seu1TlzASLtQbD Wx3bYHihejfxeMJi+SeKlLm2zcNyphddvk/CJXGxzTdWO+jzH0uCqb5MGM5G4BMpi2/K RMQ/zhHCP3lPeUAapHIGzu+hAAk4VzKOR4ELBUwjHKAmKc2l3NRpiCFtPBavJKr177Qh 6yyg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=in-reply-to:content-transfer-encoding:content-disposition :mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:message-id:subject:cc:to:from:date:dkim-signature; bh=2hmL3q34++Z1kyKdR8ucyO8ghsBZhjQHOf2/rTzNex4=; fh=rJDR/pO5UvWCSyn/kNk68R0MCdYkBr2tS0bMAJGJQCE=; b=QgLkTJ2oeZnOyvxNMZiaFI1WSmIoKSux18O90HOMm9WqDsuHe8HiCv+s+zyJ6rLqbr f0y+HhN3M5n5Tzwq/5kjyTIB8adCtz7s1KxrayG7W5MMGihiI3lkpBzW60xo3hICuiZg 19quvqoU5VuiraLYeB+OSbP/z7kxJsgRCfbDYTU+NW76CTY8x0czSOTRF9xyPIYpp4Z7 JyxZz7KHW5zA6sb/xbpCgEOR2+UPssj01XVcrooe9ZmboV/HeGEgFlE0eOIvAe178QOr EYwkj3s9T7bDvwtnluSyMlVqHepLgMMH1rGTrmCUkrdrG3AYrxLwQnNNkStXimpd2ZOx C+DA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=la1s47sD; arc=pass (i=1 spf=pass spfdomain=ideasonboard.com dkim=pass dkdomain=ideasonboard.com); spf=pass (google.com: domain of linux-kernel+bounces-211252-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-211252-linux.lists.archive=gmail.com@vger.kernel.org" Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id d9443c01a7336-1f7327bd194si28679445ad.562.2024.06.12.02.23.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Jun 2024 02:23:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-211252-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass (test mode) header.i=@ideasonboard.com header.s=mail header.b=la1s47sD; arc=pass (i=1 spf=pass spfdomain=ideasonboard.com dkim=pass dkdomain=ideasonboard.com); spf=pass (google.com: domain of linux-kernel+bounces-211252-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-211252-linux.lists.archive=gmail.com@vger.kernel.org" Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 1574128326D for ; Wed, 12 Jun 2024 09:22:31 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id E5FFB16DEC0; Wed, 12 Jun 2024 09:22:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="la1s47sD" Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7343416D9B6; Wed, 12 Jun 2024 09:22:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.167.242.64 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718184132; cv=none; b=lBYrYX6n2Y7hWITbReQfSJuNYjjyO+HLD6eAZcMYZbrv3MzajkH22huVkiuLjLn2B2Dbsv8WxWyPauy0nPyXkqQ2oJCGV73NHiGUEU5vkzOkYC31pjXdEI+0nHsklxRMQLKn3Q66MbzBcIUAtNeXOZtdJX6uUvlSfgFhH9E3CHs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718184132; c=relaxed/simple; bh=tjRBnL+U95mxLjYxw8lNZ4R6vRNCRqp5XMgG+Dw5UzQ=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=EPAuV1Fo30ABh29Wc/XPNHXEIvKNNmSAjF5CvjDYB8e8+rxnUlJli9sKX/bizjgtlxxIvSjOxh9CjCZ0tUwvhSUviTHq6qMEXLJD9VqUtUexxy5gXvYh/KfT/DBsS4ZbjlcGA1qsLpygDSmN74E+3s8umRRJwZ0jLL5gcayUOI4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com; spf=pass smtp.mailfrom=ideasonboard.com; dkim=pass (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b=la1s47sD; arc=none smtp.client-ip=213.167.242.64 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ideasonboard.com Received: from pendragon.ideasonboard.com (81-175-209-231.bb.dnainternet.fi [81.175.209.231]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C1221230; Wed, 12 Jun 2024 11:21:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1718184116; bh=tjRBnL+U95mxLjYxw8lNZ4R6vRNCRqp5XMgG+Dw5UzQ=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=la1s47sD3gMnEGWTG8491o7cU9Rj6mfJGdKbN4MhUTwKPhlGQZ3X9qL65ZIIGZUYD QH+ESQPpMVLXq4LtBrq9Bh1BExJxME4EuiMnA9nnvfttxmYWM/OzkoKil5tE6gpNa5 543V/OFWg1C2Bj6cn53nZTrPPdIEh7MfeRETUkYM= Date: Wed, 12 Jun 2024 12:21:48 +0300 From: Laurent Pinchart To: Tomasz Figa Cc: Ricardo Ribalda , Mauro Carvalho Chehab , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, "hn.chen" , Hans Verkuil , Sergey Senozhatsky Subject: Re: [PATCH v10 4/6] media: uvcvideo: Allow hw clock updates with buffers not full Message-ID: <20240612092148.GG28989@pendragon.ideasonboard.com> References: <20240323-resend-hwtimestamp-v10-0-b08e590d97c7@chromium.org> <20240323-resend-hwtimestamp-v10-4-b08e590d97c7@chromium.org> <4kck7oedsnj6kfiv7ykwsjg35qodg5bdktu5t5w3xtg2xuscto@2yh6kfdqwimc> <20240610114306.GR18479@pendragon.ideasonboard.com> <20240612074342.GA28989@pendragon.ideasonboard.com> 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-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Wed, Jun 12, 2024 at 05:35:38PM +0900, Tomasz Figa wrote: > On Wed, Jun 12, 2024 at 4:44 PM Laurent Pinchart > wrote: > > > > On Wed, Jun 12, 2024 at 12:28:56PM +0900, Tomasz Figa wrote: > > > On Mon, Jun 10, 2024 at 8:43 PM Laurent Pinchart wrote: > > > > On Wed, May 29, 2024 at 05:03:08PM +0900, Tomasz Figa wrote: > > > > > On Sat, Mar 23, 2024 at 10:48:05AM +0000, Ricardo Ribalda wrote: > > > > > > With UVC 1.5 we get as little as one clock sample per frame. Which means > > > > > > that it takes 32 frames to move from the software timestamp to the > > > > > > hardware timestamp method. > > > > > > > > > > > > This results in abrupt changes in the timestamping after 32 frames (~1 > > > > > > second), resulting in noticeable artifacts when used for encoding. > > > > > > > > > > > > With this patch we modify the update algorithm to work with whatever > > > > > > amount of values are available. > > > > > > > > > > > > Tested-by: HungNien Chen > > > > > > Reviewed-by: Sergey Senozhatsky > > > > > > Reviewed-by: Laurent Pinchart > > > > > > Signed-off-by: Ricardo Ribalda > > > > > > --- > > > > > > drivers/media/usb/uvc/uvc_video.c | 16 ++++++++++++++-- > > > > > > 1 file changed, 14 insertions(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c > > > > > > index d6ca383f643e3..af25b9f1b53fe 100644 > > > > > > --- a/drivers/media/usb/uvc/uvc_video.c > > > > > > +++ b/drivers/media/usb/uvc/uvc_video.c > > > > > > @@ -768,10 +768,10 @@ void uvc_video_clock_update(struct uvc_streaming *stream, > > > > > > > > > > > > spin_lock_irqsave(&clock->lock, flags); > > > > > > > > > > > > - if (clock->count < clock->size) > > > > > > + if (clock->count < 2) > > > > > > goto done; > > > > > > > > > > > > - first = &clock->samples[clock->head]; > > > > > > + first = &clock->samples[(clock->head - clock->count + clock->size) % clock->size]; > > > > > > last = &clock->samples[(clock->head - 1 + clock->size) % clock->size]; > > > > > > > > > > > > /* First step, PTS to SOF conversion. */ > > > > > > @@ -786,6 +786,18 @@ void uvc_video_clock_update(struct uvc_streaming *stream, > > > > > > if (y2 < y1) > > > > > > y2 += 2048 << 16; > > > > > > > > > > > > + /* > > > > > > + * 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. > > > > > > + * > > > > > > + * dev_sof runs at 1KHz, and we have a fixed point precision of > > > > > > + * 16 bits. > > > > > > + */ > > > > > > + if ((y2 - y1) < ((1000 / 4) << 16)) > > > > > > + goto done; > > > > > > > > > > Not a comment for this patch directly, but... > > > > > > > > > > This kind of makes me wonder if we don't want to have some documentation > > > > > that specifies what the userspace can expect from the timestamps, so > > > > > that this isn't changed randomly in the future breaking what was fixed > > > > > by this patch. > > > > > > > > I think timestamp handling should really be moved to userspace. It will > > > > be easier to handle with floating-point arithmetic there. That would > > > > have been difficult to manage for applications a while ago, but now that > > > > we have libcamera, we could implement it there. This isn't high on my > > > > todo list though. > > > > > > While indeed that would probably be a better way to handle the complex > > > logic if we designed the driver today, we already have userspace that > > > expects the timestamps to be handled correctly in the kernel. I > > > suspect moving it to the userspace would require some core V4L2 > > > changes to define a new timestamp handling mode, where multiple raw > > > hardware timestamps are exposed to the userspace, instead of the high > > > level system monotonic one. > > > > The uvcvideo driver already supports exposing the packet headers to > > userspace through a metadata capture device, so I think we have all the > > components we need. The only missing thing would be the implementation > > in libcamera :-) > > Okay, I see. That would make it easier indeed. :) > > That said, we still need to provide some valid timestamps in the > v4l2_buffer struct returned from DQBUF, as per the current API > contract, so we can't simply remove the timestamp handling code from > the kernel completely. We could pass the system timestamp, the same way the driver used to before getting clock recovery support. That being said, I'm not calling for this code to be dropped overnight, it can stay there. -- Regards, Laurent Pinchart