Patch Detail
Show a patch.
GET /api/1.1/patches/20941/?format=api
{ "id": 20941, "url": "https://patchwork.libcamera.org/api/1.1/patches/20941/?format=api", "web_url": "https://patchwork.libcamera.org/patch/20941/", "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": "<20240815083722.237229-2-mzamazal@redhat.com>", "date": "2024-08-15T08:37:16", "name": "[1/1] libcamera: software_isp: Get black level from the camera helper", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "d972bc0829f836020877548480ee877c0cd7c581", "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/20941/mbox/", "series": [ { "id": 4522, "url": "https://patchwork.libcamera.org/api/1.1/series/4522/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=4522", "date": "2024-08-15T08:37:15", "name": "Get black level from the camera helper", "version": 1, "mbox": "https://patchwork.libcamera.org/series/4522/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/20941/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/20941/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 EF16CBDB13\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 15 Aug 2024 08:37:36 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 96C63633C2;\n\tThu, 15 Aug 2024 10:37:36 +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 55E35633BA\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 15 Aug 2024 10:37:35 +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-88-Kl57wohAMguOSQDtgqepLg-1;\n\tThu, 15 Aug 2024 04:37:32 -0400", "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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 119C719560B1; Thu, 15 Aug 2024 08:37:32 +0000 (UTC)", "from nuthatch.redhat.com (unknown [10.45.225.128])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 5FE7A1955DC6; Thu, 15 Aug 2024 08:37:30 +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=\"PZiGUAPg\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1723711054;\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=Nyn2Snq6YBwVI/hEQbIZO6YrFUlpfWFdksGEtOI7KFM=;\n\tb=PZiGUAPgSD3cMJKrlmYAqfXgLslvhJiZrPJFrB2M0YT5g+VdEY5IUrchiDRbI9PrGg+EZo\n\tiCe8lAKF+xYc8NXBT4WSv4O8MDfuLtHpNWyjJ+uTY4nqcCG3WrWMSl14+qPXOpvdRJfNkK\n\tpA0Z0V55EzHb5QENI0WVs2t4lC5ywAY=", "X-MC-Unique": "Kl57wohAMguOSQDtgqepLg-1", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>,\n\tDaniel Scally <dan.scally@ideasonboard.com>", "Subject": "[PATCH 1/1] libcamera: software_isp: Get black level from the camera\n\thelper", "Date": "Thu, 15 Aug 2024 10:37:16 +0200", "Message-ID": "<20240815083722.237229-2-mzamazal@redhat.com>", "In-Reply-To": "<20240815083722.237229-1-mzamazal@redhat.com>", "References": "<20240815083722.237229-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": "The black level in software ISP is unconditionally guessed from the\nobtained frames. CameraSensorHelper optionally provides the black level\nfrom camera specifications now. Let's use the value if available.\n\nThe black level value initialization is moved from init to configure\nbecause this is where we get the other configuration (gains) from\nCameraSensorHelper in software ISP.\n\nIf the black level is not available from the given CameraSensorHelper\ninstance, it's still determined on the fly.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/ipa/simple/algorithms/blc.cpp | 10 +++++++---\n src/ipa/simple/algorithms/blc.h | 3 ++-\n src/ipa/simple/ipa_context.h | 3 ++-\n src/ipa/simple/soft_simple.cpp | 3 +++\n 4 files changed, 14 insertions(+), 5 deletions(-)", "diff": "diff --git a/src/ipa/simple/algorithms/blc.cpp b/src/ipa/simple/algorithms/blc.cpp\nindex d01c2c14..5dc924bb 100644\n--- a/src/ipa/simple/algorithms/blc.cpp\n+++ b/src/ipa/simple/algorithms/blc.cpp\n@@ -21,10 +21,11 @@ BlackLevel::BlackLevel()\n {\n }\n \n-int BlackLevel::init(IPAContext &context,\n-\t\t [[maybe_unused]] const YamlObject &tuningData)\n+int BlackLevel::configure(typename Module::Context &context,\n+\t\t\t [[maybe_unused]] const typename Module::Config &configInfo)\n {\n-\tcontext.activeState.black.level = 1.0;\n+\tcontext.activeState.black.level =\n+\t\tcontext.configuration.black.level.value_or(1.0);\n \treturn 0;\n }\n \n@@ -34,6 +35,9 @@ void BlackLevel::process(IPAContext &context,\n \t\t\t const SwIspStats *stats,\n \t\t\t [[maybe_unused]] ControlList &metadata)\n {\n+\tif (context.configuration.black.level.has_value())\n+\t\treturn;\n+\n \tif (frameContext.sensor.exposure == exposure_ &&\n \t frameContext.sensor.gain == gain_) {\n \t\treturn;\ndiff --git a/src/ipa/simple/algorithms/blc.h b/src/ipa/simple/algorithms/blc.h\nindex 9b9daab1..586a23d2 100644\n--- a/src/ipa/simple/algorithms/blc.h\n+++ b/src/ipa/simple/algorithms/blc.h\n@@ -24,7 +24,8 @@ public:\n \tBlackLevel();\n \t~BlackLevel() = default;\n \n-\tint init(IPAContext &context, const YamlObject &tuningData)\n+\tint configure(typename Module::Context &context,\n+\t\t const typename Module::Config &configInfo)\n \t\toverride;\n \tvoid process(IPAContext &context, const uint32_t frame,\n \t\t IPAFrameContext &frameContext,\ndiff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\nindex 0e2096f8..08f965f4 100644\n--- a/src/ipa/simple/ipa_context.h\n+++ b/src/ipa/simple/ipa_context.h\n@@ -8,6 +8,7 @@\n #pragma once\n \n #include <array>\n+#include <optional>\n \n #include <libcamera/controls.h>\n \n@@ -24,7 +25,7 @@ struct IPASessionConfiguration {\n \t\tdouble againMin, againMax, againMinStep;\n \t} agc;\n \tstruct {\n-\t\tdouble level;\n+\t\tstd::optional<double> level;\n \t} black;\n };\n \ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex aef5f6e5..ac7a22b7 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -201,6 +201,9 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo)\n \t\t\t(context_.configuration.agc.againMax -\n \t\t\t context_.configuration.agc.againMin) /\n \t\t\t100.0;\n+\t\tif (camHelper_->blackLevel().has_value())\n+\t\t\tcontext_.configuration.black.level =\n+\t\t\t\tcamHelper_->blackLevel().value() / 65536.0;\n \t} else {\n \t\t/*\n \t\t * The camera sensor gain (g) is usually not equal to the value written\n", "prefixes": [ "1/1" ] }