Patch Detail
Show a patch.
GET /api/1.1/patches/14247/?format=api
{ "id": 14247, "url": "https://patchwork.libcamera.org/api/1.1/patches/14247/?format=api", "web_url": "https://patchwork.libcamera.org/patch/14247/", "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": "<20211022073249.35084-12-jeanmichel.hautbois@ideasonboard.com>", "date": "2021-10-22T07:32:46", "name": "[libcamera-devel,v4,11/14] ipa: ipu3: agc: Introduce previous exposure value", "commit_ref": "cd0b3402ea205136ed0373e8307358c1b58f9cf5", "pull_url": null, "state": "accepted", "archived": false, "hash": "80cba5bae6b2eef2de1282e57548d47bdb4135c6", "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/14247/mbox/", "series": [ { "id": 2647, "url": "https://patchwork.libcamera.org/api/1.1/series/2647/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2647", "date": "2021-10-22T07:32:35", "name": "ipa: ipu3: Fix AGC bugs", "version": 4, "mbox": "https://patchwork.libcamera.org/series/2647/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/14247/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/14247/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 BBBDEBF415\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 22 Oct 2021 07:33:08 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 53CF468F68;\n\tFri, 22 Oct 2021 09:33:08 +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 777D968F5C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 22 Oct 2021 09:32:56 +0200 (CEST)", "from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:22cc:3af6:5ccb:8367])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 158FB51D;\n\tFri, 22 Oct 2021 09:32:56 +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=\"XAcpcDy3\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634887976;\n\tbh=svqh+A4Ef6cG7H2+0geRHj5YGbf2ySWXbeprnI7qqEA=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=XAcpcDy3XPFAn+p2iaBvsjTdyQQ3uGk9CmOEEiQdonYb0pj8piXSa0+WcwVFIjkq/\n\ttwVPXKRWLJEg98QyQnH5gCHkZRVQxjmlu5Se4F8OVwX19BEl1xF07jWBPrvA/Njjgc\n\tDYRo8AOxd6IzZaQO99lNNQosufP7KV2/p7YBKPEQ=", "From": "Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Fri, 22 Oct 2021 09:32:46 +0200", "Message-Id": "<20211022073249.35084-12-jeanmichel.hautbois@ideasonboard.com>", "X-Mailer": "git-send-email 2.32.0", "In-Reply-To": "<20211022073249.35084-1-jeanmichel.hautbois@ideasonboard.com>", "References": "<20211022073249.35084-1-jeanmichel.hautbois@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH v4 11/14] ipa: ipu3: agc: Introduce\n\tprevious exposure value", "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": "We need to calculate the gain on the previous exposure value calculated.\nNow that we initialise the exposure and gain values in configure(), we\nknow the initial exposure value, and we can set it before any loop is\nrunning.\n\nSigned-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n src/ipa/ipu3/algorithms/agc.cpp | 19 +++++++++++++++++--\n src/ipa/ipu3/algorithms/agc.h | 1 +\n 2 files changed, 18 insertions(+), 2 deletions(-)", "diff": "diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\nindex e7c59f3d..43ef89df 100644\n--- a/src/ipa/ipu3/algorithms/agc.cpp\n+++ b/src/ipa/ipu3/algorithms/agc.cpp\n@@ -42,7 +42,8 @@ static constexpr double kEvGainTarget = 0.5;\n Agc::Agc()\n \t: frameCount_(0), lastFrame_(0), iqMean_(0.0), lineDuration_(0s),\n \t minExposureLines_(0), maxExposureLines_(0), filteredExposure_(0s),\n-\t filteredExposureNoDg_(0s), currentExposure_(0s), currentExposureNoDg_(0s)\n+\t filteredExposureNoDg_(0s), currentExposure_(0s),\n+\t currentExposureNoDg_(0s), prevExposureValue_(0s)\n {\n }\n \n@@ -62,6 +63,10 @@ int Agc::configure(IPAContext &context, const IPAConfigInfo &configInfo)\n \t\tcontext.configuration.agc.minAnalogueGain;\n \tcontext.frameContext.agc.exposure = minExposureLines_;\n \n+\tprevExposureValue_ = context.frameContext.agc.gain\n+\t\t\t * context.frameContext.agc.exposure\n+\t\t\t * lineDuration_;\n+\n \treturn 0;\n }\n \n@@ -147,7 +152,7 @@ void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain)\n \t\t\t\t << \" Gain \" << analogueGain\n \t\t\t\t << \" Needed ev gain \" << evGain;\n \n-\t\tcurrentExposure_ = currentExposureNoDg_ * evGain;\n+\t\tcurrentExposure_ = prevExposureValue_ * evGain;\n \t\tutils::Duration minShutterSpeed = minExposureLines_ * lineDuration_;\n \t\tutils::Duration maxShutterSpeed = maxExposureLines_ * lineDuration_;\n \n@@ -176,6 +181,16 @@ void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain)\n \n \t\texposure = shutterTime / lineDuration_;\n \t\tanalogueGain = stepGain;\n+\n+\t\t/*\n+\t\t * Update the exposure value for the next process call.\n+\t\t *\n+\t\t * \\todo Obtain the values of the exposure time and analog gain\n+\t\t * that were actually used by the sensor, either from embedded\n+\t\t * data when available, or from the delayed controls\n+\t\t * infrastructure in case a slow down caused a mismatch.\n+\t\t */\n+\t\tprevExposureValue_ = shutterTime * analogueGain;\n \t}\n \tlastFrame_ = frameCount_;\n }\ndiff --git a/src/ipa/ipu3/algorithms/agc.h b/src/ipa/ipu3/algorithms/agc.h\nindex cd26d08c..2ae88e9f 100644\n--- a/src/ipa/ipu3/algorithms/agc.h\n+++ b/src/ipa/ipu3/algorithms/agc.h\n@@ -49,6 +49,7 @@ private:\n \tutils::Duration filteredExposureNoDg_;\n \tutils::Duration currentExposure_;\n \tutils::Duration currentExposureNoDg_;\n+\tutils::Duration prevExposureValue_;\n \n \tuint32_t stride_;\n };\n", "prefixes": [ "libcamera-devel", "v4", "11/14" ] }