From patchwork Wed Jan 22 14:53:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 22681 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by patchwork.libcamera.org (Postfix) with ESMTPS id 437DDBD808 for ; Thu, 30 Jan 2025 11:52:01 +0000 (UTC) Received: from pendragon.ideasonboard.com (cpc89244-aztw30-2-0-cust6594.18-1.cable.virginm.net [86.31.185.195]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id C9E78886 for ; Thu, 30 Jan 2025 12:50:52 +0100 (CET) Authentication-Results: perceval.ideasonboard.com; dkim=permerror header.d=raspberrypi.com header.i=@raspberrypi.com header.a=rsa-sha1 header.s=google header.b=dCLzpLeT; dkim-atps=neutral Delivered-To: kbingham@ideasonboard.com Received: from perceval.ideasonboard.com by perceval.ideasonboard.com with LMTP id INlLAUgGkWeNRjQA4E0KoQ (envelope-from ) for ; Wed, 22 Jan 2025 15:52:56 +0100 Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by perceval.ideasonboard.com (Postfix) with ESMTPS id B0172C16; Wed, 22 Jan 2025 15:52:55 +0100 (CET) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id ED5CB6855C; Wed, 22 Jan 2025 15:53:55 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="dCLzpLeT"; dkim-atps=neutral Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id F057168549 for ; Wed, 22 Jan 2025 15:53:53 +0100 (CET) Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4361f664af5so80663165e9.1 for ; Wed, 22 Jan 2025 06:53:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1737557633; x=1738162433; darn=lists.libcamera.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=hWe4PhjzGwoeE0P0sTVeWAOhFvt+ZK2Kd0fkNpVPMLA=; b=dCLzpLeTvgraC7CV4r0SSLkCOUXqWcrHpcp2mZqdGshKEFu/+mmGH4sXoPVmSww6cW nb5FbNEBsUow9GkPan31SbtjScnshsBjG9LRoF1mp7NLFg1zMO6th5qVg/rx3YeiG9iF 1t4hKHKSXBjaFeGnooIX0tJI8WbGoPCrN2TGLjh6lAe3w+ZvTC8eOOq19vrkcpcehU/z sG/O8k9XUGSirpDalBC8ci+0+uhEL7e006QalH2bEe6omc9Gvd8AqsrT2G9quy1GfILu 41sUix9Mw5+aZuWL+Qn9qJchspTZCG6ZtOxCdic+tDfqJHgKod+uwdDOY90RhNB5/+hJ a9mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1737557633; x=1738162433; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hWe4PhjzGwoeE0P0sTVeWAOhFvt+ZK2Kd0fkNpVPMLA=; b=gvUArrBpmhqqpnYv4ETIATozWjIJ4bTc4yZ5fuB0A2uxoa9c1A72Ej3uvwCJ/SdA6j 2665jJJoSC1WwdWtmRTWJ0yjEsWeNuAiJ1pgMB9VunPoPHIs8TiupbHV+PyMFs1b0JFw 6Y+oK//Ew95ky5QYKh5hY1EUj0QA7XLa7Ij+TnRYiQtdsHROU3Lu+RYrCVlw4AGKR1Ab ontceH051uSpkSt20dlYvV+sPprfmhcp1eY+avdrl8EnfHg7k9VDa5b9Ka61vYlT7QOq 6UuCos9wBWgO1E1hAumbPNAYnYkoaExvcvItcBfPAn8MHcm5rLG4eEXuFgZ88FUKt4XO DLdQ== X-Gm-Message-State: AOJu0Ywhj7lzamWWHHzDA+E+y9FJ0gUuHALhLGSdfPCJSmdmFN07TNXL KNNXuxvMbfPay9HhpZXw6gK9aZktuT+Csibwr12I2kXz6HQRBUhqi2ug3sJs8JOrRcY6wC4FYeh Z X-Gm-Gg: ASbGnct/jTX5f5aqUXEUQsGXiwzzYnPxxwnCrwlDhZaGfaR90x5DKzf36ENvsf35vUf s/zINB0tj5yBBfzvHoFXax6IofAsG7lkGx7QtHdjd5yjy2SA1OOabO5t/5hYuJYceWnkdzGFDVy W61EyMiV4PHyxSTL/onmNLDAIaEroB8xyaIn/r4oBi/V/3zwGHthBkDQedQzcDHCI08Ywsqs22q vKKWsOI5QOPpkSzbakVXFfhCZygLefjuZxZzRHzZAyXW6YegBUhcYEDcyLkysvvGCdq0G9heQuT Gupm7OUVEsOC3INRQta79QaPNw== X-Google-Smtp-Source: =?utf-8?q?AGHT+IHvFqz2jgasatcP+ASgGZzVrkFQvgpHag9Yd?= =?utf-8?q?bO95U7EgTMiQQAVO+YThIz+8eWTkzEGVBkZ3g=3D=3D?= X-Received: by 2002:a05:600c:4fc1:b0:434:f218:e1a8 with SMTP id 5b1f17b1804b1-4389141c21cmr172609885e9.19.1737557632994; Wed, 22 Jan 2025 06:53:52 -0800 (PST) Received: from raspberrypi.pitowers.org ([2a00:1098:3142:1f:ffc9:aff6:7f7f:893b]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-438b66dc08bsm11551395e9.37.2025.01.22.06.53.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Jan 2025 06:53:52 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Cc: David Plowman Subject: [PATCH v4 0/7] Camera synchronisation Date: Wed, 22 Jan 2025 14:53:42 +0000 Message-Id: <20250122145349.7220-1-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.39.5 MIME-Version: 1.0 X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" X-TUID: 9uRbpaMHfK5h Resent-From: Kieran Bingham Resent-To: parsemail@patchwork.libcamera.org Hi everyone Here's an updated set of camera sync patches. The only changes are the tags that Kieran and Naush added, plus a handful of very minor cosmetic things. I'm hoping we can make some progress towards getting at least some of this merged (the first patch in particular looks to have plenty of tags already!), plus further reviews where these are still required. Thanks! David David Plowman (6): controls: Add FrameWallClock control libcamera: Add ClockRecovery class to generate wallclock timestamps controls: Add camera synchronisation controls for Raspberry Pi pipeline: rpi: common: Add wallclock timestamp support ipa: rpi: sync: Add an implementation of the camera sync algorithm ipa: rpi: vc4: Update all tuning files for sync algorithm Naushir Patuck (1): ipa: rpi: Add base classes and plumbing for sync algorithm include/libcamera/internal/clock_recovery.h | 68 ++++ include/libcamera/internal/meson.build | 1 + src/ipa/rpi/common/ipa_base.cpp | 61 +++- src/ipa/rpi/common/ipa_base.h | 4 +- src/ipa/rpi/controller/meson.build | 1 + src/ipa/rpi/controller/rpi/sync.cpp | 329 ++++++++++++++++++ src/ipa/rpi/controller/rpi/sync.h | 68 ++++ src/ipa/rpi/controller/sync_algorithm.h | 31 ++ src/ipa/rpi/controller/sync_status.h | 27 ++ src/ipa/rpi/vc4/data/imx219.json | 7 +- src/ipa/rpi/vc4/data/imx219_noir.json | 7 +- src/ipa/rpi/vc4/data/imx283.json | 7 +- src/ipa/rpi/vc4/data/imx290.json | 7 +- src/ipa/rpi/vc4/data/imx296.json | 7 +- src/ipa/rpi/vc4/data/imx296_mono.json | 7 +- src/ipa/rpi/vc4/data/imx378.json | 7 +- src/ipa/rpi/vc4/data/imx477.json | 7 +- src/ipa/rpi/vc4/data/imx477_noir.json | 7 +- src/ipa/rpi/vc4/data/imx477_scientific.json | 7 +- src/ipa/rpi/vc4/data/imx519.json | 7 +- src/ipa/rpi/vc4/data/imx708.json | 7 +- src/ipa/rpi/vc4/data/imx708_noir.json | 7 +- src/ipa/rpi/vc4/data/imx708_wide.json | 7 +- src/ipa/rpi/vc4/data/imx708_wide_noir.json | 7 +- src/ipa/rpi/vc4/data/ov5647.json | 7 +- src/ipa/rpi/vc4/data/ov5647_noir.json | 7 +- src/ipa/rpi/vc4/data/se327m12.json | 7 +- src/libcamera/clock_recovery.cpp | 230 ++++++++++++ src/libcamera/control_ids_core.yaml | 19 +- src/libcamera/control_ids_rpi.yaml | 113 ++++++ src/libcamera/meson.build | 1 + .../pipeline/rpi/common/pipeline_base.cpp | 5 + .../pipeline/rpi/common/pipeline_base.h | 3 + src/libcamera/pipeline/rpi/vc4/vc4.cpp | 10 +- 34 files changed, 1069 insertions(+), 28 deletions(-) create mode 100644 include/libcamera/internal/clock_recovery.h create mode 100644 src/ipa/rpi/controller/rpi/sync.cpp create mode 100644 src/ipa/rpi/controller/rpi/sync.h create mode 100644 src/ipa/rpi/controller/sync_algorithm.h create mode 100644 src/ipa/rpi/controller/sync_status.h create mode 100644 src/libcamera/clock_recovery.cpp