Patch Detail
Show a patch.
GET /api/1.1/patches/22277/?format=api
{ "id": 22277, "url": "https://patchwork.libcamera.org/api/1.1/patches/22277/?format=api", "web_url": "https://patchwork.libcamera.org/patch/22277/", "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": "<20241210153440.1007470-2-mzamazal@redhat.com>", "date": "2024-12-10T15:34:31", "name": "[v3,1/9] libcamera: software_isp: Determine color temperature", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "d44545f92f6e6358edf14217567e5ffdac6c4d9c", "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/22277/mbox/", "series": [ { "id": 4871, "url": "https://patchwork.libcamera.org/api/1.1/series/4871/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4871", "date": "2024-12-10T15:34:30", "name": "Software ISP support for CCM", "version": 3, "mbox": "https://patchwork.libcamera.org/series/4871/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/22277/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/22277/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 5AD36C3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 10 Dec 2024 15:35:01 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 0BA2E67E95;\n\tTue, 10 Dec 2024 16:35:01 +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 7EDE567E92\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 10 Dec 2024 16:34:58 +0100 (CET)", "from mx-prod-mc-01.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-428-u50ik-xIPn2cgj6JpfsFCg-1;\n\tTue, 10 Dec 2024 10:34:54 -0500", "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.17])\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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id F3A271955F3E; Tue, 10 Dec 2024 15:34:52 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.224.8])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 89D331956048; Tue, 10 Dec 2024 15:34:50 +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=\"V/3jp0ST\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1733844897;\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=rmzCWa9805khRfQs9GweC8cpthB/thqqE9cBsIvfV6U=;\n\tb=V/3jp0STPTBxu1n0kkfqOLPa1Mb8Q3kIH0Q8qW5oCjZPT4Lo97XUkGx1scgQL+T7t+mkRn\n\tqcBGoEak8EhBPX7vfWKL9hw9IfYElYbB9IJh3FIOtvwnfjUUN5h2xn5lfJMwFC6o94QQX3\n\ttMcLTVcd9HCy0xVq2y63Y+7yntDSRkE=", "X-MC-Unique": "u50ik-xIPn2cgj6JpfsFCg-1", "X-Mimecast-MFC-AGG-ID": "u50ik-xIPn2cgj6JpfsFCg", "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 v3 1/9] libcamera: software_isp: Determine color temperature", "Date": "Tue, 10 Dec 2024 16:34:31 +0100", "Message-ID": "<20241210153440.1007470-2-mzamazal@redhat.com>", "In-Reply-To": "<20241210153440.1007470-1-mzamazal@redhat.com>", "References": "<20241210153440.1007470-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "k8jrAVIEIYh0eQEqUe3OHGOPpRt7mfPL0o4uH2a2GCw_1733844893", "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 | 13 ++++++++++---\n src/ipa/simple/algorithms/lut.cpp | 2 +-\n src/ipa/simple/ipa_context.h | 11 +++++++----\n 3 files changed, 18 insertions(+), 8 deletions(-)", "diff": "diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\nindex 195de41d..f4fe1af6 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,18 @@ 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+\tuint32_t temperature = estimateCCT(rgbGains);\n+\tcontext.activeState.awb.temperatureK = temperature;\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": [ "v3", "1/9" ] }