{"id":22499,"url":"https://patchwork.libcamera.org/api/covers/22499/?format=json","web_url":"https://patchwork.libcamera.org/cover/22499/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250109143211.11939-1-david.plowman@raspberrypi.com>","date":"2025-01-09T14:32:04","name":"[v3,0/7] Camera synchronisation","submitter":{"id":42,"url":"https://patchwork.libcamera.org/api/people/42/?format=json","name":"David Plowman","email":"david.plowman@raspberrypi.com"},"mbox":"https://patchwork.libcamera.org/cover/22499/mbox/","series":[{"id":4939,"url":"https://patchwork.libcamera.org/api/series/4939/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4939","date":"2025-01-09T14:32:04","name":"Camera synchronisation","version":3,"mbox":"https://patchwork.libcamera.org/series/4939/mbox/"}],"comments":"https://patchwork.libcamera.org/api/covers/22499/comments/","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 BD910C32EA\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu,  9 Jan 2025 14:32:18 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7FF22684CD;\n\tThu,  9 Jan 2025 15:32:17 +0100 (CET)","from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com\n\t[IPv6:2a00:1450:4864:20::32d])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0E63A61891\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu,  9 Jan 2025 15:32:15 +0100 (CET)","by mail-wm1-x32d.google.com with SMTP id\n\t5b1f17b1804b1-4362f61757fso10483355e9.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 09 Jan 2025 06:32:14 -0800 (PST)","from raspberrypi.pitowers.org\n\t([2a00:1098:3142:1f:ffc9:aff6:7f7f:893b])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-38a8e4b80b2sm1952569f8f.80.2025.01.09.06.32.13\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tThu, 09 Jan 2025 06:32:13 -0800 (PST)"],"Authentication-Results":"lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"eOD4J40u\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1736433134; x=1737037934;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:from:to:cc:subject:date:message-id:reply-to;\n\tbh=VHKq4dN57tGTzp/FEl8S3t9OmNeaJl6W8HRuCK5ilvY=;\n\tb=eOD4J40u4KNqLinzJDmXcLFicEL2NO9b77+Gb4EQpVrD92tu2QTENljlP5t9vFpPYd\n\t3NtwVg4IjOurMMB1c+MRrE7Uau3XjuJaYrueKL2GaSugYqXZsG5DOvOLRB9N/6dy0tGI\n\t9cdfDgyd7lIwMfHCX68qaMa61ijXUQ8OlI1q3Bs9m/T5oZVq7d1jg63YqEKuNA7oqbsk\n\t7Xz2XnEBLlhQZG4dtoN7qzrlVfXFrlYOrXdA6b84QH+rlkjdQDZeyZ3p8uaSOKjNScWu\n\tL5A03s/Zd9C37VChSpg+EaR4EHrfs6SRx7J7yAPZcsvymasprpHQ4vWY4fdF7HJTMFNh\n\tFEwQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1736433134; x=1737037934;\n\th=content-transfer-encoding:mime-version:message-id:date:subject:cc\n\t:to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n\t:reply-to;\n\tbh=VHKq4dN57tGTzp/FEl8S3t9OmNeaJl6W8HRuCK5ilvY=;\n\tb=KBE/A+f3CcHiOvESQXYFJipywRu176IWR5jXKl1oYGQ2XbwMjTj0xs9FZ+Sn6kYRaw\n\tn4LRME+KGwLP3UJrpeTTIAabo/5Ojma+/4ZtqidvwXMihTryNccHM2tD+WjyVIDPOjmZ\n\tOUdL/OLTiVPkfpjrnhp3nXPur0ZdfZ758cxrkUMBDW+TshXgwHHSmD6B1/6R4I3gM9G7\n\tADEADiHh6gaWDYFbcYKOmtT5ydswuLI1+EZZ1qMbomxqhkP4hXgDfWYkqcXg3ah1TgV7\n\t8E+I5qk+OKYDL27cOnelxK0KHwXBh5jA3L+fzpXSZL03UgFWTk/t6DLSZ/n2j9FwJ+Sx\n\thKcQ==","X-Gm-Message-State":"AOJu0Yw/IfztNeBXj7wOPb34BUwRF95oXam86ujX0BK0KCoe+JPEZN1K\n\tAnydOZwrPUNUquxQ8NeDAz2RlSEF/zdsApnfVW66pasZyoNwnSd0IvfEpDLEhW62+MmTKmZYZV5\n\tK","X-Gm-Gg":"ASbGncufoy8qQPkFw384+ai6MI/Je/DoC4HXiq1Rey+cAO1ruWm9Dj7zid2esSwUfYZ\n\t3RsHY44t56itWQzDgpMJBBpFkIljVpAmwab13k+r2H0xvUCIcXwgiRMvHK5uKqzgj1Rl27tpqYD\n\tFNRMwsP5UhubWe2wvHoObHXEIb8Ha8KP/ZIrTsPbV55lxXPdv5ZsS9+blfC7/Q8PpUkETadt7bN\n\tmfaRwFWNvjRtqb6G6OWSI98Mc3xE9O6s4b6Klk++UodDNhhoYgcFEEsW+Px4CHW0FnEA3Qn5WVG\n\tdjHDceGbRP34","X-Google-Smtp-Source":"AGHT+IEcLcfT6rLYk9pn8jKM8KibI/Edyw2SGRsoXu06OlSt8DT4JAaY89K/PF38kg3EaQt/TpRWNw==","X-Received":"by 2002:a5d:6c64:0:b0:385:ec6e:e87a with SMTP id\n\tffacd0b85a97d-38a8730fc40mr7107359f8f.43.1736433134204; \n\tThu, 09 Jan 2025 06:32:14 -0800 (PST)","From":"David Plowman <david.plowman@raspberrypi.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"David Plowman <david.plowman@raspberrypi.com>","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","Content-Transfer-Encoding":"8bit","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>"},"content":"Hi everyone\n\nHere's what I think is version 3 (?) of this patch set. The main\nchange here is just that the Sync controls have been made Raspberry Pi\nspecific. Note also that the \"FrameWallClock control\" patch is still\nhere (doesn't appear to have been merged at the time of writing).\n\nThose interested in how a timing offset could be supplied should look\nat the 4th patch (\"Add wallclock timestamp support\"). A proposed\n\"SyncOffset\" control value would get remembered in applyControls(),\nand then in processStats() it could be used in place of the offset\nvalue from the SyncStatus (that pops out of the sync algorithm). Hope\nthat's clear!\n\nThanks\nDavid\n\nDavid Plowman (6):\n  controls: Add FrameWallClock control\n  libcamera: Add ClockRecovery class to generate wallclock timestamps\n  controls: Add camera synchronisation controls for Raspberry Pi\n  pipeline: rpi:: Add wallclock timestamp support\n  ipa: rpi: sync: Add an implementation of the camera sync algorithm\n  ipa: rpi: vc4: Update all tuning files for sync algorithm\n\nNaushir Patuck (1):\n  ipa: rpi: Add base classes and plumbing for sync algorithm\n\n include/libcamera/internal/clock_recovery.h   |  68 ++++\n include/libcamera/internal/meson.build        |   1 +\n src/ipa/rpi/common/ipa_base.cpp               |  78 ++++-\n src/ipa/rpi/common/ipa_base.h                 |   4 +-\n src/ipa/rpi/controller/meson.build            |   1 +\n src/ipa/rpi/controller/rpi/sync.cpp           | 330 ++++++++++++++++++\n src/ipa/rpi/controller/rpi/sync.h             |  68 ++++\n src/ipa/rpi/controller/sync_algorithm.h       |  31 ++\n src/ipa/rpi/controller/sync_status.h          |  27 ++\n src/ipa/rpi/vc4/data/imx219.json              |   7 +-\n src/ipa/rpi/vc4/data/imx219_noir.json         |   7 +-\n src/ipa/rpi/vc4/data/imx283.json              |   7 +-\n src/ipa/rpi/vc4/data/imx290.json              |   7 +-\n src/ipa/rpi/vc4/data/imx296.json              |   7 +-\n src/ipa/rpi/vc4/data/imx296_mono.json         |   7 +-\n src/ipa/rpi/vc4/data/imx378.json              |   7 +-\n src/ipa/rpi/vc4/data/imx477.json              |   7 +-\n src/ipa/rpi/vc4/data/imx477_noir.json         |   7 +-\n src/ipa/rpi/vc4/data/imx477_scientific.json   |   7 +-\n src/ipa/rpi/vc4/data/imx519.json              |   7 +-\n src/ipa/rpi/vc4/data/imx708.json              |   7 +-\n src/ipa/rpi/vc4/data/imx708_noir.json         |   7 +-\n src/ipa/rpi/vc4/data/imx708_wide.json         |   7 +-\n src/ipa/rpi/vc4/data/imx708_wide_noir.json    |   7 +-\n src/ipa/rpi/vc4/data/ov5647.json              |   7 +-\n src/ipa/rpi/vc4/data/ov5647_noir.json         |   7 +-\n src/ipa/rpi/vc4/data/se327m12.json            |   7 +-\n src/libcamera/clock_recovery.cpp              | 230 ++++++++++++\n src/libcamera/control_ids_core.yaml           |  15 +\n src/libcamera/control_ids_rpi.yaml            | 113 ++++++\n src/libcamera/meson.build                     |   1 +\n .../pipeline/rpi/common/pipeline_base.cpp     |   5 +\n .../pipeline/rpi/common/pipeline_base.h       |   3 +\n src/libcamera/pipeline/rpi/vc4/vc4.cpp        |  10 +-\n 34 files changed, 1086 insertions(+), 25 deletions(-)\n create mode 100644 include/libcamera/internal/clock_recovery.h\n create mode 100644 src/ipa/rpi/controller/rpi/sync.cpp\n create mode 100644 src/ipa/rpi/controller/rpi/sync.h\n create mode 100644 src/ipa/rpi/controller/sync_algorithm.h\n create mode 100644 src/ipa/rpi/controller/sync_status.h\n create mode 100644 src/libcamera/clock_recovery.cpp"}