Patch Detail
Show a patch.
GET /api/1.1/patches/14129/?format=api
{ "id": 14129, "url": "https://patchwork.libcamera.org/api/1.1/patches/14129/?format=api", "web_url": "https://patchwork.libcamera.org/patch/14129/", "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": "<20211013154125.133419-12-jeanmichel.hautbois@ideasonboard.com>", "date": "2021-10-13T15:41:23", "name": "[libcamera-devel,11/13] ipa: ipu3: agc: Remove condition on exposure correction", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "ff09799e1bd327a411f98788a6bbea2118c169f0", "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/14129/mbox/", "series": [ { "id": 2623, "url": "https://patchwork.libcamera.org/api/1.1/series/2623/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2623", "date": "2021-10-13T15:41:13", "name": "ipa: ipu3: Fix AGC bugs", "version": 1, "mbox": "https://patchwork.libcamera.org/series/2623/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/14129/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/14129/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 B3779BDC71\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Oct 2021 15:41:46 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 5ECED68F50;\n\tWed, 13 Oct 2021 17:41:46 +0200 (CEST)", "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id BBACB68F55\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Oct 2021 17:41:32 +0200 (CEST)", "from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:3857:aa01:4281:bd9f])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 6C7F28F0;\n\tWed, 13 Oct 2021 17:41:32 +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=\"PkBfyJZh\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634139692;\n\tbh=YaIX7eIDzNTuC6Lj5yOn2vwdMF6osrYBdCwpuuDz/7Q=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=PkBfyJZhkK1u7/u8f9sg+0nsNVi8pPA8lO201k8ZLgeeSqlSQDPTKfTdwM4n5Bzue\n\toDvmPT1BNRdBOsxRsVmC0VqR4Pduw/B6cPh45sdDI3M749O7XuAYly/TLwxX2b2cDk\n\tkv+hp3aVf6q8F8tGAvlE1zvk63z9UaOgDVZTQzuM=", "From": "Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>", "To": "libcamera-devel@lists.libcamera.org", "Date": "Wed, 13 Oct 2021 17:41:23 +0200", "Message-Id": "<20211013154125.133419-12-jeanmichel.hautbois@ideasonboard.com>", "X-Mailer": "git-send-email 2.30.2", "In-Reply-To": "<20211013154125.133419-1-jeanmichel.hautbois@ideasonboard.com>", "References": "<20211013154125.133419-1-jeanmichel.hautbois@ideasonboard.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Subject": "[libcamera-devel] [PATCH 11/13] ipa: ipu3: agc: Remove condition on\n\texposure correction", "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": "When the exposure is estimated, we verify if it changed enough for\nexposure and gain to be updated.\n\nThere is no need for that because we are now filtering the value with\nthe previous one correctly, so if the change is very small is won't\nchange the exposure and analogue gain.\n\nSigned-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>\n---\n src/ipa/ipu3/algorithms/agc.cpp | 96 ++++++++++++++++-----------------\n 1 file changed, 46 insertions(+), 50 deletions(-)", "diff": "diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\nindex 7efe0907..b922bcdf 100644\n--- a/src/ipa/ipu3/algorithms/agc.cpp\n+++ b/src/ipa/ipu3/algorithms/agc.cpp\n@@ -132,61 +132,57 @@ void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain)\n \tif ((frameCount_ < kInitialFrameMinAECount) || (frameCount_ - lastFrame_ < kFrameSkipCount))\n \t\treturn;\n \n-\t/* Are we correctly exposed ? */\n-\tif (std::abs(iqMean_ - kEvGainTarget * knumHistogramBins) <= 1) {\n-\t\tLOG(IPU3Agc, Debug) << \"!!! Good exposure with iqMean = \" << iqMean_;\n-\t} else {\n-\t\tdouble evGain = kEvGainTarget * knumHistogramBins / iqMean_;\n-\n-\t\t/* extracted from Rpi::Agc::computeTargetExposure */\n-\t\tDuration currentShutter = exposure * lineDuration_;\n-\t\tcurrentExposureNoDg_ = currentShutter * analogueGain;\n-\t\tLOG(IPU3Agc, Debug) << \"Actual total exposure \" << currentExposureNoDg_\n-\t\t\t\t << \" Shutter speed \" << currentShutter\n-\t\t\t\t << \" Gain \" << analogueGain\n-\t\t\t\t << \" Needed ev gain \" << evGain;\n-\n-\t\tcurrentExposure_ = prevExposureValue * evGain;\n-\t\tDuration maxTotalExposure = kMaxShutterSpeed * kMaxGain;\n-\t\tcurrentExposure_ = std::min(currentExposure_, maxTotalExposure);\n-\t\tLOG(IPU3Agc, Debug) << \"Target total exposure \" << currentExposure_\n-\t\t\t\t << \" maximum is \" << maxTotalExposure;\n-\n-\t\t/* \\todo: estimate if we need to desaturate */\n-\t\tfilterExposure();\n-\n-\t\tDuration exposureValue = filteredExposure_;\n-\t\tDuration shutterTime = kMinShutterSpeed;\n-\t\tdouble stepGain = kMinGain;\n-\n-\t\tif (shutterTime * stepGain < exposureValue) {\n-\t\t\tDuration maxShutterMinGain = kMaxShutterSpeed * stepGain;\n-\t\t\tif (maxShutterMinGain >= exposureValue) {\n-\t\t\t\tLOG(IPU3Agc, Debug) << \"Setting shutterTime to \" << shutterTime;\n-\t\t\t\tshutterTime = exposureValue / stepGain;\n-\t\t\t} else {\n-\t\t\t\tshutterTime = kMaxShutterSpeed;\n-\t\t\t}\n+\tdouble evGain = kEvGainTarget * knumHistogramBins / iqMean_;\n+\n+\t/* extracted from Rpi::Agc::computeTargetExposure */\n+\tDuration currentShutter = exposure * lineDuration_;\n+\tcurrentExposureNoDg_ = currentShutter * analogueGain;\n+\tLOG(IPU3Agc, Debug) << \"Actual total exposure \" << currentExposureNoDg_\n+\t\t\t\t<< \" Shutter speed \" << currentShutter\n+\t\t\t\t<< \" Gain \" << analogueGain\n+\t\t\t\t<< \" Needed ev gain \" << evGain;\n+\n+\tcurrentExposure_ = prevExposureValue * evGain;\n+\tDuration maxTotalExposure = kMaxShutterSpeed * kMaxGain;\n+\tcurrentExposure_ = std::min(currentExposure_, maxTotalExposure);\n+\tLOG(IPU3Agc, Debug) << \"Target total exposure \" << currentExposure_\n+\t\t\t\t<< \" maximum is \" << maxTotalExposure;\n+\n+\t/* \\todo: estimate if we need to desaturate */\n+\tfilterExposure();\n+\n+\tDuration exposureValue = filteredExposure_;\n+\tDuration shutterTime = kMinShutterSpeed;\n+\tdouble stepGain = kMinGain;\n+\n+\tif (shutterTime * stepGain < exposureValue) {\n+\t\tDuration maxShutterMinGain = kMaxShutterSpeed * stepGain;\n+\t\tif (maxShutterMinGain >= exposureValue) {\n+\t\t\tLOG(IPU3Agc, Debug) << \"Setting shutterTime to \" << shutterTime;\n+\t\t\tshutterTime = exposureValue / stepGain;\n+\t\t} else {\n+\t\t\tshutterTime = kMaxShutterSpeed;\n+\t\t}\n \n-\t\t\tDuration maxGainShutter = kMaxGain * shutterTime;\n-\t\t\tif (maxGainShutter >= exposureValue) {\n-\t\t\t\tstepGain = exposureValue / shutterTime;\n-\t\t\t\tLOG(IPU3Agc, Debug) << \"Setting analogue gain to \" << stepGain;\n-\t\t\t} else {\n-\t\t\t\tstepGain = kMaxGain;\n-\t\t\t}\n+\t\tDuration maxGainShutter = kMaxGain * shutterTime;\n+\t\tif (maxGainShutter >= exposureValue) {\n+\t\t\tstepGain = exposureValue / shutterTime;\n+\t\t\tLOG(IPU3Agc, Debug) << \"Setting analogue gain to \" << stepGain;\n+\t\t} else {\n+\t\t\tstepGain = kMaxGain;\n \t\t}\n+\t}\n \n-\t\tLOG(IPU3Agc, Debug) << \"Divided up shutter and gain are \"\n-\t\t\t\t<< shutterTime << \" and \"\n-\t\t\t\t<< stepGain;\n+\tLOG(IPU3Agc, Debug) << \"Divided up shutter and gain are \"\n+\t\t\t<< shutterTime << \" and \"\n+\t\t\t<< stepGain;\n \n-\t\texposure = shutterTime / lineDuration_;\n-\t\tanalogueGain = stepGain;\n+\texposure = shutterTime / lineDuration_;\n+\tanalogueGain = stepGain;\n+\n+\t/* Update the exposure value for the next process call */\n+\tprevExposureValue = shutterTime * analogueGain;\n \n-\t\t/* Update the exposure value for the next process call */\n-\t\tprevExposureValue = shutterTime * analogueGain;\n-\t}\n \tlastFrame_ = frameCount_;\n }\n \n", "prefixes": [ "libcamera-devel", "11/13" ] }