Patch Detail
Show a patch.
GET /api/1.1/patches/21408/?format=api
{ "id": 21408, "url": "https://patchwork.libcamera.org/api/1.1/patches/21408/?format=api", "web_url": "https://patchwork.libcamera.org/patch/21408/", "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": "<20240927134624.801004-16-mzamazal@redhat.com>", "date": "2024-09-27T13:46:21", "name": "[v8,15/18] libcamera: software_isp: Use floating point for color parameters", "commit_ref": "8c84efa486270e1bd5566baa1a3fb152bfa14604", "pull_url": null, "state": "accepted", "archived": false, "hash": "785ec24e5b354d5cb19aef08b103e17ab1fe28d6", "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/21408/mbox/", "series": [ { "id": 4634, "url": "https://patchwork.libcamera.org/api/1.1/series/4634/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4634", "date": "2024-09-27T13:46:06", "name": "Software ISP refactoring", "version": 8, "mbox": "https://patchwork.libcamera.org/series/4634/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/21408/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/21408/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 AB0F1C3257\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 27 Sep 2024 13:47:20 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 4F96A63539;\n\tFri, 27 Sep 2024 15:47:20 +0200 (CEST)", "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 9F8F063529\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 27 Sep 2024 15:47:14 +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-83-hqVpr_-DONOAdH94qNLd2Q-1;\n\tFri, 27 Sep 2024 09:47:11 -0400", "from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (unknown\n\t[10.30.177.40])\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 7731718B0692; Fri, 27 Sep 2024 13:47:09 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.224.123])\n\tby mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 35B761956054; Fri, 27 Sep 2024 13:47:06 +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=\"SWxaFVYv\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1727444833;\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=IZA+la+cP0x0ZgQIv5P6iy3VhCrcN7t/N+1wUC5/BY4=;\n\tb=SWxaFVYvKqSxYePiHS8hibL7UNn5F7yzxJT1b7XHvSiIWJ7ZwqM7E5dxcImpiFx3qoOVmy\n\t2qdM2V+iPNEW7TherUiIyFSJ0nplbrj6a3QkLGvmcrypkfFOgW/jw9hn49ZykINddD/6i/\n\tUKUSLCHF1skPOIHOz+RtUJOkkk93G00=", "X-MC-Unique": "hqVpr_-DONOAdH94qNLd2Q-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 v8 15/18] libcamera: software_isp: Use floating point for\n\tcolor parameters", "Date": "Fri, 27 Sep 2024 15:46:21 +0200", "Message-ID": "<20240927134624.801004-16-mzamazal@redhat.com>", "In-Reply-To": "<20240927134624.801004-1-mzamazal@redhat.com>", "References": "<20240927134624.801004-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.40", "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>\nReviewed-by: Umang Jain <umang.jain@ideasonboard.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 3d76cc2f7..195de41dc 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 644b4f84a..9744e773a 100644\n--- a/src/ipa/simple/algorithms/lut.cpp\n+++ b/src/ipa/simple/algorithms/lut.cpp\n@@ -63,15 +63,18 @@ void Lut::prepare(IPAContext &context,\n \tconst unsigned int gammaTableSize = gammaTable.size();\n \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 737bbbc37..cf1ef3fd8 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": [ "v8", "15/18" ] }