Show a patch.

GET /api/1.1/patches/14217/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 14217,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/14217/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/14217/",
    "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": "<20211020154607.180161-11-jeanmichel.hautbois@ideasonboard.com>",
    "date": "2021-10-20T15:46:04",
    "name": "[libcamera-devel,v2,10/13] ipa: ipu3: agc: Introduce previous exposure value",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "05908eced120838bc6c0d04460c5a872816e0828",
    "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/14217/mbox/",
    "series": [
        {
            "id": 2645,
            "url": "https://patchwork.libcamera.org/api/1.1/series/2645/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=2645",
            "date": "2021-10-20T15:45:54",
            "name": "ipa: ipu3: Fix AGC bugs",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/2645/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/14217/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/14217/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 3D81DC324F\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 20 Oct 2021 15:46:25 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2B32368F72;\n\tWed, 20 Oct 2021 17:46:24 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3168068F63\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 20 Oct 2021 17:46:15 +0200 (CEST)",
            "from tatooine.ideasonboard.com (unknown\n\t[IPv6:2a01:e0a:169:7140:ce4b:1c5f:7302:b899])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id DA7982A5;\n\tWed, 20 Oct 2021 17:46:14 +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=\"mU6nvnPj\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1634744774;\n\tbh=WQdHNjuZ38BqrUJ1EzXIwk0iS6RCaASC1C/w4W+XxC0=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=mU6nvnPj205UVW6tKCrwKCoqPQc7B9/TysVIaFy972X1cqt3ELmNk+36D0FTWQZbT\n\t5k1W912ku8q5FGobn72mqC9HnTYkWqd4Z8VFyRyTjx1YNRnJhl1sV8/FJgoscznFoi\n\toeSRe7tIFNVWo0G1gLftC1a9E5lYsSYagumSF3nI=",
        "From": "Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Wed, 20 Oct 2021 17:46:04 +0200",
        "Message-Id": "<20211020154607.180161-11-jeanmichel.hautbois@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.32.0",
        "In-Reply-To": "<20211020154607.180161-1-jeanmichel.hautbois@ideasonboard.com>",
        "References": "<20211020154607.180161-1-jeanmichel.hautbois@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 10/13] 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>\n---\n src/ipa/ipu3/algorithms/agc.cpp | 13 +++++++++++--\n src/ipa/ipu3/algorithms/agc.h   |  1 +\n 2 files changed, 12 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/src/ipa/ipu3/algorithms/agc.cpp b/src/ipa/ipu3/algorithms/agc.cpp\nindex eec77378..19f3a420 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@@ -58,9 +59,14 @@ int Agc::configure(IPAContext &context, const IPAConfigInfo &configInfo)\n \t\tcontext.configuration.agc.minAnalogueGain;\n \tcontext.frameContext.agc.exposure = minExposureLines_;\n \n+\t/* \\todo replace the exposure in lines storage with time based ones */\n \tminExposureLines_ = context.configuration.agc.minShutterSpeed / lineDuration_;\n \tmaxExposureLines_ = context.configuration.agc.maxShutterSpeed / lineDuration_;\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@@ -146,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@@ -175,6 +181,9 @@ void Agc::lockExposureGain(uint32_t &exposure, double &analogueGain)\n \n \t\texposure = shutterTime / lineDuration_;\n \t\tanalogueGain = stepGain;\n+\n+\t\t/* Update the exposure value for the next process call */\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",
        "v2",
        "10/13"
    ]
}