Patch Detail
Show a patch.
GET /api/1.1/patches/15153/?format=api
{ "id": 15153, "url": "https://patchwork.libcamera.org/api/1.1/patches/15153/?format=api", "web_url": "https://patchwork.libcamera.org/patch/15153/", "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": "<20211213152215.17584-2-david.plowman@raspberrypi.com>", "date": "2021-12-13T15:22:15", "name": "[libcamera-devel,RFC,1/1] libcamera: controls: Controls for driving AF (autofocus) algorithms", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "a1aeb8a9a5796bbac1da83192bcab14ff86f438e", "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/15153/mbox/", "series": [ { "id": 2841, "url": "https://patchwork.libcamera.org/api/1.1/series/2841/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2841", "date": "2021-12-13T15:22:14", "name": "Autofocus controls", "version": 1, "mbox": "https://patchwork.libcamera.org/series/2841/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/15153/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/15153/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 B90E9C324B\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 13 Dec 2021 15:22:26 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id DD1A26088B;\n\tMon, 13 Dec 2021 16:22:25 +0100 (CET)", "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 9A32260868\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Dec 2021 16:22:23 +0100 (CET)", "by mail-wm1-x333.google.com with SMTP id\n\tg191-20020a1c9dc8000000b0032fbf912885so11812269wme.4\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 13 Dec 2021 07:22:23 -0800 (PST)", "from pi4-davidp.pitowers.org\n\t([2a00:1098:3142:14:e4a2:3070:eea4:e434])\n\tby smtp.gmail.com with ESMTPSA id\n\tu2sm13001060wrs.17.2021.12.13.07.22.22\n\t(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n\tMon, 13 Dec 2021 07:22:22 -0800 (PST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=raspberrypi.com header.i=@raspberrypi.com\n\theader.b=\"nzpet0Ls\"; dkim-atps=neutral", "DKIM-Signature": "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=fkhg6BHriXrb+JRmK2yyd/0fIdV9HDaP/XBoe6qVfJk=;\n\tb=nzpet0LsJQX2D49PWrdgEfGJDq7h9McpXSEPeMuSS5/61jGbpTYYermLfE+Mxrvn4G\n\tXR3kAnK3jcyYNDG0ImT8OHE5AFZP1K8WVbjTYwPBR521gO5HAvO3oSEKq/1Fuhfep/zF\n\tnbLUyHR8fOISy1HO91/CIasBD4a/H0LmMHo06bDutJOD7QQ1P5N+8jMi7dr2wdL0Wl2V\n\taqmfAmLpCQjWfuC6w7NpuLiJFJAzM8y4qNV1o+K9vgPQ6YKtzO319HGGMeUCL9s42NlT\n\tGf6tDCq+Q2Ipc+v3A96GyGyEz/VsL/lIBu7JPIBW1nnoaCssrp+SK8sfsDHxjst7eqog\n\tRQTg==", "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=fkhg6BHriXrb+JRmK2yyd/0fIdV9HDaP/XBoe6qVfJk=;\n\tb=0EMPLemOrKPh/UG2kOG7twWw77eWQB5qt9+n7DVLwvxagOYFdMTQ7fHIyjBrtIh/A2\n\t4CkNqrxb7hRVcQQwd7a0peVpp3f2iKRkPWAn5vWu/WgXZ05hfVqwLJf5CDJYXXYvXdxT\n\tNqBhrR9l/pKDo9W36mCUUp5v+fIRCEzm7Ra2WX0/4sq1pStF90fCuAqwxWb8RFGO59M5\n\tJP639k5H6ylTCVKA5wekfI/HJHdI156zmrVQHt3QjX4V5Q2rh8Ri8EJgVYiBoLxxnEIQ\n\t0g66BsaeqiC7ZIkBgD6PNa/OZUoIyOj2jU7G5XKAXISxMwNE7Yjn4yXfFHayYVZN/KEW\n\tJTEg==", "X-Gm-Message-State": "AOAM530AaMdd86hmgCV73KX2kXCS0EJBBpKlTVIY5zdHrMtVZhxWxT7O\n\t2+qXopw4ULzGAWr7qIHaemlI5JbQT2PJuw==", "X-Google-Smtp-Source": "ABdhPJwOWQG/nmSQF6nyUQSDSEL/16eEyfi1TahvnbhnuY+NSH4bZUNnZIW7M2yX9x9Vt6E8O/YmyQ==", "X-Received": "by 2002:a1c:2685:: with SMTP id\n\tm127mr38655438wmm.42.1639408942846; \n\tMon, 13 Dec 2021 07:22:22 -0800 (PST)", "From": "David Plowman <david.plowman@raspberrypi.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Mon, 13 Dec 2021 15:22:15 +0000", "Message-Id": "<20211213152215.17584-2-david.plowman@raspberrypi.com>", "X-Mailer": "git-send-email 2.30.2", "In-Reply-To": "<20211213152215.17584-1-david.plowman@raspberrypi.com>", "References": "<20211213152215.17584-1-david.plowman@raspberrypi.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [RFC PATCH 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>", "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 - auto or continuous\nAfRange - full, macro or normal\nAfSpeed - fast or slow\nAfMethod - single or multi-spot\nAfWindow - AF window locations\nAfTrigger - start (trigger an AF scan) or cancel\nLensPosition - position of lens from lens driver\nAfState - reset, scanning, focused or failed\n---\n src/libcamera/control_ids.yaml | 227 ++++++++++++++++++++++++---------\n 1 file changed, 167 insertions(+), 60 deletions(-)", "diff": "diff --git a/src/libcamera/control_ids.yaml b/src/libcamera/control_ids.yaml\nindex 9d4638ae..e579f7b7 100644\n--- a/src/libcamera/control_ids.yaml\n+++ b/src/libcamera/control_ids.yaml\n@@ -406,27 +406,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 +486,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@@ -690,4 +630,171 @@ controls:\n value. All of the custom test patterns will be static (that is the\n raw image must not vary from frame to frame).\n \n+ - AfMode:\n+ type: int32_t\n+ draft: true\n+ description: |\n+ Control to set the mode of the AF (autofocus) algorithm.\n+ enum:\n+ - name: AfModeAuto\n+ value: 0\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 the AfState.\n+\n+ In this mode, an application can move the lens for itself using\n+ the LensPosition control. If the algorithm was scanning when the\n+ lens is moved in this way, then the scan is implicitly cancelled.\n+ - name: AfModeContinuous\n+ value: 1\n+ description: |\n+ The AF algorithm is in continuous mode. This means that the lens\n+ can 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\n+ to initiate or cancel scans, nor move the lens for itself.\n+\n+ The mode can be set to AfModeAuto which has the effect of\n+ \"pausing\" any continuous AF activity, after which it could then\n+ be moved back to AfModeContinuous to resume operation.\n+\n+ - AfRange:\n+ type: int32_t\n+ draft: true\n+ description: |\n+ Control to set the range of focus distances that is scanned.\n+ enum:\n+ - name: AfRangeFull\n+ value: 0\n+ description: The full range of focus distances is scanned.\n+ - name: AfRangeMacro\n+ value: 1\n+ description: Only close distances are scanned.\n+ - name: AfRangeNormal\n+ value: 2\n+ description: |\n+ The full range of focus distances is scanned except for some of\n+ the closest macro positions.\n+\n+ - AfSpeed:\n+ type: int32_t\n+ draft: true\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: AfSpeedFast\n+ value: 0\n+ description: Move the lens quickly.\n+ - name: AfSpeedSlow\n+ value: 0\n+ description: Move the lens more steadily.\n+\n+ - AfMethod:\n+ type: int32_t\n+ draft: true\n+ description: |\n+ Control whether the AF algorithm uses a single window in the image to\n+ determine the best focus position, or multiple windows simultaneously.\n+ enum:\n+ - name: AfMethodSingle\n+ value: 0\n+ description: |\n+ A single window within the image, defaulting to the centre, is used\n+ to select the best focus distance.\n+ - name: AfMethodMultiSpot\n+ value: 0\n+ description: |\n+ Multiple windows within the image are used to select the best focus\n+ distance. The best focus distance is found for each one of the\n+ windows, and then the distance that is closest to the camera is\n+ selected.\n+\n+ - AfWindow:\n+ type: Rectangle\n+ draft: true\n+ description: |\n+ Sets the focus windows used by the AF algorithm. The units used express\n+ a proportion of the ScalerCrop control (or if unavailable, of the entire\n+ image), as u0.16 format numbers.\n+\n+ In order to be activated, a rectangle must be programmed with non-zero\n+ width and height. If no rectangles are programmed in this way, then the\n+ system will choose its own single default window in the centre of the\n+ image.\n+\n+ If AfMethod is set to AfMethodSingle, then only the first Rectangle in\n+ this list is used (or the system default one if it is unprogrammed).\n+\n+ If AfMethod is set to AfMethodMultiSpot then all the valid Rectangles in\n+ this list are used. The size of the control indicates how many such\n+ windows can be programmed and will vary between different platforms.\n+\n+ size: [platform dependent]\n+\n+ - AfTrigger:\n+ type: int32_t\n+ draft: true\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 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. Ingored if no scan is in progress.\n+\n+ - LensPosition:\n+ type: int32_t\n+ draft: true\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 units are determined by the lens driver.\n+\n+ If the LensPosition control is used while an AF scan is in progress,\n+ the scan is implicitly cancelled and the lens is then moved to the\n+ desired location. It is ignored if AfMode is set to AfModeContinuous.\n+\n+ - AfState:\n+ type: int32_t\n+ draft: true\n+ description: |\n+ Reports the current state of the AF algorithm.\n+ enum:\n+ - name: AfStateReset\n+ value: 0\n+ description: |\n+ The AF algorithm reports this state when:\n+ * The camera system has just been started.\n+ * A scan has been cancelled.\n+ * The lens has been moved by the LensPosition control.\n+ - name: AfStateScanning\n+ value: 1\n+ description: |\n+ AF is performing a scan. This state can be entered spontaneously\n+ if AfMode is set to AfModeContinuous, otherwise it requires the\n+ application to use the AfTrigger control to start the scan.\n+ - name: AfStateFocused\n+ value: 2\n+ description: |\n+ An AF scan has been performed and the algorithm believes the\n+ scene is in focus.\n+ - name: AfStateFailed\n+ value: 3\n+ description: |\n+ An AF scan has been performed but the algorithm has not been able\n+ to find the best focus position.\n+\n ...\n", "prefixes": [ "libcamera-devel", "RFC", "1/1" ] }