From patchwork Thu Jan 9 14:32:04 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 22499 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id BD910C32EA for ; Thu, 9 Jan 2025 14:32:18 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 7FF22684CD; Thu, 9 Jan 2025 15:32:17 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="eOD4J40u"; dkim-atps=neutral Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0E63A61891 for ; Thu, 9 Jan 2025 15:32:15 +0100 (CET) Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-4362f61757fso10483355e9.2 for ; Thu, 09 Jan 2025 06:32:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; t=1736433134; x=1737037934; 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=VHKq4dN57tGTzp/FEl8S3t9OmNeaJl6W8HRuCK5ilvY=; b=eOD4J40u4KNqLinzJDmXcLFicEL2NO9b77+Gb4EQpVrD92tu2QTENljlP5t9vFpPYd 3NtwVg4IjOurMMB1c+MRrE7Uau3XjuJaYrueKL2GaSugYqXZsG5DOvOLRB9N/6dy0tGI 9cdfDgyd7lIwMfHCX68qaMa61ijXUQ8OlI1q3Bs9m/T5oZVq7d1jg63YqEKuNA7oqbsk 7Xz2XnEBLlhQZG4dtoN7qzrlVfXFrlYOrXdA6b84QH+rlkjdQDZeyZ3p8uaSOKjNScWu L5A03s/Zd9C37VChSpg+EaR4EHrfs6SRx7J7yAPZcsvymasprpHQ4vWY4fdF7HJTMFNh FEwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736433134; x=1737037934; 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=VHKq4dN57tGTzp/FEl8S3t9OmNeaJl6W8HRuCK5ilvY=; b=KBE/A+f3CcHiOvESQXYFJipywRu176IWR5jXKl1oYGQ2XbwMjTj0xs9FZ+Sn6kYRaw n4LRME+KGwLP3UJrpeTTIAabo/5Ojma+/4ZtqidvwXMihTryNccHM2tD+WjyVIDPOjmZ OUdL/OLTiVPkfpjrnhp3nXPur0ZdfZ758cxrkUMBDW+TshXgwHHSmD6B1/6R4I3gM9G7 ADEADiHh6gaWDYFbcYKOmtT5ydswuLI1+EZZ1qMbomxqhkP4hXgDfWYkqcXg3ah1TgV7 8E+I5qk+OKYDL27cOnelxK0KHwXBh5jA3L+fzpXSZL03UgFWTk/t6DLSZ/n2j9FwJ+Sx hKcQ== X-Gm-Message-State: AOJu0Yw/IfztNeBXj7wOPb34BUwRF95oXam86ujX0BK0KCoe+JPEZN1K AnydOZwrPUNUquxQ8NeDAz2RlSEF/zdsApnfVW66pasZyoNwnSd0IvfEpDLEhW62+MmTKmZYZV5 K X-Gm-Gg: ASbGncufoy8qQPkFw384+ai6MI/Je/DoC4HXiq1Rey+cAO1ruWm9Dj7zid2esSwUfYZ 3RsHY44t56itWQzDgpMJBBpFkIljVpAmwab13k+r2H0xvUCIcXwgiRMvHK5uKqzgj1Rl27tpqYD FNRMwsP5UhubWe2wvHoObHXEIb8Ha8KP/ZIrTsPbV55lxXPdv5ZsS9+blfC7/Q8PpUkETadt7bN mfaRwFWNvjRtqb6G6OWSI98Mc3xE9O6s4b6Klk++UodDNhhoYgcFEEsW+Px4CHW0FnEA3Qn5WVG djHDceGbRP34 X-Google-Smtp-Source: AGHT+IEcLcfT6rLYk9pn8jKM8KibI/Edyw2SGRsoXu06OlSt8DT4JAaY89K/PF38kg3EaQt/TpRWNw== X-Received: by 2002:a5d:6c64:0:b0:385:ec6e:e87a with SMTP id ffacd0b85a97d-38a8730fc40mr7107359f8f.43.1736433134204; Thu, 09 Jan 2025 06:32:14 -0800 (PST) Received: from raspberrypi.pitowers.org ([2a00:1098:3142:1f:ffc9:aff6:7f7f:893b]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-38a8e4b80b2sm1952569f8f.80.2025.01.09.06.32.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Jan 2025 06:32:13 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Cc: David Plowman Subject: [PATCH v3 0/7] Camera synchronisation Date: Thu, 9 Jan 2025 14:32:04 +0000 Message-Id: <20250109143211.11939-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" Hi everyone Here's what I think is version 3 (?) of this patch set. The main change here is just that the Sync controls have been made Raspberry Pi specific. Note also that the "FrameWallClock control" patch is still here (doesn't appear to have been merged at the time of writing). Those interested in how a timing offset could be supplied should look at the 4th patch ("Add wallclock timestamp support"). A proposed "SyncOffset" control value would get remembered in applyControls(), and then in processStats() it could be used in place of the offset value from the SyncStatus (that pops out of the sync algorithm). Hope that's clear! 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:: 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 | 78 ++++- src/ipa/rpi/common/ipa_base.h | 4 +- src/ipa/rpi/controller/meson.build | 1 + src/ipa/rpi/controller/rpi/sync.cpp | 330 ++++++++++++++++++ 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 | 15 + 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, 1086 insertions(+), 25 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