[{"id":35661,"web_url":"https://patchwork.libcamera.org/comment/35661/","msgid":"<175672576177.1794037.11847670454390053956@ping.linuxembedded.co.uk>","date":"2025-09-01T11:22:41","subject":"Re: [PATCH] libcamera: clock_recovery: Fix for nanosecond conversion\n\tfor FrameWallClock","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Naush,\n\nQuoting Naushir Patuck (2025-09-01 12:19:41)\n> When switching the FrameWallClock to use nanoseconds instead of\n> microseconds, the clock recovery class was left untouched. This would\n> cause an inaccurate clock model and return spurious results for\n> kernel -> wallclock timestamping.\n> \n> Annoyingly this was missed as there were no application level consumers\n> of FrameWallClock until now.\n> \n> Fixes: 29a88d85b730 (\"libcamera: controls: Use nanoseconds units for FrameWallClock\")\n> Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n\nI think Paul beat you to it on this one:\n\n - https://patchwork.libcamera.org/patch/24231/\n\nAs the two patches are identical - can you add an RB tag to that one and\nI'll merge?\n\n> ---\n>  src/libcamera/clock_recovery.cpp | 6 +++---\n>  1 file changed, 3 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/clock_recovery.cpp b/src/libcamera/clock_recovery.cpp\n> index abacf444fbf8..f9ccb6ae2144 100644\n> --- a/src/libcamera/clock_recovery.cpp\n> +++ b/src/libcamera/clock_recovery.cpp\n> @@ -118,10 +118,10 @@ void ClockRecovery::addSample()\n>         clock_gettime(CLOCK_BOOTTIME, &bootTime1);\n>         clock_gettime(CLOCK_REALTIME, &wallTime);\n>         clock_gettime(CLOCK_BOOTTIME, &bootTime2);\n> -       uint64_t boot1 = bootTime1.tv_sec * 1000000ULL + bootTime1.tv_nsec / 1000;\n> -       uint64_t boot2 = bootTime2.tv_sec * 1000000ULL + bootTime2.tv_nsec / 1000;\n> +       uint64_t boot1 = bootTime1.tv_sec * 1000000000ULL + bootTime1.tv_nsec;\n> +       uint64_t boot2 = bootTime2.tv_sec * 1000000000ULL + bootTime2.tv_nsec;\n>         uint64_t boot = (boot1 + boot2) / 2;\n> -       uint64_t wall = wallTime.tv_sec * 1000000ULL + wallTime.tv_nsec / 1000;\n> +       uint64_t wall = wallTime.tv_sec * 1000000000ULL + wallTime.tv_nsec;\n>  \n>         addSample(boot, wall);\n>  }\n> -- \n> 2.43.0\n>","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 11594BEFBE\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  1 Sep 2025 11:22:47 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 092FA69330;\n\tMon,  1 Sep 2025 13:22:46 +0200 (CEST)","from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id D74EE69323\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  1 Sep 2025 13:22:44 +0200 (CEST)","from pendragon.ideasonboard.com\n\t(cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 7252FD52;\n\tMon,  1 Sep 2025 13:21:37 +0200 (CEST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"I6T1qN57\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1756725697;\n\tbh=MZxb6FMt7mtvd6lBe+gOI51phTCEWy4+WN1aynCGnk4=;\n\th=In-Reply-To:References:Subject:From:Cc:To:Date:From;\n\tb=I6T1qN57EWadL2AI2zzqo6diDpMvFi/md0o5P7Pt+Q85Vgjxok+b8mKEV236JvEn1\n\ti656+BMk7L1qKf7oWZjYbpC1xVJgpJeYFwgUNQ7Kg2qaEFYNh7Vl1u0GtS0C3cW9PB\n\tHTgzZh6vBevTAVZ0lJvj1GIi5sfxDZ+fmHarvDMY=","Content-Type":"text/plain; charset=\"utf-8\"","MIME-Version":"1.0","Content-Transfer-Encoding":"quoted-printable","In-Reply-To":"<20250901111952.2155555-1-naush@raspberrypi.com>","References":"<20250901111952.2155555-1-naush@raspberrypi.com>","Subject":"Re: [PATCH] libcamera: clock_recovery: Fix for nanosecond conversion\n\tfor FrameWallClock","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"david.plowman@raspberrypi.com, Naushir Patuck <naush@raspberrypi.com>","To":"Naushir Patuck <naush@raspberrypi.com>,\n\tlibcamera-devel@lists.libcamera.org","Date":"Mon, 01 Sep 2025 12:22:41 +0100","Message-ID":"<175672576177.1794037.11847670454390053956@ping.linuxembedded.co.uk>","User-Agent":"alot/0.9.1","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}},{"id":35663,"web_url":"https://patchwork.libcamera.org/comment/35663/","msgid":"<CAEmqJPpAz5Quw-Y+CJ1yqLryr+-2a3XxWmgg7Xzgtzsx+vSvzA@mail.gmail.com>","date":"2025-09-01T11:26:16","subject":"Re: [PATCH] libcamera: clock_recovery: Fix for nanosecond conversion\n\tfor FrameWallClock","submitter":{"id":34,"url":"https://patchwork.libcamera.org/api/people/34/","name":"Naushir Patuck","email":"naush@raspberrypi.com"},"content":"On Mon, 1 Sept 2025 at 12:22, Kieran Bingham\n<kieran.bingham@ideasonboard.com> wrote:\n>\n> Hi Naush,\n>\n> Quoting Naushir Patuck (2025-09-01 12:19:41)\n> > When switching the FrameWallClock to use nanoseconds instead of\n> > microseconds, the clock recovery class was left untouched. This would\n> > cause an inaccurate clock model and return spurious results for\n> > kernel -> wallclock timestamping.\n> >\n> > Annoyingly this was missed as there were no application level consumers\n> > of FrameWallClock until now.\n> >\n> > Fixes: 29a88d85b730 (\"libcamera: controls: Use nanoseconds units for FrameWallClock\")\n> > Signed-off-by: Naushir Patuck <naush@raspberrypi.com>\n>\n> I think Paul beat you to it on this one:\n>\n>  - https://patchwork.libcamera.org/patch/24231/\n>\n> As the two patches are identical - can you add an RB tag to that one and\n> I'll merge?\n\nDone!  Sorry I missed that Paul had already fixed this.\n\nNaush\n\n>\n> > ---\n> >  src/libcamera/clock_recovery.cpp | 6 +++---\n> >  1 file changed, 3 insertions(+), 3 deletions(-)\n> >\n> > diff --git a/src/libcamera/clock_recovery.cpp b/src/libcamera/clock_recovery.cpp\n> > index abacf444fbf8..f9ccb6ae2144 100644\n> > --- a/src/libcamera/clock_recovery.cpp\n> > +++ b/src/libcamera/clock_recovery.cpp\n> > @@ -118,10 +118,10 @@ void ClockRecovery::addSample()\n> >         clock_gettime(CLOCK_BOOTTIME, &bootTime1);\n> >         clock_gettime(CLOCK_REALTIME, &wallTime);\n> >         clock_gettime(CLOCK_BOOTTIME, &bootTime2);\n> > -       uint64_t boot1 = bootTime1.tv_sec * 1000000ULL + bootTime1.tv_nsec / 1000;\n> > -       uint64_t boot2 = bootTime2.tv_sec * 1000000ULL + bootTime2.tv_nsec / 1000;\n> > +       uint64_t boot1 = bootTime1.tv_sec * 1000000000ULL + bootTime1.tv_nsec;\n> > +       uint64_t boot2 = bootTime2.tv_sec * 1000000000ULL + bootTime2.tv_nsec;\n> >         uint64_t boot = (boot1 + boot2) / 2;\n> > -       uint64_t wall = wallTime.tv_sec * 1000000ULL + wallTime.tv_nsec / 1000;\n> > +       uint64_t wall = wallTime.tv_sec * 1000000000ULL + wallTime.tv_nsec;\n> >\n> >         addSample(boot, wall);\n> >  }\n> > --\n> > 2.43.0\n> >","headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 26D0FBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon,  1 Sep 2025 11:26:56 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C60D469324;\n\tMon,  1 Sep 2025 13:26:55 +0200 (CEST)","from mail-vk1-xa36.google.com (mail-vk1-xa36.google.com\n\t[IPv6:2607:f8b0:4864:20::a36])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6298969323\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon,  1 Sep 2025 13:26:53 +0200 (CEST)","by mail-vk1-xa36.google.com with SMTP id\n\t71dfb90a1353d-544b07534b6so32771e0c.3\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 01 Sep 2025 04:26:53 -0700 (PDT)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"a9hiBhji\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1756726012; x=1757330812;\n\tdarn=lists.libcamera.org; \n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:from:to:cc:subject:date:message-id:reply-to;\n\tbh=OskWWakSLUZMtC2HvK6U1HJc60goGd0qy5H4GcqpWfg=;\n\tb=a9hiBhji/nx4PwWqTThbi0vAj1sIfDd1Wp3YMwCGegECQbmq6ekk03jBJ3cUPcU/bp\n\tbILRdH0SJPaFNO+SduvKQEFfXDJTmccwZtRTSVuTIlqpAziRkggl1Ktb+axES6XjViHO\n\t15tVY86TAaLodVfdreH7+UW66rdlbUqkYghscfLg8RScBNvyVDxkimPd8zScEhJztgAm\n\tu5ILnzhF5KNsVWuqEmF+4WKBSVd7rkUV7OuyBLpbFNzZBDAxW0mnvSal/JilXelpjlmu\n\tsd/iFndR0L8dKkJpAO4XR7dFi+pEsdkHdNvtN5htaB43qaVbk4ZgiaRYxj5V31kxjy+G\n\tqtxg==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1756726012; x=1757330812;\n\th=cc:to:subject:message-id:date:from:in-reply-to:references\n\t:mime-version:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=OskWWakSLUZMtC2HvK6U1HJc60goGd0qy5H4GcqpWfg=;\n\tb=sPT/89qMQMcZvZDAcM5u26SjbHteTQtE7qg1voRwQgXUIm5XD+GucHCe3HW5E2NFu1\n\t/Dndr5/vnVJazkHjQLflGS0MHRYvAfi+vlaZgWBTsPTa7OpwTOTmJCxjKSyBIQX6R29L\n\tjm53pr2lJgDwtD7D+fy41OhePYek3OFXmpTp++UhkZoqcVzL3QlyfQwyRAPDKoV7PxVk\n\tNGPC41GOJOVK0gUgS22BUhPa7SgeqglcxrQw+dNQjZwLH9OLvXsiyKS7xHRlvhs1v6VV\n\tIQCgVUlsnqQWvBf3Y6s08LvRoz+gUb6hyC6EuGV2/ASYS8X9xibYLezhRrILeEqPc+TR\n\t0T/w==","X-Gm-Message-State":"AOJu0YyTBlVEgl4tXHfjszJsVMOnsfOx9w557JIY+odp3vDdNFXR9z8H\n\tKlOzY84mceot/UTD+DbcPvSGRp83H982Fo+e6IVa1JBk/G7q75agRIb3KA4VGupbPkv1YYF1IiT\n\tNbstMf7WqMGRN1pbdIw+iLVhGyyHxw1kla2mkVjJyNI5gWktRTgs8","X-Gm-Gg":"ASbGncshsb9nDz2z6tpeFW+LTQkVivrDKScojQ/7R/S28g8CquWs9qvHWoqMotwwkU7\n\tk0IO8yLfEphPVWcxQDE0vmUIZ3fmxtL3FcJFrFS3GVF3AX2vtU6zwRqwlgerUzsD5oiPhZjXhgp\n\tu5O1k/FXjp9yc0zCDzOuGYQw0HJwJHGk2ODV+Cn/Ky9trhr1Q1s+YePZHAjC9+KB2qgd1Et5rGE\n\trh0dXFSmXGRHmsL2vc/zkcjmWMCgHB8QtoKkEY=","X-Google-Smtp-Source":"AGHT+IEb32Y9dqjCpnuMZjKGVxjenj78EDUHFVVE8cBFGgf1w/FkJ+JdGG0AJyFgdCRSe5uAkbO/NNkXZJJ34EqpdYQ=","X-Received":"by 2002:a05:6122:2015:b0:544:91a8:a8c9 with SMTP id\n\t71dfb90a1353d-5449592885fmr1079596e0c.3.1756726012335;\n\tMon, 01 Sep 2025 04:26:52 -0700 (PDT)","MIME-Version":"1.0","References":"<20250901111952.2155555-1-naush@raspberrypi.com>\n\t<175672576177.1794037.11847670454390053956@ping.linuxembedded.co.uk>","In-Reply-To":"<175672576177.1794037.11847670454390053956@ping.linuxembedded.co.uk>","From":"Naushir Patuck <naush@raspberrypi.com>","Date":"Mon, 1 Sep 2025 12:26:16 +0100","X-Gm-Features":"Ac12FXxY7DRmbLYqK3D9eqaYGzgPmXPavJeREfUQDURhsjrSx98dhf1i3dwTvrA","Message-ID":"<CAEmqJPpAz5Quw-Y+CJ1yqLryr+-2a3XxWmgg7Xzgtzsx+vSvzA@mail.gmail.com>","Subject":"Re: [PATCH] libcamera: clock_recovery: Fix for nanosecond conversion\n\tfor FrameWallClock","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org, david.plowman@raspberrypi.com","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"}}]