Patch Detail
Show a patch.
GET /api/1.1/patches/21320/?format=api
{ "id": 21320, "url": "https://patchwork.libcamera.org/api/1.1/patches/21320/?format=api", "web_url": "https://patchwork.libcamera.org/patch/21320/", "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": "<20240920183143.1674117-16-mzamazal@redhat.com>", "date": "2024-09-20T18:31:40", "name": "[v7,15/18] libcamera: software_isp: Use floating point for color parameters", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "df7e9ac070913b39012efea8ad2ca45a2bd4ef94", "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/21320/mbox/", "series": [ { "id": 4610, "url": "https://patchwork.libcamera.org/api/1.1/series/4610/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4610", "date": "2024-09-20T18:31:25", "name": "Software ISP refactoring", "version": 7, "mbox": "https://patchwork.libcamera.org/series/4610/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/21320/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/21320/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 892A8C3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 20 Sep 2024 18:32:51 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2EDE163516;\n\tFri, 20 Sep 2024 20:32:51 +0200 (CEST)", "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 454CE63515\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 20 Sep 2024 20:32:48 +0200 (CEST)", "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-626-4zvQ_Wf3PcWG0sLHQgCJHg-1;\n\tFri, 20 Sep 2024 14:32:42 -0400", "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (unknown\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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 35B5A192DE1F; Fri, 20 Sep 2024 18:32:41 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.224.12])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id CE9531956052; Fri, 20 Sep 2024 18:32:38 +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=\"EYPGFjpS\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1726857167;\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=4r8zjcIWBqgD3MjE9oc20DL/sMlkBryJwDZG8JuUKDU=;\n\tb=EYPGFjpSUOsqlKIZA60Y21PmgcONsqZepWXbwSxFfwOoRRiADthHixMiRbLJrHvKgFVxDx\n\tjVHIKj/jRalAdMtVZ+MNAeu+gilOpGI4ZnYOnO+p9IRCnwWlL32BR9QFHAhpSc2ZMFkAQ1\n\tjmjCCG3U30n2uQHSpwDETrN47j4i4VQ=", "X-MC-Unique": "4zvQ_Wf3PcWG0sLHQgCJHg-1", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tUmang Jain <umang.jain@ideasonboard.com>,\n\tLaurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tDaniel Scally <dan.scally@ideasonboard.com>,\n\tKieran Bingham <kieran.bingham@ideasonboard.com>", "Subject": "[PATCH v7 15/18] libcamera: software_isp: Use floating point for\n\tcolor parameters", "Date": "Fri, 20 Sep 2024 20:31:40 +0200", "Message-ID": "<20240920183143.1674117-16-mzamazal@redhat.com>", "In-Reply-To": "<20240920183143.1674117-1-mzamazal@redhat.com>", "References": "<20240920183143.1674117-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-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": "It's more natural to represent color gains as floating point numbers\nrather than using a particular pixel-related representation.\n\ndouble is used rather than float because it's a more common floating\npoint type in libcamera algorithms. Otherwise there is no obvious\nreason to select one over the other here.\n\nThe constructed color tables still use integer representation for\nefficiency.\n\nBlack level still uses pixel (integer) values, for consistency with\nother libcamera parts.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/ipa/simple/algorithms/awb.cpp | 9 ++++-----\n src/ipa/simple/algorithms/lut.cpp | 13 ++++++++-----\n src/ipa/simple/ipa_context.h | 6 +++---\n 3 files changed, 15 insertions(+), 13 deletions(-)", "diff": "diff --git a/src/ipa/simple/algorithms/awb.cpp b/src/ipa/simple/algorithms/awb.cpp\nindex 3d76cc2f..195de41d 100644\n--- a/src/ipa/simple/algorithms/awb.cpp\n+++ b/src/ipa/simple/algorithms/awb.cpp\n@@ -24,7 +24,7 @@ int Awb::configure(IPAContext &context,\n \t\t [[maybe_unused]] const IPAConfigInfo &configInfo)\n {\n \tauto &gains = context.activeState.gains;\n-\tgains.red = gains.green = gains.blue = 256;\n+\tgains.red = gains.green = gains.blue = 1.0;\n \n \treturn 0;\n }\n@@ -53,12 +53,11 @@ void Awb::process(IPAContext &context,\n \t/*\n \t * Calculate red and blue gains for AWB.\n \t * Clamp max gain at 4.0, this also avoids 0 division.\n-\t * Gain: 128 = 0.5, 256 = 1.0, 512 = 2.0, etc.\n \t */\n \tauto &gains = context.activeState.gains;\n-\tgains.red = sumR <= sumG / 4 ? 1024 : 256 * sumG / sumR;\n-\tgains.blue = sumB <= sumG / 4 ? 1024 : 256 * sumG / sumB;\n-\t/* Green gain is fixed to 256 */\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 }\ndiff --git a/src/ipa/simple/algorithms/lut.cpp b/src/ipa/simple/algorithms/lut.cpp\nindex 44e13864..794d3644 100644\n--- a/src/ipa/simple/algorithms/lut.cpp\n+++ b/src/ipa/simple/algorithms/lut.cpp\n@@ -59,15 +59,18 @@ void Lut::prepare(IPAContext &context,\n \tauto &gammaTable = context.activeState.gamma.gammaTable;\n \tconst unsigned int gammaTableSize = gammaTable.size();\n \tfor (unsigned int i = 0; i < DebayerParams::kRGBLookupSize; i++) {\n-\t\tconst unsigned int div = static_cast<double>(DebayerParams::kRGBLookupSize) *\n-\t\t\t\t\t 256 / gammaTableSize;\n+\t\tconst double div = static_cast<double>(DebayerParams::kRGBLookupSize) /\n+\t\t\t\t gammaTableSize;\n \t\t/* Apply gamma after gain! */\n \t\tunsigned int idx;\n-\t\tidx = std::min({ i * gains.red / div, gammaTableSize - 1 });\n+\t\tidx = std::min({ static_cast<unsigned int>(i * gains.red / div),\n+\t\t\t\t gammaTableSize - 1 });\n \t\tparams->red[i] = gammaTable[idx];\n-\t\tidx = std::min({ i * gains.green / div, gammaTableSize - 1 });\n+\t\tidx = std::min({ static_cast<unsigned int>(i * gains.green / div),\n+\t\t\t\t gammaTableSize - 1 });\n \t\tparams->green[i] = gammaTable[idx];\n-\t\tidx = std::min({ i * gains.blue / div, gammaTableSize - 1 });\n+\t\tidx = std::min({ static_cast<unsigned int>(i * gains.blue / div),\n+\t\t\t\t gammaTableSize - 1 });\n \t\tparams->blue[i] = gammaTable[idx];\n \t}\n }\ndiff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\nindex 737bbbc3..cf1ef3fd 100644\n--- a/src/ipa/simple/ipa_context.h\n+++ b/src/ipa/simple/ipa_context.h\n@@ -26,9 +26,9 @@ struct IPAActiveState {\n \t} blc;\n \n \tstruct {\n-\t\tunsigned int red;\n-\t\tunsigned int green;\n-\t\tunsigned int blue;\n+\t\tdouble red;\n+\t\tdouble green;\n+\t\tdouble blue;\n \t} gains;\n \n \tstatic constexpr unsigned int kGammaLookupSize = 1024;\n", "prefixes": [ "v7", "15/18" ] }