Patch Detail
Show a patch.
GET /api/1.1/patches/14224/?format=api
{ "id": 14224, "url": "https://patchwork.libcamera.org/api/1.1/patches/14224/?format=api", "web_url": "https://patchwork.libcamera.org/patch/14224/", "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": "<20211021164401.110033-4-jeanmichel.hautbois@ideasonboard.com>", "date": "2021-10-21T16:43:50", "name": "[libcamera-devel,v3,03/14] ipa: ipu3: awb: Use saturation under 90%", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "41666aa852e7126f1399ecb37fd2aa39a30a3104", "submitter": { "id": 75, "url": "https://patchwork.libcamera.org/api/1.1/people/75/?format=api", "name": "Jean-Michel Hautbois", "email": "jeanmichel.hautbois@ideasonboard.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/14224/mbox/", "series": [ { "id": 2646, "url": "https://patchwork.libcamera.org/api/1.1/series/2646/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2646", "date": "2021-10-21T16:43:47", "name": "ipa: ipu3: Fix AGC bugs", "version": 3, "mbox": "https://patchwork.libcamera.org/series/2646/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/14224/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/14224/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 054EFBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 21 Oct 2021 16:44:15 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id C4627604FE;\n\tThu, 21 Oct 2021 18:44:11 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id F29FC68F58\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 21 Oct 2021 18:44:05 +0200 (CEST)", "from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:f9d:5926:ad90:4996])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id A7478276;\n\tThu, 21 Oct 2021 18:44:05 +0200 (CEST)" ], "Authentication-Results": "lancelot.ideasonboard.com;\n\tdkim=fail reason=\"signature verification failed\" (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"m29Xc7OF\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634834645;\n\tbh=keDBfUcAXAlJz708mF3rSdt9VbM8+247wgTlmK1kiQk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=m29Xc7OFgNluybqDat5sju/3xSXX17fpdkSo9cCkN7oXfeXrUbYcFk5BemQXRss1C\n\tdkoXyhj4Lcloso8usH91GfedJJimo4Dndy0Mq0gyXtcc23hyGu5FtMbfEfMLcboKGe\n\t0JgWNhfgu8o5Qn+4xHPXnR6mLTQFakcEwqXIxo4w=", "From": "Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Thu, 21 Oct 2021 18:43:50 +0200", "Message-Id": "<20211021164401.110033-4-jeanmichel.hautbois@ideasonboard.com>", "X-Mailer": "git-send-email 2.32.0", "In-Reply-To": "<20211021164401.110033-1-jeanmichel.hautbois@ideasonboard.com>", "References": "<20211021164401.110033-1-jeanmichel.hautbois@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v3 03/14] ipa: ipu3: awb: Use saturation\n\tunder 90%", "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 grey world algorithm tries to find a grey value and it can't do\nit on over-exposed images. To exclude those, the saturation ratio is\nused for each cell, and the cell is included only if this ratio is 0.\n\nNow that we have changed the threshold, more cells may be considered as\npartially saturated and excluded, preventing the algorithm from running\nefficiently.\n\nChange that behaviour, and consider 90% as a good enough ratio.\n\nSigned-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/ipa/ipu3/algorithms/awb.cpp | 28 ++++++++++++++++++++++++++--\n 1 file changed, 26 insertions(+), 2 deletions(-)", "diff": "diff --git a/src/ipa/ipu3/algorithms/awb.cpp b/src/ipa/ipu3/algorithms/awb.cpp\nindex 4364928c..ce01791b 100644\n--- a/src/ipa/ipu3/algorithms/awb.cpp\n+++ b/src/ipa/ipu3/algorithms/awb.cpp\n@@ -19,6 +19,18 @@ LOG_DEFINE_CATEGORY(IPU3Awb)\n \n static constexpr uint32_t kMinGreenLevelInZone = 32;\n \n+/*\n+ * Minimum proportion of non-saturated cells in a zone for the zone to be used\n+ * by the AWB algorithm.\n+ */\n+static constexpr double kMinRelevantCellsRatio = 0.8;\n+\n+/*\n+ * Maximum ratio of saturated pixels in a cell for the cell to be considered\n+ * non-saturated and counted by the AWB algorithm.\n+ */\n+static constexpr uint32_t kSaturationThreshold = 255 * 90 / 100;\n+\n /**\n * \\struct Accumulator\n * \\brief RGB statistics for a given zone\n@@ -160,7 +172,8 @@ int Awb::configure(IPAContext &context,\n \t * for it to be relevant for the grey world algorithm.\n \t * \\todo This proportion could be configured.\n \t */\n-\tcellsPerZoneThreshold_ = cellsPerZoneX_ * cellsPerZoneY_ * 80 / 100;\n+\tcellsPerZoneThreshold_ = cellsPerZoneX_ * cellsPerZoneY_ * kMinRelevantCellsRatio;\n+\tLOG(IPU3Awb, Debug) << \"Threshold for AWB is set to \" << cellsPerZoneThreshold_;\n \n \treturn 0;\n }\n@@ -234,7 +247,18 @@ void Awb::generateAwbStats(const ipu3_uapi_stats_3a *stats)\n \t\t\t\treinterpret_cast<const ipu3_uapi_awb_set_item *>(\n \t\t\t\t\t&stats->awb_raw_buffer.meta_data[cellPosition]\n \t\t\t\t);\n-\t\t\tif (currentCell->sat_ratio == 0) {\n+\n+\t\t\t/*\n+\t\t\t * Use cells which have less than 90%\n+\t\t\t * saturation as an initial means to include\n+\t\t\t * otherwise bright cells which are not fully\n+\t\t\t * saturated.\n+\t\t\t *\n+\t\t\t * \\todo The 90% saturation rate may require\n+\t\t\t * further empirical measurements and\n+\t\t\t * optimisation during camera tuning phases.\n+\t\t\t */\n+\t\t\tif (currentCell->sat_ratio <= kSaturationThreshold) {\n \t\t\t\t/* The cell is not saturated, use the current cell */\n \t\t\t\tawbStats_[awbZonePosition].counted++;\n \t\t\t\tuint32_t greenValue = currentCell->Gr_avg + currentCell->Gb_avg;\n", "prefixes": [ "libcamera-devel", "v3", "03/14" ] }