Cover Letter Detail
Show a cover letter.
GET /api/1.1/covers/24259/?format=api
{ "id": 24259, "url": "https://patchwork.libcamera.org/api/1.1/covers/24259/?format=api", "web_url": "https://patchwork.libcamera.org/cover/24259/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/1.1/projects/1/?format=api", "name": "libcamera", "link_name": "libcamera", "list_id": "libcamera_core", "list_email": "libcamera-devel@lists.libcamera.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20250829091011.2628954-1-paul.elder@ideasonboard.com>", "date": "2025-08-29T09:10:06", "name": "[0/4] Add Sync Layer", "submitter": { "id": 17, "url": "https://patchwork.libcamera.org/api/1.1/people/17/?format=api", "name": "Paul Elder", "email": "paul.elder@ideasonboard.com" }, "mbox": "https://patchwork.libcamera.org/cover/24259/mbox/", "series": [ { "id": 5412, "url": "https://patchwork.libcamera.org/api/1.1/series/5412/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5412", "date": "2025-08-29T09:10:06", "name": "Add Sync Layer", "version": 1, "mbox": "https://patchwork.libcamera.org/series/5412/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/24259/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 51EE9BD87C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 29 Aug 2025 09:10:29 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id ED3976931A;\n\tFri, 29 Aug 2025 11:10:28 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id CD95C692DF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 29 Aug 2025 11:10:26 +0200 (CEST)", "from neptunite.hamster-moth.ts.net (unknown\n\t[IPv6:2404:7a81:160:2100:af44:1f54:23d7:1088])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id BA8E51340;\n\tFri, 29 Aug 2025 11:09:19 +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=\"ChsmIKm1\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1756458561;\n\tbh=MH6HTxIwGWzdm1ug/N9HstyZlbSIZst64Bbw9/YJgTI=;\n\th=From:To:Cc:Subject:Date:From;\n\tb=ChsmIKm1sHLQu4rc6mTjPvPmlu1Urp8vLvhbgDLfftL7FIGWOuIAj/z316Tw5yYDR\n\tkBQVmA4NohDiyMoPZV+r/ak0iYwA3+3c3ymFBS1p9lDhDrmiMcc1T1nGA3CYpimgPA\n\tzcGtTZZr2UFReBmUiFQe5eEhip/g9Kbrd4ePa8Rw=", "From": "Paul Elder <paul.elder@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Paul Elder <paul.elder@ideasonboard.com>, david.plowman@raspberrypi.com, \n\tnaush@raspberrypi.com, kieran.bingham@ideasonboard.com,\n\tstefan.klug@ideasonboard.com", "Subject": "[PATCH 0/4] Add Sync Layer", "Date": "Fri, 29 Aug 2025 18:10:06 +0900", "Message-ID": "<20250829091011.2628954-1-paul.elder@ideasonboard.com>", "X-Mailer": "git-send-email 2.47.2", "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": "This series depends on:\n- v4 of \"Add Layers support\" [0]\n- v1 of \"libcamera: clock_recovery: Use nanoseconds in addSample()\" [1]\n- v1 of \"utils: Add unary negation operation to Duration\" [2]\n\nThere is a branch available at [3]. There is another version of the\nbranch available at [4], which is the same branch rebased on top of\nRaspberry Pi's next [5] branch with an additional patch [6] on top to\nmake Raspberry Pi use the Sync Layer instead of RPiSync.\n\nThis patch series adds a layer implementation of the Sync algorithm,\nwhere any number cameras can synchronize the timing of their captures.\nThis allows any camera to use the Sync algorithm, as long as it\nimplements the SyncAdjustment control and SensorTimestamp.\n\nI tested this on a pi5 (with an imx219 and imx708) and a Debix SOM (with\nan imx335 and imx283) with the following capture scripts, running the\nclient first before running the server in separate terminals:\n\n$ cat cscript-sync-client.yaml \nframes:\n - 1:\n FrameDurationLimits: [33333, 33333]\n SyncMode: 2\n\n$ cat cscript-sync-server.yaml \nframes:\n - 1:\n FrameDurationLimits: [33333, 33333]\n SyncMode: 1\n\nI ran:\n\n- pi5 with pure rpi/next (RPiSync) [7]\n- pi5 with this series on top of rpi/next (SyncLayer) [8]\n- som with this series (SyncLayer) [9]\n\nAnd I logged the correction time over a single run each of 8+ minutes at\n30fps.\nHere are the descriptive statistics for the correction values (all in\nmicroseconds):\n\n pi5 with RPiSync\n Min. 1st Qu. Median Mean 3rd Qu. Max.\n 225.0 243.0 249.0 248.8 255.0 274.0\n\n pi5 with SyncLayer\n Min. 1st Qu. Median Mean 3rd Qu. Max.\n 233 244 249 249 254 262\n\n som with SyncLayer\n Min. 1st Qu. Median Mean 3rd Qu. Max.\n -16623 -11205 -5373 -1936 11363 16585\n\nI have graphs of these runs here [10]\n\n[0] https://patchwork.libcamera.org/project/libcamera/list/?series=5401\n[1] https://patchwork.libcamera.org/project/libcamera/list/?series=5403\n[2] https://patchwork.libcamera.org/project/libcamera/list/?series=5404\n[3] https://git.uk.ideasonboard.com/epaul/libcamera/src/branch/epaul/dev/sync\n[4] https://git.uk.ideasonboard.com/epaul/libcamera/src/branch/epaul/dev/layer-pi5\n[5] https://github.com/raspberrypi/libcamera/tree/next\n[6] https://git.uk.ideasonboard.com/epaul/libcamera/commit/d5a389405040c6cf2f37686ca3cbfbc13bb68150\n[7] https://git.uk.ideasonboard.com/epaul/libcamera/src/commit/c576b4375a4b630ba0a8fad4bec4c16786d9dd8b\n[8] https://git.uk.ideasonboard.com/epaul/libcamera/commit/d5a389405040c6cf2f37686ca3cbfbc13bb68150\n[9] https://git.uk.ideasonboard.com/epaul/libcamera/commit/28c4f9fe2db8c772fbba5db48ced2ab9572b8363\n[10] https://git.uk.ideasonboard.com/epaul/libcamera/pulls/1#issuecomment-18703\n\nPaul Elder (4):\n controls: Add SyncAdjustment and SyncInterface controls\n layer: Add layer that implements the sync algorithm\n libipa: Add SyncHelper\n ipa: rkisp1: agc: Add support for sync\n\n src/ipa/libipa/meson.build | 2 +\n src/ipa/libipa/sync_helper.cpp | 99 ++++++\n src/ipa/libipa/sync_helper.h | 36 +++\n src/ipa/rkisp1/algorithms/agc.cpp | 22 +-\n src/ipa/rkisp1/algorithms/agc.h | 3 +-\n src/ipa/rkisp1/ipa_context.h | 1 +\n src/layer/meson.build | 1 +\n src/layer/sync/meson.build | 16 +\n src/layer/sync/sync.cpp | 465 ++++++++++++++++++++++++++++\n src/layer/sync/sync.h | 96 ++++++\n src/libcamera/control_ids_core.yaml | 23 ++\n 11 files changed, 762 insertions(+), 2 deletions(-)\n create mode 100644 src/ipa/libipa/sync_helper.cpp\n create mode 100644 src/ipa/libipa/sync_helper.h\n create mode 100644 src/layer/sync/meson.build\n create mode 100644 src/layer/sync/sync.cpp\n create mode 100644 src/layer/sync/sync.h" }