Patch Detail
Show a patch.
GET /api/patches/22082/?format=api
{ "id": 22082, "url": "https://patchwork.libcamera.org/api/patches/22082/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22082/", "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": "<20241125180310.1254519-2-mzamazal@redhat.com>", "date": "2024-11-25T18:03:02", "name": "[v2,1/9] libcamera: software_isp: Determine color temperature", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "069100f2173f119fe2ad13a156b2cae43f9b0184", "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/22082/mbox/", "series": [ { "id": 4820, "url": "https://patchwork.libcamera.org/api/series/4820/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4820", "date": "2024-11-25T18:03:01", "name": "Software ISP support for CCM", "version": 2, "mbox": "https://patchwork.libcamera.org/series/4820/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22082/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22082/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 258C0BD160\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 25 Nov 2024 18:03:30 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C7BE166027;\n\tMon, 25 Nov 2024 19:03:29 +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 0737B65F68\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 25 Nov 2024 19:03:26 +0100 (CET)", "from mx-prod-mc-04.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-45-KIkzwNVuOPijXmr-FyF9FA-1;\n\tMon, 25 Nov 2024 13:03:24 -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-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id B93B119560B5; Mon, 25 Nov 2024 18:03:23 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.224.109])\n\tby mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 2F9631956086; Mon, 25 Nov 2024 18:03:21 +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=\"VLHd1UrB\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1732557805;\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=CBtOAfpeXHvxV5wVrC2Z5djaW5B8zis7F33WxJyPahk=;\n\tb=VLHd1UrBBwo8lakFMHh27ZNgNfRpv3bH+bc5SpqLC1qQ5WQT7Z5oZ7CiahvoHaYhfpzyiz\n\tHjqEXG+SxA+cO5Ugud5Einx8gZNFWYFNKMhc79gtjwZ6u04TzuPRSbSMunoKJnn3w7ZzLT\n\tGrpDDpTKKsBy8tv1sGTTMxhchtlu+uA=", "X-MC-Unique": "KIkzwNVuOPijXmr-FyF9FA-1", "X-Mimecast-MFC-AGG-ID": "KIkzwNVuOPijXmr-FyF9FA", "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>", "Subject": "[PATCH v2 1/9] libcamera: software_isp: Determine color temperature", "Date": "Mon, 25 Nov 2024 19:03:02 +0100", "Message-ID": "<20241125180310.1254519-2-mzamazal@redhat.com>", "In-Reply-To": "<20241125180310.1254519-1-mzamazal@redhat.com>", "References": "<20241125180310.1254519-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": "TgXD4zr9D0uQrEy1hy7w0_QnxgmU-eekRrdwRqYaX2g_1732557803", "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>\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 195de41dc..db384c3fa 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+\tcontext.activeState.awb.temperatureK =\n+\t\testimateCCT(1 / gains.red, 1 / gains.green, 1 / gains.blue);\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 9744e773a..7fc87fc5f 100644\n--- a/src/ipa/simple/algorithms/lut.cpp\n+++ b/src/ipa/simple/algorithms/lut.cpp\n@@ -58,7 +58,7 @@ void Lut::prepare(IPAContext &context,\n \tif (context.activeState.gamma.blackLevel != context.activeState.blc.level)\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 fd121eebe..268ba9cec 100644\n--- a/src/ipa/simple/ipa_context.h\n+++ b/src/ipa/simple/ipa_context.h\n@@ -34,10 +34,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 \tstruct {\n \t\tint32_t exposure;\n", "prefixes": [ "v2", "1/9" ] }