Cover Letter Detail
Show a cover letter.
GET /api/covers/21511/?format=api
{ "id": 21511, "url": "https://patchwork.libcamera.org/api/covers/21511/?format=api", "web_url": "https://patchwork.libcamera.org/cover/21511/", "project": { "id": 1, "url": "https://patchwork.libcamera.org/api/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": "<20241004115558.9166-1-david.plowman@raspberrypi.com>", "date": "2024-10-04T11:55:52", "name": "[0/6] Raspberry Pi software camera sync algorithm", "submitter": { "id": 42, "url": "https://patchwork.libcamera.org/api/people/42/?format=api", "name": "David Plowman", "email": "david.plowman@raspberrypi.com" }, "mbox": "https://patchwork.libcamera.org/cover/21511/mbox/", "series": [ { "id": 4658, "url": "https://patchwork.libcamera.org/api/series/4658/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4658", "date": "2024-10-04T11:55:52", "name": "Raspberry Pi software camera sync algorithm", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4658/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/covers/21511/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 ACC5DBD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 4 Oct 2024 11:56:06 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B39CE63527;\n\tFri, 4 Oct 2024 13:56:04 +0200 (CEST)", "from mail-wr1-x431.google.com (mail-wr1-x431.google.com\n\t[IPv6:2a00:1450:4864:20::431])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0665F62C8F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 4 Oct 2024 13:56:02 +0200 (CEST)", "by mail-wr1-x431.google.com with SMTP id\n\tffacd0b85a97d-37cc60c9838so1208563f8f.1\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 04 Oct 2024 04:56:02 -0700 (PDT)", "from raspberrypi.pitowers.org\n\t([2a00:1098:3142:1f:daa2:371b:a97:3e3e])\n\tby smtp.gmail.com with ESMTPSA id\n\tffacd0b85a97d-37d081f743esm3107147f8f.21.2024.10.04.04.56.01\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 04 Oct 2024 04:56:01 -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=\"Mh/q6Ia6\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1728042962; x=1728647762;\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=etoJ/Ta82BZMOQg7/ruzN2mxWes+BNuLhWq4YwV+EVc=;\n\tb=Mh/q6Ia6BUB3ebap5sApVwGLLAnBo7tkVI+EygryHlJ+Mp2OElVkyvQq7rdFanzMTO\n\t/tK2izXVLbZUWK5ocxgHAe7A9wmCsaa/POXOI68mNahyIIwjnR0ehvAJyKAAKFhG03IP\n\t2Iy4VcOKWDwBqIAivtl8VwzRg85DO/VIy9XS+A7HPAEOL2VNElfCUTBCYvr6bjbxfBgi\n\tHV+AvhHT40CzC33ruKTU1wGhtZ1OqgV1HUmq+ShfuD51zJVrwvjTU9Ui168SEwChMWeG\n\tAkOfhszybeTm0heQEizeGvY3j/udJ/SV/ZaHBoqg2YKUVAE9wmh3xfBWWuIR+y1xCixF\n\t4lQA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1728042962; x=1728647762;\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=etoJ/Ta82BZMOQg7/ruzN2mxWes+BNuLhWq4YwV+EVc=;\n\tb=usNKhtYsEIhlkHBZlYGAS0UxY/Sg6O8kpdQ3UBh9kpkmfcUs0fV6syO+XDpJBce6aZ\n\tkE9eqliQfYJ3RtId0MydnqozP2n6lS/u7FNjtpXmKrk52/A4R9yeVCxkHTiYkt2Fszwe\n\telm9M+LrzfsxEEbLm0ulmi605f5Pxs2a4pld6Bds5ZiCLfoCInUNmeIxlC5ZGFd5GrTE\n\t2oaVKGFl5wPBz83SjSSmxlt+bpleIVurTwJ/lsYXDCe2zRC2BtitOl52CQUxeIBv9ty1\n\tGXFqhTO29Cl622LeABdhVs51SpK4DsaVsjDJC5OtNcnV4DuAKJ36AJYM7lZ85WZynvWI\n\tGS8A==", "X-Gm-Message-State": "AOJu0YyrbBwYL03yIiAlIm6KXiKFjtGwKqsNsykgBGKHRYMoEz1H9zU+\n\t5TEGVDQwbT3dcULvDTZlHpn/bw3/pfxj+0+ekm57AfKojDvDhpQ0mIB0dtknBuBhLo8zFTV5M/4\n\t+", "X-Google-Smtp-Source": "AGHT+IHDKRbezWvgh3YGSmUV0BpmHG7scayI2jQ+sS9A7UM5nGtd1eqkJ4IRvzEXRj7qO8Mw9K9C+w==", "X-Received": "by 2002:a5d:4a12:0:b0:374:bf6b:1021 with SMTP id\n\tffacd0b85a97d-37d04a7b139mr4409007f8f.27.1728042962104; \n\tFri, 04 Oct 2024 04:56:02 -0700 (PDT)", "From": "David Plowman <david.plowman@raspberrypi.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "David Plowman <david.plowman@raspberrypi.com>", "Subject": "[PATCH 0/6] Raspberry Pi software camera sync algorithm", "Date": "Fri, 4 Oct 2024 12:55:52 +0100", "Message-Id": "<20241004115558.9166-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\nThis patch set adds a software camera sync algorithm to Raspberry Pi's\nlibcamera implementation. It is the result of work by our summer\nintern Arsen, as well as by Naush and myself.\n\nIt consists of a server, which broadcasts timing messages sporadically\n(such as once a second) on a socket, and then one or more clients that\nlisten out for these messages. The clients, which should be running at\nthe same (or a very close) framerate to the server, will perform a\none-off frame length adjustment in response to each message, causing\nthe frames to be synchronised with the server.\n\nAlthough principally designed for identical cameras running on the\nsame Pi, the system can also work for different kinds of cameras on\ndifferent Pis on the same network. In the former case we'd be\nexpecting sub 100us latencies between frames, and in the latter\nprobably sub 1ms. On different Pis, of course, one is subject to the\nvagaries of NTP (though you have the option to configure it better, or\nindeed use something else).\n\nThere are 6 patches, consisting of:\n\n* Some new controls.\n* Plumbing in the pipeline handler to generate wall clock timestamps.\n* Plumbing in the IPAs to support the new \"SyncAlgorithm\".\n* A complete initial implementation of \"rpi.sync\".\n* Updates to the camera tuning files to activate the algorithm.\n\nWe've had users wanting this feature for some time, and are keen to\nroll it out. As such, perhaps I could encourage reviewers to look at\nthe new controls (the first patch) first. Once this is agreed, we can\nroll the algorithm out without causing a subsequent API breakage for\nour users if other details get changed (the implementation underneath,\nin this respect, doesn't matter).\n\nUp for discussion, I would imagine, might be what the new controls\nmean and do, and indeed whether people would prefer them to be core\ncontrols or not.\n\nHope that all makes sense. Thanks everyone!\n\nBest regards\nDavid\n\nDavid Plowman (3):\n controls: rpi: Add controls for the camera sync algorithm\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 (3):\n pipeline: rpi: Add queue of wallclock timestamps\n pipelien: rpi: vc4: Populate the wallclock timestamps queue\n ipa: rpi: Add base classes and plumbing for sync algorithm\n\n src/ipa/rpi/common/ipa_base.cpp | 66 ++-\n src/ipa/rpi/common/ipa_base.h | 4 +-\n src/ipa/rpi/controller/meson.build | 2 +\n src/ipa/rpi/controller/rpi/clock_recovery.cpp | 87 ++++\n src/ipa/rpi/controller/rpi/clock_recovery.h | 55 +++\n src/ipa/rpi/controller/rpi/sync.cpp | 384 ++++++++++++++++++\n src/ipa/rpi/controller/rpi/sync.h | 71 ++++\n src/ipa/rpi/controller/sync_algorithm.h | 30 ++\n src/ipa/rpi/controller/sync_status.h | 27 ++\n src/ipa/rpi/vc4/data/imx219.json | 11 +-\n src/ipa/rpi/vc4/data/imx219_noir.json | 11 +-\n src/ipa/rpi/vc4/data/imx283.json | 11 +-\n src/ipa/rpi/vc4/data/imx290.json | 11 +-\n src/ipa/rpi/vc4/data/imx296.json | 11 +-\n src/ipa/rpi/vc4/data/imx296_mono.json | 11 +-\n src/ipa/rpi/vc4/data/imx378.json | 11 +-\n src/ipa/rpi/vc4/data/imx477.json | 11 +-\n src/ipa/rpi/vc4/data/imx477_noir.json | 11 +-\n src/ipa/rpi/vc4/data/imx477_scientific.json | 11 +-\n src/ipa/rpi/vc4/data/imx519.json | 11 +-\n src/ipa/rpi/vc4/data/imx708.json | 11 +-\n src/ipa/rpi/vc4/data/imx708_noir.json | 11 +-\n src/ipa/rpi/vc4/data/imx708_wide.json | 11 +-\n src/ipa/rpi/vc4/data/imx708_wide_noir.json | 11 +-\n src/ipa/rpi/vc4/data/ov5647.json | 11 +-\n src/ipa/rpi/vc4/data/ov5647_noir.json | 11 +-\n src/ipa/rpi/vc4/data/se327m12.json | 11 +-\n src/libcamera/control_ids_rpi.yaml | 76 ++++\n .../pipeline/rpi/common/pipeline_base.cpp | 9 +\n .../pipeline/rpi/common/pipeline_base.h | 2 +\n src/libcamera/pipeline/rpi/vc4/vc4.cpp | 12 +\n 31 files changed, 1000 insertions(+), 23 deletions(-)\n create mode 100644 src/ipa/rpi/controller/rpi/clock_recovery.cpp\n create mode 100644 src/ipa/rpi/controller/rpi/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" }