Show a patch.

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

{
    "id": 22763,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/22763/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/22763/",
    "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": "<20250207101703.21149-2-mzamazal@redhat.com>",
    "date": "2025-02-07T10:16:53",
    "name": "[v7,01/10] libcamera: software_isp: Determine color temperature",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "7de84c43925e86038042693f3ec19977347512d5",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/22763/mbox/",
    "series": [
        {
            "id": 4994,
            "url": "https://patchwork.libcamera.org/api/1.1/series/4994/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4994",
            "date": "2025-02-07T10:16:52",
            "name": "Software ISP support for CCM",
            "version": 7,
            "mbox": "https://patchwork.libcamera.org/series/4994/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/22763/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/22763/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 54EC0C32EA\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri,  7 Feb 2025 10:17:20 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id E9FC16860B;\n\tFri,  7 Feb 2025 11:17:19 +0100 (CET)",
            "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 846BA685BE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri,  7 Feb 2025 11:17:17 +0100 (CET)",
            "from mx-prod-mc-03.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-315-uvEcG-YdPB21HRSAHeqLkw-1;\n\tFri, 07 Feb 2025 05:17:14 -0500",
            "from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.15])\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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 6ECAE19560AF; Fri,  7 Feb 2025 10:17:13 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen3.tpbc.com (unknown [10.45.226.123])\n\tby mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id D74B119560AE; Fri,  7 Feb 2025 10:17:10 +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=\"fwcNIwA+\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1738923436;\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=fwcNIwA+AXiWog9Df+fUUe7sXrqJT1faKGO9/fbrZh1pfbP+S17hyjDriR2e1gnZH5i9ze\n\tWqPrm5KlTFsaSHszmoiFUVL8eF2CXVsrXf+EBtE+5Q3w8GjZ2MqIiCaS2IcNtacCr03Gb+\n\tNP1JmMLeqz/mp/zVpolI0GcHksqtJnU=",
        "X-MC-Unique": "uvEcG-YdPB21HRSAHeqLkw-1",
        "X-Mimecast-MFC-AGG-ID": "uvEcG-YdPB21HRSAHeqLkw",
        "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 v7 01/10] libcamera: software_isp: Determine color\n\ttemperature",
        "Date": "Fri,  7 Feb 2025 11:16:53 +0100",
        "Message-ID": "<20250207101703.21149-2-mzamazal@redhat.com>",
        "In-Reply-To": "<20250207101703.21149-1-mzamazal@redhat.com>",
        "References": "<20250207101703.21149-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.15",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "o7JjUqjSzMcPqM1MzhP1YNnozbuUbaFlxjcz_fsQ7fQ_1738923433",
        "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": [
        "v7",
        "01/10"
    ]
}