Patch Detail
Show a patch.
GET /api/patches/23036/?format=api
{ "id": 23036, "url": "https://patchwork.libcamera.org/api/patches/23036/?format=api", "web_url": "https://patchwork.libcamera.org/patch/23036/", "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": "<20250326090849.15494-2-mzamazal@redhat.com>", "date": "2025-03-26T09:08:38", "name": "[v8,01/10] libcamera: software_isp: Determine color temperature", "commit_ref": null, "pull_url": null, "state": "accepted", "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/23036/mbox/", "series": [ { "id": 5083, "url": "https://patchwork.libcamera.org/api/series/5083/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5083", "date": "2025-03-26T09:08:37", "name": "Software ISP support for CCM", "version": 8, "mbox": "https://patchwork.libcamera.org/series/5083/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/23036/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/23036/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 013A5C3213\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 26 Mar 2025 09:09:10 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 6BCD468961;\n\tWed, 26 Mar 2025 10:09:09 +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 834DD6895A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 26 Mar 2025 10:09:06 +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-241-Qo5SrZ9GPU2CLEeiqCF-WQ-1;\n\tWed, 26 Mar 2025 05:09:01 -0400", "from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.111])\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 C5FBE196B344; Wed, 26 Mar 2025 09:09:00 +0000 (UTC)", "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.34.15])\n\tby mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 50EF71801747; Wed, 26 Mar 2025 09:08:58 +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=\"XYQIyft/\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1742980145;\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=QnWUHd6+0Vmvy0CSNLpqjGxvr55Im1eSWWrZr/m/Eu0=;\n\tb=XYQIyft/yeDgcIhsBWC023GZN7f1cbeR2d3thr/8+CTHSU9s+KzAdE6z0oIKf8W+PRbfuE\n\tKHRz6qzZijZb58vzzmRAUkqDfkYkManSqhFEGNqPw2CB/0ksRtF9Hdg0Ztb/z1rZzNgatc\n\tZum50s7bXdg4sROBG3pvsvwwUSvUJ6o=", "X-MC-Unique": "Qo5SrZ9GPU2CLEeiqCF-WQ-1", "X-Mimecast-MFC-AGG-ID": "Qo5SrZ9GPU2CLEeiqCF-WQ_1742980141", "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 v8 01/10] libcamera: software_isp: Determine color\n\ttemperature", "Date": "Wed, 26 Mar 2025 10:08:38 +0100", "Message-ID": "<20250326090849.15494-2-mzamazal@redhat.com>", "In-Reply-To": "<20250326090849.15494-1-mzamazal@redhat.com>", "References": "<20250326090849.15494-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.111", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "U_T37J-0i2dTgZM6DBMGqyvS-wgoikh-jasq_UDBSfk_1742980141", "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>\nSigned-off-by: Milan Zamazal <mzamazal@redhat.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 18f3a550..a2e11d3b 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": [ "v8", "01/10" ] }