Show a patch.

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

{
    "id": 22698,
    "url": "https://patchwork.libcamera.org/api/patches/22698/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22698/",
    "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": "<20250130181449.130492-2-mzamazal@redhat.com>",
    "date": "2025-01-30T18:14:38",
    "name": "[v5,01/10] libcamera: software_isp: Determine color temperature",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": false,
    "hash": "7de84c43925e86038042693f3ec19977347512d5",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22698/mbox/",
    "series": [
        {
            "id": 4980,
            "url": "https://patchwork.libcamera.org/api/series/4980/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4980",
            "date": "2025-01-30T18:14:37",
            "name": "Software ISP support for CCM",
            "version": 5,
            "mbox": "https://patchwork.libcamera.org/series/4980/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22698/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22698/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 46ECBBD808\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 30 Jan 2025 18:15:13 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F09F96856B;\n\tThu, 30 Jan 2025 19:15:12 +0100 (CET)",
            "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 215DB6851B\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 30 Jan 2025 19:15:11 +0100 (CET)",
            "from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-240-EWUW9lqkOzuKJ5xblsQArQ-1;\n\tThu, 30 Jan 2025 13:15:06 -0500",
            "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 4060D1955F2D; Thu, 30 Jan 2025 18:15:05 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen3.tpbc.com (unknown [10.45.224.122])\n\tby mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id B52BA30001BE; Thu, 30 Jan 2025 18:15:02 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"QRnNjfNF\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1738260910;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=/yWSHj1+Z17rrk0zHNiP/s+YDRdgzPXHi53FB/4yoY8=;\n\tb=QRnNjfNF4CkSLG4C6w/OLGtfkL6Xn8uWMMuLRTH5jXNPdu8HxfOIdJIcDpu6doJvzOBJ70\n\tHerj9IDmKaUL3do40F1peSi+/T5DhL4gda+wEdNfMyJJMKlwMLHIIXnqdpvIY1a4HflYG9\n\tPcaipSEg9qcECM6pyZOpoFJfnNGO878=",
        "X-MC-Unique": "EWUW9lqkOzuKJ5xblsQArQ-1",
        "X-Mimecast-MFC-AGG-ID": "EWUW9lqkOzuKJ5xblsQArQ",
        "From": "Milan Zamazal <mzamazal@redhat.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tRobert Mader <robert.mader@collabora.com>,\n\tHans de Goede <hdegoede@redhat.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>",
        "Subject": "[PATCH v5 01/10] libcamera: software_isp: Determine color\n\ttemperature",
        "Date": "Thu, 30 Jan 2025 19:14:38 +0100",
        "Message-ID": "<20250130181449.130492-2-mzamazal@redhat.com>",
        "In-Reply-To": "<20250130181449.130492-1-mzamazal@redhat.com>",
        "References": "<20250130181449.130492-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "g-PhmdrLczuaR8jmMoU_VsAFq_6pW06h2xWM21wlwC8_1738260905",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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 has data to determine color temperature of the image.\nLet's compute the temperature from it and store it into the context.\nThis piece of information is currently unused but it will be needed in a\nfollowup patch introducing support for color correction matrix.\n\nLet's store the white balance related information under `awb' subsection\nof the active state, as the hardware pipelines do.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/ipa/simple/algorithms/awb.cpp | 12 +++++++++---\n src/ipa/simple/algorithms/lut.cpp |  2 +-\n src/ipa/simple/ipa_context.h      | 11 +++++++----\n 3 files changed, 17 insertions(+), 8 deletions(-)",
    "diff": "diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\nindex 195de41d..1efc7090 100644\n--- a/src/ipa/simple/algorithms/awb.cpp\n+++ b/src/ipa/simple/algorithms/awb.cpp\n@@ -12,6 +12,7 @@\n \n #include <libcamera/base/log.h>\n \n+#include \"libipa/colours.h\"\n #include \"simple/ipa_context.h\"\n \n namespace libcamera {\n@@ -23,7 +24,7 @@ namespace ipa::soft::algorithms {\n int Awb::configure(IPAContext &context,\n \t\t   [[maybe_unused]] const IPAConfigInfo &configInfo)\n {\n-\tauto &gains = context.activeState.gains;\n+\tauto &gains = context.activeState.awb.gains;\n \tgains.red = gains.green = gains.blue = 1.0;\n \n \treturn 0;\n@@ -54,12 +55,17 @@ void Awb::process(IPAContext &context,\n \t * Calculate red and blue gains for AWB.\n \t * Clamp max gain at 4.0, this also avoids 0 division.\n \t */\n-\tauto &gains = context.activeState.gains;\n+\tauto &gains = context.activeState.awb.gains;\n \tgains.red = sumR <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumR;\n \tgains.blue = sumB <= sumG / 4 ? 4.0 : static_cast<double>(sumG) / sumB;\n \t/* Green gain is fixed to 1.0 */\n \n-\tLOG(IPASoftAwb, Debug) << \"gain R/B \" << gains.red << \"/\" << gains.blue;\n+\tRGB<double> rgbGains{ { 1 / gains.red, 1 / gains.green, 1 / gains.blue } };\n+\tcontext.activeState.awb.temperatureK = estimateCCT(rgbGains);\n+\n+\tLOG(IPASoftAwb, Debug)\n+\t\t<< \"gain R/B: \" << gains.red << \"/\" << gains.blue\n+\t\t<< \"; temperature: \" << context.activeState.awb.temperatureK;\n }\n \n REGISTER_IPA_ALGORITHM(Awb, \"Awb\")\ndiff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp\nindex 0ba2391f..d75ff710 100644\n--- a/src/ipa/simple/algorithms/lut.cpp\n+++ b/src/ipa/simple/algorithms/lut.cpp\n@@ -95,7 +95,7 @@ void Lut::prepare(IPAContext &context,\n \t    context.activeState.gamma.contrast != context.activeState.knobs.contrast)\n \t\tupdateGammaTable(context);\n \n-\tauto &gains = context.activeState.gains;\n+\tauto &gains = context.activeState.awb.gains;\n \tauto &gammaTable = context.activeState.gamma.gammaTable;\n \tconst unsigned int gammaTableSize = gammaTable.size();\n \ndiff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\nindex 4af51306..607af45a 100644\n--- a/src/ipa/simple/ipa_context.h\n+++ b/src/ipa/simple/ipa_context.h\n@@ -36,10 +36,13 @@ struct IPAActiveState {\n \t} blc;\n \n \tstruct {\n-\t\tdouble red;\n-\t\tdouble green;\n-\t\tdouble blue;\n-\t} gains;\n+\t\tstruct {\n+\t\t\tdouble red;\n+\t\t\tdouble green;\n+\t\t\tdouble blue;\n+\t\t} gains;\n+\t\tunsigned int temperatureK;\n+\t} awb;\n \n \tstatic constexpr unsigned int kGammaLookupSize = 1024;\n \tstruct {\n",
    "prefixes": [
        "v5",
        "01/10"
    ]
}