Show a patch.

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

{
    "id": 24441,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/24441/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/24441/",
    "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": "<20250923190657.21453-3-hansg@kernel.org>",
    "date": "2025-09-23T19:06:54",
    "name": "[2/5] ipa: software_isp: AGC: do not lower gain below default gain value",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "1f7d297c8664b7215ad3b1fbc2ebcc49932a7ccb",
    "submitter": {
        "id": 239,
        "url": "https://patchwork.libcamera.org/api/1.1/people/239/?format=api",
        "name": "Hans de Goede",
        "email": "hansg@kernel.org"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/24441/mbox/",
    "series": [
        {
            "id": 5455,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5455/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5455",
            "date": "2025-09-23T19:06:52",
            "name": "ipa: software_isp: AGC: Fox AGC oscillation bug",
            "version": 1,
            "mbox": "https://patchwork.libcamera.org/series/5455/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/24441/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/24441/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 D0EB3BDB1C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 23 Sep 2025 19:07:13 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 169836B615;\n\tTue, 23 Sep 2025 21:07:13 +0200 (CEST)",
            "from tor.source.kernel.org (tor.source.kernel.org\n\t[IPv6:2600:3c04:e001:324:0:1991:8:25])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 04BBE6B5A2\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Sep 2025 21:07:05 +0200 (CEST)",
            "from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby tor.source.kernel.org (Postfix) with ESMTP id A52A660278\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 23 Sep 2025 19:07:03 +0000 (UTC)",
            "by smtp.kernel.org (Postfix) with ESMTPSA id 74F5DC113D0;\n\tTue, 23 Sep 2025 19:07:02 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=kernel.org header.i=@kernel.org\n\theader.b=\"UIbfWgYc\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1758654423;\n\tbh=NVj0ZrZwq/FKJSkhzj18eapAWwCFZn/MHUunU/eV5rM=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=UIbfWgYcYMvKK5HTciFdj3iLm5SIRUUIn7/822babstDJrormcMMLArqJp16zLKa4\n\tY+dPaTVVoWFSfUSz8+dD4434ksWKxENmi7AjvAY4TkbyZwJhwwzlBsiHNF+WWRU+sM\n\tE5T4ANehCTtNkilhW2caeaBKnP3G5uzT24EaXRfZGfKRlLLLSFwZgCubgfx0F7RC0i\n\t0PIKcYi1/FBC5J3p/kzmEYB2XQBHDnVMkTtVGMweN0UzoLZdBbjhAlzK1nlXrX7LPQ\n\tcJYCFd5KAZvpxSGuAivnRGNOfgF4BQGy2EGaa3vTWIJZV5ymHXDUmKtQCM07zP1J6O\n\tI+VgWqyKNSiYg==",
        "From": "Hans de Goede <hansg@kernel.org>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Hans de Goede <hansg@kernel.org>",
        "Subject": "[PATCH 2/5] ipa: software_isp: AGC: do not lower gain below default\n\tgain value",
        "Date": "Tue, 23 Sep 2025 21:06:54 +0200",
        "Message-ID": "<20250923190657.21453-3-hansg@kernel.org>",
        "X-Mailer": "git-send-email 2.51.0",
        "In-Reply-To": "<20250923190657.21453-1-hansg@kernel.org>",
        "References": "<20250923190657.21453-1-hansg@kernel.org>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "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": "At the moment when the overall image brightness is considered too high\nthe AGC code will lower the gain all the way down to againMin before\nconsidering lowering the exposure.\n\nWhat should happen instead is lower the gain no lower then its default\nctrl value and after that lower the exposure instead of lowering\nthe gain.\n\nOtherwise there might be a heavily overexposed image (e.g. all white)\nwhich then is made less white by a very low gain which is no good.\n\nWhile at it also remove the weird limitation to only lower the gain\nwhen exposure is set to the maximum. As long as the gain is higher\nthen the default gain, the gain should be lowered first.\n\nSigned-off-by: Hans de Goede <hansg@kernel.org>\n---\n src/ipa/simple/algorithms/agc.cpp | 3 +--\n src/ipa/simple/ipa_context.h      | 2 +-\n src/ipa/simple/soft_simple.cpp    | 3 +++\n 3 files changed, 5 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/src/ipa/simple/algorithms/agc.cpp b/src/ipa/simple/algorithms/agc.cpp\nindex c46bb0ebe..94961f9fe 100644\n--- a/src/ipa/simple/algorithms/agc.cpp\n+++ b/src/ipa/simple/algorithms/agc.cpp\n@@ -71,8 +71,7 @@ void Agc::updateExposure(IPAContext &context, IPAFrameContext &frameContext, dou\n \t}\n \n \tif (exposureMSV > kExposureOptimal + kExposureSatisfactory) {\n-\t\tif (exposure == context.configuration.agc.exposureMax &&\n-\t\t    again > context.configuration.agc.againMin) {\n+\t\tif (again > context.configuration.agc.againDef) {\n \t\t\tnext = again * kExpNumeratorDown / kExpDenominator;\n \t\t\tif (again - next < context.configuration.agc.againMinStep)\n \t\t\t\tagain -= context.configuration.agc.againMinStep;\ndiff --git a/src/ipa/simple/ipa_context.h b/src/ipa/simple/ipa_context.h\nindex a471b80ae..ba525a881 100644\n--- a/src/ipa/simple/ipa_context.h\n+++ b/src/ipa/simple/ipa_context.h\n@@ -28,7 +28,7 @@ struct IPASessionConfiguration {\n \tfloat gamma;\n \tstruct {\n \t\tint32_t exposureMin, exposureMax;\n-\t\tdouble againMin, againMax, againMinStep;\n+\t\tdouble againMin, againMax, againDef, againMinStep;\n \t\tutils::Duration lineDuration;\n \t} agc;\n \tstruct {\ndiff --git a/src/ipa/simple/soft_simple.cpp b/src/ipa/simple/soft_simple.cpp\nindex e70439ee5..f0764ef46 100644\n--- a/src/ipa/simple/soft_simple.cpp\n+++ b/src/ipa/simple/soft_simple.cpp\n@@ -216,10 +216,12 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo)\n \n \tint32_t againMin = gainInfo.min().get<int32_t>();\n \tint32_t againMax = gainInfo.max().get<int32_t>();\n+\tint32_t againDef = gainInfo.def().get<int32_t>();\n \n \tif (camHelper_) {\n \t\tcontext_.configuration.agc.againMin = camHelper_->gain(againMin);\n \t\tcontext_.configuration.agc.againMax = camHelper_->gain(againMax);\n+\t\tcontext_.configuration.agc.againDef = camHelper_->gain(againDef);\n \t\tcontext_.configuration.agc.againMinStep =\n \t\t\t(context_.configuration.agc.againMax -\n \t\t\t context_.configuration.agc.againMin) /\n@@ -246,6 +248,7 @@ int IPASoftSimple::configure(const IPAConfigInfo &configInfo)\n \t\t * other) we limit the range of the gain values used.\n \t\t */\n \t\tcontext_.configuration.agc.againMax = againMax;\n+\t\tcontext_.configuration.agc.againDef = againDef;\n \t\tif (againMin) {\n \t\t\tcontext_.configuration.agc.againMin = againMin;\n \t\t} else {\n",
    "prefixes": [
        "2/5"
    ]
}