Show a patch.

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

{
    "id": 15922,
    "url": "https://patchwork.libcamera.org/api/patches/15922/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/15922/",
    "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": "<20220516161224.6712-2-david.plowman@raspberrypi.com>",
    "date": "2022-05-16T16:12:24",
    "name": "[libcamera-devel,v5,1/1] libcamera: controls: Controls for driving AF (autofocus) algorithms",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "b845b94363618532ca59f34ca567b0c4c752ddfb",
    "submitter": {
        "id": 42,
        "url": "https://patchwork.libcamera.org/api/people/42/?format=api",
        "name": "David Plowman",
        "email": "david.plowman@raspberrypi.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/15922/mbox/",
    "series": [
        {
            "id": 3114,
            "url": "https://patchwork.libcamera.org/api/series/3114/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3114",
            "date": "2022-05-16T16:12:23",
            "name": "AF controls",
            "version": 5,
            "mbox": "https://patchwork.libcamera.org/series/3114/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/15922/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/15922/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 D4338C326C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 16 May 2022 16:12:32 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 905B66565D;\n\tMon, 16 May 2022 18:12:32 +0200 (CEST)",
            "from mail-wm1-x333.google.com (mail-wm1-x333.google.com\n\t[IPv6:2a00:1450:4864:20::333])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id E1BD665653\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 16 May 2022 18:12:30 +0200 (CEST)",
            "by mail-wm1-x333.google.com with SMTP id\n\tbd25-20020a05600c1f1900b0039485220e16so227630wmb.0\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 16 May 2022 09:12:30 -0700 (PDT)",
            "from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72])\n\tby smtp.gmail.com with ESMTPSA id\n\tn14-20020a05600c3b8e00b0039429bfebeasm349219wms.2.2022.05.16.09.12.29\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 16 May 2022 09:12:29 -0700 (PDT)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1652717552;\n\tbh=0f/GoXPEk1GvVz2yEDOkzdQ7j7SbYpatwU0yMnblykA=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=wizxBbyp1HvI9L6YsY284Cl6PSA1lPZRODsIShDVz3AlTchhmdNcyUOKJd/Sii+HK\n\t+3/C5b57NJj0Ss/Tj3DJbTuv2E6qqecgZSPHxR+yCnQC+0QDcWNH3l4dB2OzN9fOqA\n\tcQgqZNkkSrFoJ3OHwOUbDp2GvR2HOFbdBlftbtFdYsQCogV+1wmOzReKo7FcHYZQeH\n\tEhwtV15JbI2FnzazYk96o/o6qN4MEhMXC20X+ustaA596bechRSJSI95qnK9QLZ/XI\n\tBxJNuSWmmhhMGf07AdF7JlFxSRLv1SC5x4p6dBJUQLg211iaaCuZx8Ug8Myt3nDZZK\n\tekeGm6rKBTsQg==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=raspberrypi.com; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references\n\t:mime-version:content-transfer-encoding;\n\tbh=XrL/oVeM8AtWomWo/znShh4o33Jf6xBFbjHHDsMLi3Q=;\n\tb=rMGCisTY44Ow/8Js0Qwn7MnX2SRSG+KR+yccQuakUedniO4dYuFSlDajX/WziTqLRo\n\t+UT5ElD7EefQf4HfAz4VPt59+DvcU6+tBZgQ1PxEzd/NOSNvBhPMi2hgY6L6xZlIQm+T\n\tCbwQ0+b0UENStj3BeQE5WEAjOfXD9Pi972t/k7FWOmlhOP0IBjPVsYHHMO8y6FIQJYCR\n\tMtUXldB3kp26CZ6/Jj2DcZpHgaDRnp96HeBJ0/Tz8bdrdMP/FSHA87IWPizuDuh4431K\n\t9LfQnoKBLwr9bI7QeWO9OU8CLVjg3Q07u6tTJXMg9Q/VFkPBhY8XqFYMkHpIot+v0dj0\n\tLd2w=="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key; \n\tunprotected) header.d=raspberrypi.com\n\theader.i=@raspberrypi.com\n\theader.b=\"rMGCisTY\"; dkim-atps=neutral",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20210112;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references:mime-version:content-transfer-encoding;\n\tbh=XrL/oVeM8AtWomWo/znShh4o33Jf6xBFbjHHDsMLi3Q=;\n\tb=U3HZFMpU4gk3ucZ8oLsyHRIIvTb7TtdkFz61Di5mThqgHR6+MM9vgNpcJuovcfnjEt\n\tViY+g1Dd4S11NrRHLe/BWiKoEpPmymGaQcZK1TldeASmsyaVDkFoykRNyWEH+OWR5fgy\n\tMmcRZgK4q16lNGNo01vA5mU0QbVgUVT4mX/bd8Wdglu9Z5CvvF6BQyFZnZ2kC/6Anuqb\n\tBmiebhFZBeAkK5lffHwhhU6Py6XY3ZJg1WSeb1LwgL7u0wenyrOcRAaKFYWpW6mymv6a\n\tQaKzuDPw8m9vKwGBNCMqpIbBMsjDbOHPB8JN1ggZRDW/iM1vYOfkwm7pC/Pba9iZ73Kj\n\t+lMQ==",
        "X-Gm-Message-State": "AOAM533S4BaBGWgd26HkfqoPiNpm22/JBb3Vad6BX118wMZAJNT+Uyf5\n\t+yASois9ZBXmAtDTOceq+aGO4H5Xa27MDOz2",
        "X-Google-Smtp-Source": "ABdhPJxV6kmWD5DArMzTQ2C1mlIecI0KVrWXlozAPsPt0vjnM9696ydvJSqkkY9zoziAwUYgk74Xew==",
        "X-Received": "by 2002:a7b:cb84:0:b0:382:a9b9:2339 with SMTP id\n\tm4-20020a7bcb84000000b00382a9b92339mr28505318wmi.91.1652717550130; \n\tMon, 16 May 2022 09:12:30 -0700 (PDT)",
        "To": "libcamera-devel@lists.libcamera.org, Jacopo Mondi <jacopo@jmondi.org>,\n\tHan-Lin Chen <hanlinchen@chromium.org>,\n\tJean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>,\n\tKate Hsuan <hpa@redhat.com>",
        "Date": "Mon, 16 May 2022 17:12:24 +0100",
        "Message-Id": "<20220516161224.6712-2-david.plowman@raspberrypi.com>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20220516161224.6712-1-david.plowman@raspberrypi.com>",
        "References": "<20220516161224.6712-1-david.plowman@raspberrypi.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v5 1/1] libcamera: controls: Controls for\n\tdriving AF (autofocus) algorithms",
        "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>",
        "From": "David Plowman via libcamera-devel <libcamera-devel@lists.libcamera.org>",
        "Reply-To": "David Plowman <david.plowman@raspberrypi.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "This patch describes a series of controls that allow applications to\ndrive AF algorithms:\n\nAfMode - manual, auto or continuous\nAfRange - full, macro or normal\nAfSpeed - fast or slow\nAfMetering - how to choose where to measure focus\nAfWindows - AF window locations\nAfTrigger - start (trigger) an AF scan or cancel\nAfPause - pause continuous AF\nLensPosition - set or retrieve position of lens\nAfState - reports whether scanning/success/failure\nAfPauseState - reports whether continuous AF paused or not\n\nSigned-off-by: David Plowman <david.plowman@raspberrypi.com>\n---\n src/libcamera/control_ids.yaml | 354 +++++++++++++++++++++++++++------\n 1 file changed, 294 insertions(+), 60 deletions(-)",
    "diff": "diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\nindex 9d4638ae..0e117de8 100644\n--- a/src/libcamera/control_ids.yaml\n+++ b/src/libcamera/control_ids.yaml\n@@ -381,6 +381,300 @@ controls:\n         \\todo Define how the sensor timestamp has to be used in the reprocessing\n         use case.\n \n+  - AfMode:\n+      type: int32_t\n+      description: |\n+        Control to set the mode of the AF (autofocus) algorithm.\n+\n+        An implementation may choose not to implement all the modes.\n+\n+      enum:\n+        - name: AfModeManual\n+          value: 0\n+          description: |\n+            The AF algorithm is in manual mode. In this mode it will never\n+            perform any action nor move the lens of its own accord, but an\n+            application can specify the desired lens position using the\n+            LensPosition control.\n+\n+            In this mode the AfState will always report AfStateIdle.\n+        - name: AfModeAuto\n+          value: 1\n+          description: |\n+            The AF algorithm is in auto mode. This means that the algorithm\n+            will never move the lens or change state unless the AfTrigger\n+            control is used. The AfTrigger control can be used to initiate a\n+            focus scan, the results of which will be reported by AfState.\n+\n+            If the autofocus algorithm is moved from AfModeAuto to another\n+            mode while a scan is in progress, the scan is cancelled\n+            immediately, without waiting for the scan to finish.\n+\n+            When first entering this mode the AfState will report\n+            AfStateIdle. When a trigger control is sent, AfState will\n+            report AfStateScanning for a period before spontaneously\n+            changing to AfStateFocused or AfStateFailed, depending on\n+            the outcome of the scan. It will remain in this state until\n+            another scan is initiated by the AfTrigger control. If a scan is\n+            cancelled (without changing to another mode), AfState will return\n+            to AfStateIdle.\n+        - name: AfModeContinuous\n+          value: 2\n+          description: |\n+            The AF algorithm is in continuous mode. This means that the lens can\n+            re-start a scan spontaneously at any moment, without any user\n+            intervention. The AfState still reports whether the algorithm is\n+            currently scanning or not, though the application has no ability to\n+            initiate or cancel scans, nor to move the lens for itself.\n+\n+            However, applications can pause the AF algorithm from continuously\n+            scanning by using the AfPause control. This allows video or still\n+            images to be captured whilst guaranteeing that the focus is fixed.\n+\n+            When set to AfModeContinuous, the system will immediately initiate a\n+            scan so AfState will report AfStateScanning, and will settle on one\n+            of AfStateFocused or AfStateFailed, depending on the scan result.\n+\n+  - AfRange:\n+      type: int32_t\n+      description: |\n+        Control to set the range of focus distances that is scanned. An\n+        implementation may choose not to implement all the options here.\n+      enum:\n+        - name: AfRangeNormal\n+          value: 0\n+          description: |\n+            A wide range of focus distances is scanned, all the way from\n+            infinity down to close distances, though depending on the\n+            implementation, possibly not including the very closest macro\n+            positions.\n+        - name: AfRangeMacro\n+          value: 1\n+          description: Only close distances are scanned.\n+        - name: AfRangeFull\n+          value: 2\n+          description: |\n+            The full range of focus distances is scanned just as with\n+            AfRangeNormal but this time including the very closest macro\n+            positions.\n+\n+  - AfSpeed:\n+      type: int32_t\n+      description: |\n+        Control that determines whether the AF algorithm is to move the lens\n+        as quickly as possible or more steadily. For example, during video\n+        recording it may be desirable not to move the lens too abruptly, but\n+        when in a preview mode (waiting for a still capture) it may be\n+        helpful to move the lens as quickly as is reasonably possible.\n+      enum:\n+        - name: AfSpeedNormal\n+          value: 0\n+          description: Move the lens at its usual speed.\n+        - name: AfSpeedFast\n+          value: 1\n+          description: Move the lens more quickly.\n+\n+  - AfMetering:\n+      type: int32_t\n+      description: |\n+        Instruct the AF algorithm how it should decide which parts of the image\n+        should be used to measure focus.\n+      enum:\n+        - name: AfMeteringAuto\n+          value: 0\n+          description: The AF algorithm should decide for itself where it will\n+            measure focus.\n+        - name: AfMeteringWindows\n+          value: 1\n+          description: The AF algorithm should use the rectangles defined by\n+            the AfWindows control to measure focus. If no windows are specified\n+            the behaviour is platform dependent.\n+\n+  - AfWindows:\n+      type: Rectangle\n+      description: |\n+        Sets the focus windows used by the AF algorithm when AfMetering is set\n+        to AfMeteringWindows. The units used are pixels within the rectangle\n+        returned by the ScalerCropMaximum property.\n+\n+        In order to be activated, a rectangle must be programmed with non-zero\n+        width and height. Internally, these rectangles are intersected with the\n+        ScalerCropMaximum rectangle. If the window becomes empty after this\n+        operation, then the window is ignored. If all the windows end up being\n+        ignored, then the behaviour is platform dependent.\n+\n+        On platforms that support the ScalerCrop control (for implementing\n+        digital zoom, for example), no automatic recalculation or adjustment of\n+        AF windows is performed internally if the ScalerCrop is changed. If any\n+        window lies outside the output image after the scaler crop has been\n+        applied, it is up to the application to recalculate them.\n+\n+        The details of how the windows are used are platform dependent. We note\n+        that when there is more than one AF window, a typical implementation\n+        might find the optimal focus position for each one and finally select\n+        the window where the focal distance for the objects shown in that part\n+        of the image are closest to the camera.\n+\n+      size: [n]\n+\n+  - AfTrigger:\n+      type: int32_t\n+      description: |\n+        This control starts an autofocus scan when AfMode is set to AfModeAuto,\n+        and can also be used to terminate a scan early.\n+\n+        It is ignored if AfMode is set to AfModeManual or AfModeContinuous.\n+\n+      enum:\n+        - name: AfTriggerStart\n+          value: 0\n+          description: Start an AF scan. Ignored if a scan is in progress.\n+        - name: AfTriggerCancel\n+          value: 1\n+          description: Cancel an AF scan. This does not cause the lens to move\n+            anywhere else. Ignored if no scan is in progress.\n+\n+  - AfPause:\n+      type: int32_t\n+      description: |\n+        This control has no effect except when in continuous autofocus mode\n+        (AfModeContinuous). It can be used to pause any lens movements while\n+        (for example) images are captured. The algorithm remains inactive\n+        until it is instructed to resume.\n+\n+      enum:\n+        - name: AfPauseImmediate\n+          value: 0\n+          description: |\n+            Pause the continuous autofocus algorithm immediately, whether or not\n+            any kind of scan is underway. AfPauseState will subsequently report\n+            AfPauseStatePaused. AfState may report any of AfStateScanning,\n+            AfStateFocused or AfStateFailed, depending on the algorithm's state\n+            when it received this control.\n+        - name: AfPauseDeferred\n+          value: 1\n+          description: |\n+            This is similar to AfPauseImmediate, and if the AfState is currently\n+            reporting AfStateFocused or AfStateFailed it will remain in that\n+            state and AfPauseState will report AfPauseStatePaused.\n+\n+            However, if the algorithm is scanning (AfStateScanning),\n+            AfPauseState will report AfPauseStatePausing until the scan is\n+            finished, at which point AfState will report one of AfStateFocused\n+            or AfStateFailed, and AfPauseState will change to\n+            AfPauseStatePaused.\n+\n+        - name: AfPauseResume\n+          value: 2\n+          description: |\n+            Resume continuous autofocus operation. The algorithm starts again\n+            from exactly where it left off, and AfPauseState will report\n+            AfPauseStateRunning.\n+\n+  - LensPosition:\n+      type: float\n+      description: |\n+        Acts as a control to instruct the lens to move to a particular position\n+        and also reports back the position of the lens for each frame.\n+\n+        The LensPosition control is ignored unless the AfMode is set to\n+        AfModeManual, though the value is reported back unconditionally in all\n+        modes.\n+\n+        The units are dioptres divided by the hyperfocal distance. Non-integer\n+        values are permitted. For example:\n+        0 moves the lens to infinity.\n+        0.5 moves the lens to twice the hyperfocal distance.\n+        1 moves the lens to the hyperfocal position.\n+        And larger values will focus the lens ever closer.\n+\n+        \\todo Define a property to report the Hyperforcal distance of calibrated\n+        lenses.\n+\n+        \\todo Define a property to report the maximum and minimum positions of\n+        this lens. The minimum value will often be zero (meaning infinity).\n+\n+  - AfState:\n+      type: int32_t\n+      description: |\n+        Reports the current state of the AF algorithm in conjunction with the\n+        reported AfMode value and (in continuous AF mode) the AfPauseState\n+        value. The possible state changes are described below, though we note\n+        the following state transitions that occur when the AfMode is changed.\n+\n+        If the AfMode is set to AfModeManual, then the AfState will always\n+        report AfStateIdle (even if the lens is subsequently moved). Changing to\n+        the AfModeManual state does not initiate any lens movement.\n+\n+        If the AfMode is set to AfModeAuto then the AfState will report\n+        AfStateIdle. However, if AfModeAuto and AfTriggerStart are sent together\n+        then AfState will omit AfStateIdle and move straight to AfStateScanning\n+        (and start a scan).\n+\n+        If the AfMode is set to AfModeContinuous then the AfState will initially\n+        report AfStateScanning.\n+\n+      enum:\n+        - name: AfStateIdle\n+          value: 0\n+          description: |\n+            The AF algorithm is in manual mode (AfModeManual) or in auto mode\n+            (AfModeAuto) and a scan has not yet been triggered, or an\n+            in-progress scan was cancelled.\n+        - name: AfStateScanning\n+          value: 1\n+          description: |\n+            The AF algorithm is in auto mode (AfModeAuto), and a scan has been\n+            started using the AfTrigger control. The scan can be cancelled by\n+            sending AfTriggerCancel at which point the algorithm will either\n+            move back to AfStateIdle or, if the scan actually completes before\n+            the cancel request is processed, to one of AfStateFocused or\n+            AfStateFailed.\n+\n+            Alternatively the AF algorithm could be in continuous mode\n+            (AfModeContinuous) at which point it may enter this state\n+            spontaneously whenever it determines that a rescan is needed.\n+        - name: AfStateFocused\n+          value: 2\n+          description: |\n+            The AF algorithm is in auto (AfModeAuto) or continuous\n+            (AfModeContinuous) mode and a scan has completed with the result\n+            that the algorithm believes the image is now in focus.\n+        - name: AfStateFailed\n+          value: 3\n+          description: |\n+            The AF algorithm is in auto (AfModeAuto) or continuous\n+            (AfModeContinuous) mode and a scan has completed with the result\n+            that the algorithm did not find a good focus position.\n+\n+  - AfPauseState:\n+      type: int32_t\n+      description: |\n+        Only applicable in continuous (AfModeContinuous) mode, this reports\n+        whether the algorithm is currently running, paused or pausing (that is,\n+        will pause as soon as any in-progress scan completes).\n+\n+        Any change to AfMode will cause AfPauseStateRunning to be reported.\n+\n+      enum:\n+        - name: AfPauseStateRunning\n+          value: 0\n+          description: |\n+            Continuous AF is running and the algorithm may restart a scan\n+            spontaneously.\n+        - name: AfPauseStatePausing\n+          value: 1\n+          description: |\n+            Continuous AF has been sent an AfPauseDeferred control, and will\n+            pause as soon as any in-progress scan completes (and then report\n+            AfPauseStatePaused). No new scans will be start spontaneously until\n+            the AfPauseResume control is sent.\n+        - name: AfPauseStatePaused\n+          value: 2\n+          description: |\n+            Continuous AF is paused. No further state changes or lens movements\n+            will occur until the AfPauseResume control is sent.\n+\n   # ----------------------------------------------------------------------------\n   # Draft controls section\n \n@@ -406,27 +700,6 @@ controls:\n             The camera will cancel any active or completed metering sequence.\n             The AE algorithm is reset to its initial state.\n \n-  - AfTrigger:\n-      type: int32_t\n-      draft: true\n-      description: |\n-       Control for AF trigger. Currently identical to\n-       ANDROID_CONTROL_AF_TRIGGER.\n-\n-        Whether the camera device will trigger autofocus for this request.\n-      enum:\n-        - name: AfTriggerIdle\n-          value: 0\n-          description: The trigger is idle.\n-        - name: AfTriggerStart\n-          value: 1\n-          description: The AF routine is started by the camera.\n-        - name: AfTriggerCancel\n-          value: 2\n-          description: |\n-            The camera will cancel any active trigger and the AF routine is\n-            reset to its initial state.\n-\n   - NoiseReductionMode:\n       type: int32_t\n       draft: true\n@@ -507,45 +780,6 @@ controls:\n             The AE algorithm has started a pre-capture metering session.\n             \\sa AePrecaptureTrigger\n \n-  - AfState:\n-      type: int32_t\n-      draft: true\n-      description: |\n-       Control to report the current AF algorithm state. Currently identical to\n-       ANDROID_CONTROL_AF_STATE.\n-\n-        Current state of the AF algorithm.\n-      enum:\n-        - name: AfStateInactive\n-          value: 0\n-          description: The AF algorithm is inactive.\n-        - name: AfStatePassiveScan\n-          value: 1\n-          description: |\n-            AF is performing a passive scan of the scene in continuous\n-            auto-focus mode.\n-        - name: AfStatePassiveFocused\n-          value: 2\n-          description: |\n-            AF believes the scene is in focus, but might restart scanning.\n-        - name: AfStateActiveScan\n-          value: 3\n-          description: |\n-            AF is performing a scan triggered by an AF trigger request.\n-            \\sa AfTrigger\n-        - name: AfStateFocusedLock\n-          value: 4\n-          description: |\n-            AF believes has focused correctly and has locked focus.\n-        - name: AfStateNotFocusedLock\n-          value: 5\n-          description: |\n-            AF has not been able to focus and has locked.\n-        - name: AfStatePassiveUnfocused\n-          value: 6\n-          description: |\n-            AF has completed a passive scan without finding focus.\n-\n   - AwbState:\n       type: int32_t\n       draft: true\n",
    "prefixes": [
        "libcamera-devel",
        "v5",
        "1/1"
    ]
}