Show a patch.

GET /api/1.1/patches/21512/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 21512,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/21512/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/21512/",
    "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": "<20241004115558.9166-2-david.plowman@raspberrypi.com>",
    "date": "2024-10-04T11:55:53",
    "name": "[1/6] controls: rpi: Add controls for the camera sync algorithm",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "ba808df79a0db6dcd2e48353bafc9e6bed0dbb63",
    "submitter": {
        "id": 42,
        "url": "https://patchwork.libcamera.org/api/1.1/people/42/?format=api",
        "name": "David Plowman",
        "email": "david.plowman@raspberrypi.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/21512/mbox/",
    "series": [
        {
            "id": 4658,
            "url": "https://patchwork.libcamera.org/api/1.1/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/patches/21512/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/21512/checks/",
    "tags": {},
    "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 DEAB0BD80A\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  4 Oct 2024 11:56:11 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B58B76352C;\n\tFri,  4 Oct 2024 13:56:06 +0200 (CEST)",
            "from mail-wr1-x435.google.com (mail-wr1-x435.google.com\n\t[IPv6:2a00:1450:4864:20::435])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 898FB62C8F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  4 Oct 2024 13:56:03 +0200 (CEST)",
            "by mail-wr1-x435.google.com with SMTP id\n\tffacd0b85a97d-37cca239886so1274633f8f.2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 04 Oct 2024 04:56:03 -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.02\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tFri, 04 Oct 2024 04:56:02 -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=\"dN8Y26yz\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google; t=1728042963; x=1728647763;\n\tdarn=lists.libcamera.org; \n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:from:to:cc:subject:date\n\t:message-id:reply-to;\n\tbh=/+QeznJmVtfJhdoE5niV18EGr1SvQlkkgJ2zxe7NDGY=;\n\tb=dN8Y26yzt5WjmV3vtX6+wWAWwaIjeMxzxqYUcdDZSlqyJdfKzlNeTuJYJOXXXBVpY7\n\t6yhrFf3U3VuWPIskENVscuhkRl5hLFfxuCuPrL8LMFoVOr9XPTiZQKQSTpTAF+wv2CN6\n\tQp9Q6KnsjQ4i99JK3fkJVrAIttnQvNYOrY+XbVqtylTT/vnBC6+YtbFn4g58oA++xw5b\n\tXJ+SmLGOnZ1LF8QERzII5rd24zWdovadvkCbhkRgGIRLdBYFZlY72s1pPdwQDBJ7KdDQ\n\t8WkmNtV5bRi21En4YBYsTNRtd5VCa0CKAy86LWUm4Eu4/JgFtHu9Zpqa6BeNjNe0cee9\n\t91xw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20230601; t=1728042963; x=1728647763;\n\th=content-transfer-encoding:mime-version:references:in-reply-to\n\t:message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n\t:subject:date:message-id:reply-to;\n\tbh=/+QeznJmVtfJhdoE5niV18EGr1SvQlkkgJ2zxe7NDGY=;\n\tb=ZhpNTEHvVwwNvSVe/hru7mC0xvLbjwYgXPPisclU2wkqX7M5rPdQqcBpIEszz/4HuK\n\trOGwN7/hMkS4OkJTWrqmeBgrEA+MpVPv+2CkJ/ygD1bb0xfRbwlTiFgvNGOm8MBRAPSW\n\ttfSSCYdyekslmUmFPC6kwvEy63jNb+cI3WhT85TfBm3pcAmagPIItc/vFPXo8r4RgLnH\n\trrq1VS5xTSC4oPpAOiwsAdmZTMbGjU+mWwaojvdO/GV74uoawe7NpcOL/yhHOC0jM54U\n\tnQSb7bismNt9jO3yUf3vuBnq6WQS14MtLHRsbP7tyO4wYe7SSLR4JYSyU49jfStNG9Hk\n\tK+ww==",
        "X-Gm-Message-State": "AOJu0YwRC6Pe7aUGTuAQl8NDd5yHfXo8wvOYzGfKqbcEa5VHrp/bSmI3\n\tlN5+DIdPM1bRajmwDbDYppvPwAa+pAIv5bI6asMloV0As4X+0cfGgzWVDBemWaL1jXpue/mcVFL\n\tU",
        "X-Google-Smtp-Source": "AGHT+IGjx0fS5C7bqF5N73ZKjOKeyVP4nzVMjBqPgZBJgDMLhh1GbZFL4SOIQS4Yj8q/aJdRBuTelQ==",
        "X-Received": "by 2002:a5d:64c8:0:b0:368:5ba0:622 with SMTP id\n\tffacd0b85a97d-37d0eafa3a2mr2132091f8f.44.1728042962696; \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>,\n\tArsen Mikovic <arsen.mikovic@raspberrypi.com>,\n\tNaushir Patuck <naush@raspberrypi.com>",
        "Subject": "[PATCH 1/6] controls: rpi: Add controls for the camera sync\n\talgorithm",
        "Date": "Fri,  4 Oct 2024 12:55:53 +0100",
        "Message-Id": "<20241004115558.9166-2-david.plowman@raspberrypi.com>",
        "X-Mailer": "git-send-email 2.39.5",
        "In-Reply-To": "<20241004115558.9166-1-david.plowman@raspberrypi.com>",
        "References": "<20241004115558.9166-1-david.plowman@raspberrypi.com>",
        "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": "The camera sync algorithm uses the following new controls:\n\nSyncMode - a camera can be a server or client\nSyncWait - whether the sync point has been reached\nSyncLag - how far away from synchronisation a camera was\nSyncFrameWallClock - for passing wall clock time to the IPA.\n\nSigned-off-by: David Plowman <david.plowman@raspberrypi.com>\nSigned-off-by: Arsen Mikovic <arsen.mikovic@raspberrypi.com>\nReviewed-by: Naushir Patuck <naush@raspberrypi.com>\n---\n src/libcamera/control_ids_rpi.yaml | 76 ++++++++++++++++++++++++++++++\n 1 file changed, 76 insertions(+)",
    "diff": "diff --git a/src/libcamera/control_ids_rpi.yaml b/src/libcamera/control_ids_rpi.yaml\nindex 42c4bf5d..b5605dfa 100644\n--- a/src/libcamera/control_ids_rpi.yaml\n+++ b/src/libcamera/control_ids_rpi.yaml\n@@ -30,4 +30,80 @@ controls:\n \n         \\sa StatsOutputEnable\n \n+  - FrameWallClock:\n+      type: int64_t\n+      description: |\n+        Control that returns the wall clock timestamp of a frame. This\n+        is the \"time since epoch\" value obtained from the system, in\n+        microseconds. This value is likely to be subject to\n+        significantly more jitter than the recorded SensorTimestamp.\n+\n+  - SyncMode:\n+      type: int32_t\n+      description: |\n+        Puts the camera system into sync mode, so that frames can be\n+        temporally synchronised with another camera, either on the same\n+        device, or on a different one.\n+      enum:\n+        - name: SyncModeOff\n+          value: 0\n+          description: Sync not in use.\n+        - name: SyncModeServer\n+          value: 1\n+          description: |\n+            Sync on, act as server. The server broadcasts timing\n+            messages to any clients that are listening, so that the\n+            clients can synchronise their camera frames with the\n+            server's.\n+        - name: SyncModeClient\n+          value: 2\n+          description: |\n+            Sync on, act as client. A client listens for any server\n+            messages, and arranges for its camera frames to synchronise\n+            as closely as possible with the server's. Many clients\n+            can listen out for the same server.\n+\n+  - SyncWait:\n+      type: bool\n+      description: |\n+        When using the camera syncrhonisation algorithm, the server\n+        broadcasts timing information to the client. This also includes\n+        the time (some number of frames in the future) at which it will\n+        tell the application running on the server when to start using\n+        the image frames (the \"ready time\").\n+\n+        The client receives the \"ready time\" from the server, and will\n+        tell the application on its end to start using the frames at\n+        this same moment.\n+\n+        While this control value is true, applications (on both client\n+        and server) should continue to wait.\n+\n+        Once this value is false, it means that this is the frame where\n+        client and server have agreed that it is the first synchronised\n+        frame that should be used by the application.\n+\n+  - SyncLag:\n+      type: int64_t\n+      description: |\n+        The lag is the amount of time since the \"ready time\", at which\n+        the server and client will signal their controlling applications\n+        that the frames are now synchronised and should be used.\n+\n+        Normally, therefore, the value will start negative (the \"ready\n+        time\" is in the future), and increase towards zero, before\n+        becoming positive (the \"ready time\" has elapsed).\n+\n+        Servers always report this value; clients will omit this control\n+        until they have received a message from the server that enables\n+        them to calculate it.\n+\n+        Normally there will be just one frame where the lag value is, or\n+        is very close to, zero - the one for which SyncWait becomes\n+        false. But note that if frames are being dropped, then the \"near\n+        zero\" value, or indeed any other, could be skipped. In these\n+        cases the lag value allows an application to work out exactly\n+        what has happened.\n+\n+        \\sa SyncWait\n ...\n",
    "prefixes": [
        "1/6"
    ]
}