Show a patch.

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

{
    "id": 14001,
    "url": "https://patchwork.libcamera.org/api/patches/14001/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/14001/",
    "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": "<20210930095513.76213-6-jeanmichel.hautbois@ideasonboard.com>",
    "date": "2021-09-30T09:55:00",
    "name": "[libcamera-devel,05/18] ipa: ipu3: awb: Add AWB class documentation",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "758a38f1d6bf34f5f370db63d265ab8ca31c7279",
    "submitter": {
        "id": 75,
        "url": "https://patchwork.libcamera.org/api/people/75/?format=api",
        "name": "Jean-Michel Hautbois",
        "email": "jeanmichel.hautbois@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/14001/mbox/",
    "series": [
        {
            "id": 2588,
            "url": "https://patchwork.libcamera.org/api/series/2588/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2588",
            "date": "2021-09-30T09:54:55",
            "name": "Document IPU3 IPA",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/2588/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/14001/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/14001/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 D495FC3243\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 30 Sep 2021 09:55:28 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id AA969691CE;\n\tThu, 30 Sep 2021 11:55:25 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5AE92691AE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 30 Sep 2021 11:55:18 +0200 (CEST)",
            "from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:bab4:22c5:662d:e478])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 0EAFC18BF;\n\tThu, 30 Sep 2021 11:55:18 +0200 (CEST)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"qcyVB/1l\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1632995718;\n\tbh=dIv8+hbMTv6KVHFopv7lWNYMQQfmHJhPArfKDw8tIBo=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=qcyVB/1lmbq/a9kG36ba7v3r312rDvufUIWDYtwEuKFE11xHJSSX402D9tPQ42DjS\n\tAh6wbKJqUUWMFPlviQ+/ufY/Cd4uiViO4Sg3Ry3s+IW3+EMGwIhLDju7jfq14pZAKK\n\tgYXnf7QEw0v1tNF1tFMz19GEosF1OjzcJwKhQzC8=",
        "From": "Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Thu, 30 Sep 2021 11:55:00 +0200",
        "Message-Id": "<20210930095513.76213-6-jeanmichel.hautbois@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.30.2",
        "In-Reply-To": "<20210930095513.76213-1-jeanmichel.hautbois@ideasonboard.com>",
        "References": "<20210930095513.76213-1-jeanmichel.hautbois@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH 05/18] ipa: ipu3: awb: Add AWB class\n\tdocumentation",
        "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 AWB algorithm is based on the Grey world algorithm and uses the\nstatistics generated by the ImgU for that. Explain how it uses those,\nand reference the original algorithm at the same time.\n\nSigned-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n---\n src/ipa/ipu3/algorithms/awb.cpp | 33 +++++++++++++++++++++++++++++++++\n 1 file changed, 33 insertions(+)",
    "diff": "diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp\nindex 4558f85a..f9e8cffc 100644\n--- a/src/ipa/ipu3/algorithms/awb.cpp\n+++ b/src/ipa/ipu3/algorithms/awb.cpp\n@@ -11,6 +11,10 @@\n \n #include <libcamera/base/log.h>\n \n+/**\n+ * \\file awb.h\n+ */\n+\n namespace libcamera {\n \n namespace ipa::ipu3::algorithms {\n@@ -129,6 +133,35 @@ static const struct ipu3_uapi_ccm_mat_config imguCssCcmDefault = {\n \t0, 0, 8191, 0\n };\n \n+/**\n+ * \\class Awb\n+ * \\brief A Grey world white balance correction algorithm\n+ *\n+ * The Grey World algorithm assumes that the scene, in average, is neutral grey.\n+ * Reference: Lam, Edmund & Fung, George. (2008). Automatic White Balancing in\n+ * Digital Photography. 10.1201/9781420054538.ch10.\n+ *\n+ * The IPU3 generates statistics from the Bayer Down Scaler output into a grid\n+ * defined in the ipu3_uapi_awb_config_s structure.\n+ *\n+ * For example, when the BDS outputs a frame of 2592x1944, the grid may be\n+ * configured to 80x30 cells each with a size of 32x64 pixels.\n+ * We then have an average of 2048 R, G and B pixels per cell.\n+ *\n+ * The AWB algorithm uses a fixed grid size of kAwbStatsSizeX x kAwbStatsSizeY.\n+ * Each of this new grid cell will be called a zone.\n+ *\n+ * Before calculating the gains, we will convert the statistics from the BDS\n+ * grid to an internal grid configuration in generateAwbStats.\n+ * As part of converting the statistics to an internal grid, the saturation\n+ * flag from the originating grid cell is used to decide if the zone contains\n+ * saturated pixels or not, making the zone relevant or not.\n+ * A saturated zone will be excluded from the calculation.\n+ *\n+ * The Grey World algorithm will then estimate the red and blue gains to apply, and\n+ * store the results in the metadata.\n+ */\n+\n Awb::Awb()\n \t: Algorithm()\n {\n",
    "prefixes": [
        "libcamera-devel",
        "05/18"
    ]
}