Show a cover letter.

GET /api/covers/24838/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 24838,
    "url": "https://patchwork.libcamera.org/api/covers/24838/?format=api",
    "web_url": "https://patchwork.libcamera.org/cover/24838/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/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": "<20251028-exposure-limits-v2-0-a8b5a318323e@ideasonboard.com>",
    "date": "2025-10-28T09:31:46",
    "name": "[v2,00/10] libipa: agc: Calculate exposure limits",
    "submitter": {
        "id": 143,
        "url": "https://patchwork.libcamera.org/api/people/143/?format=api",
        "name": "Jacopo Mondi",
        "email": "jacopo.mondi@ideasonboard.com"
    },
    "mbox": "https://patchwork.libcamera.org/cover/24838/mbox/",
    "series": [
        {
            "id": 5536,
            "url": "https://patchwork.libcamera.org/api/series/5536/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5536",
            "date": "2025-10-28T09:31:46",
            "name": "libipa: agc: Calculate exposure limits",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/5536/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/covers/24838/comments/",
    "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 A915DBE080\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 28 Oct 2025 09:32:10 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 25D4B607A6;\n\tTue, 28 Oct 2025 10:32:09 +0100 (CET)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 3A05F603ED\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 28 Oct 2025 10:32:07 +0100 (CET)",
            "from [192.168.0.172] (mob-5-90-58-13.net.vodafone.it [5.90.58.13])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 641BA176B; \n\tTue, 28 Oct 2025 10:30:18 +0100 (CET)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=ideasonboard.com header.i=@ideasonboard.com\n\theader.b=\"n617lxAu\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1761643818;\n\tbh=7/iRzEv8o9gerSSWX0rbFJdz+GJJ31XOnaTmVTToLNI=;\n\th=From:Subject:Date:To:Cc:From;\n\tb=n617lxAuI32YfXamrvOZZL5IPLvjvEvCIihucycZ+bQPE8/RTvbV8INdth8eedlim\n\tRWNgrvtJ18Y5I/x3mceJC02h3unLe75FP8OES04wHLwmJ7ux6omuZHbMViZFsSoA24\n\tXpUJZjxhkpL8XBMbtGEFrubixgyibengXOyV+dy0=",
        "From": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>",
        "Subject": "[PATCH v2 00/10] libipa: agc: Calculate exposure limits",
        "Date": "Tue, 28 Oct 2025 10:31:46 +0100",
        "Message-Id": "<20251028-exposure-limits-v2-0-a8b5a318323e@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "7bit",
        "X-B4-Tracking": "v=1; b=H4sIAIONAGkC/3WNQQ6CMBBFr0JmbQ1tKFRX3sOwqO0gkwglHWwwp\n\tHe3snf5XvLf34ExEjJcqx0iJmIKcwF1qsCNdn6iIF8YVK20rGUncFsCvyOKF020stCuMUqrAXV\n\tjoKyWiANtR/HeFx6J1xA/x0GSP/u/laSoRauMcd602MnLjTxaDvMj2OjPLkzQ55y/FTZiSLUAA\n\tAA=",
        "X-Change-ID": "20251017-exposure-limits-5c48252fe548",
        "To": "=?utf-8?q?Niklas_S=C3=B6derlund?= <niklas.soderlund@ragnatech.se>,\n\tRobert Mader <robert.mader@collabora.com>, \n\tlibcamera-devel@lists.libcamera.org",
        "Cc": "Jacopo Mondi <jacopo.mondi@ideasonboard.com>, \n\tKieran Bingham <kieran.bingham@ideasonboard.com>",
        "X-Mailer": "b4 0.14.2",
        "X-Developer-Signature": "v=1; a=openpgp-sha256; l=4197;\n\ti=jacopo.mondi@ideasonboard.com; h=from:subject:message-id;\n\tbh=7/iRzEv8o9gerSSWX0rbFJdz+GJJ31XOnaTmVTToLNI=;\n\tb=owEBbQKS/ZANAwAKAXI0Bo8WoVY8AcsmYgBpAI2Uq9RbceLkV+Be34JBU/y8eXWnofcasVysp\n\t7AqaCb7YeSJAjMEAAEKAB0WIQS1xD1IgJogio9YOMByNAaPFqFWPAUCaQCNlAAKCRByNAaPFqFW\n\tPFATD/9k1Iz9j0rnVTCP3GPhQeoU4X0T3WNzNWy+f089xAdQbk6E3TU3qr9Tg2CnALbA7wfCEFZ\n\tGcm6NkOA66oaXYhz8Zy36bLwS0cdBM2XL7CY4bvmWNSRYW5N2nT0bdP32SOTuy9bB82BCSqdl3j\n\trWtyGSoMcFY/3AUEBsfRLMdQ/Xn2yxbXX1mJGGKYzNGdlgVDEOHbrPDgwHAB9obOUqpU7q5tv9d\n\tvvguJNcpUue1pxOFWJf9/VvH6kETh+Mp4KBZYRKYR+bj83gZ6rpBeJtVC3VGX1rG8zFPbug1Mp6\n\tfbf0SPlqYJVLVgHjWgkV11N5ML9Cz2ptOFiZJQYbnkq2mCsDO8obcaxCuqcP+BJoDjNu3hphkvv\n\tXYkf5K2aPyr5umxjOr0GmdhcJgUjUsEhjRmVM9XhSPhAA3dL4qkdyp667xpR8b1eRBxbcUpIXKG\n\tPXACJmJfP0BYP6lL5ejA1pmQk00/JZdz028TXKp5qomwCV+zhZJKCiowjHN4j/8sEmo2a2DBFYs\n\tQuqzfw8dKe6C0kjj01CvBaVFwe7I2T8PCq0D+lBZA5KQ0tfho5Kziusl9hklIxOXK7M4pskuIj9\n\t8BzAq4NoLOwbyrJAJ8Tbbz+NPAlmXta+kptygHSmVN4mQfx9uLXlFD0k92tdFKiR0qjAbjV2xvU\n\tNeA5A1h+8TOQJcg==",
        "X-Developer-Key": "i=jacopo.mondi@ideasonboard.com; a=openpgp;\n\tfpr=72392EDC88144A65C701EA9BA5826A2587AD026B",
        "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": "By definition, the exposure time that can be programmed on a sensor is\nlimited by the frame duration and whenever the frame duration is\nupdated, the exposure time limits should be updated as well.\n\nThis is not the case for IPAs using the AgcMeanLuminance algorithm from\nlibipa, where the exposure limits are computed at configure() time and\nnever updated.\n\nThis has two implications:\n1) The AGC algorithms will always operate with an exposure time bound to\n   the frame duration programmed at startup time\n2) The Camera::controls() limits are not updated to reflect the new\n   constraints\n\nThis series addresses issue 1) by changing the AgcMeanLuminance class\nand the associated helpers to regulate the exposure time base on the\ncurrently programmed max frame duration using a sensor-specific margin\nthat is now reported by the CameraHelper class.\n\nAs the AgcMeanLuminance algorithm tries to push the exposure time up\nto the maximum allowed frame duration, initializing the algorithm\nwith the sensor's maximum capabilities results in a very low frame rate,\nunless the user specifies a FrameDurationLimits range in which the\nalgorithm should operate. To avoid slowing the frame rate down too much\ncompute a \"default\" frame rate at algorithm configuration time, were\nthe canonical 30, 15 and 10 FPS values are tested and selected in order\nof preference.\n\nThe last patch is not for inclusion as Mali support needs to be\nfinalized upstream first, but shows how is it possible to handle\nframe duration limits and exposure with the new model (and I needed that\npatch for testing on Mali anyway).\n\nTested with camshark on Mali-C55 and with a test scripts that sets a\nlonger frame duration (66 msecs) and by validating that the exposure\ntime is increased to match the new limits on RkISP1.\n\nRkISP1Agc agc.cpp:644 Divided up exposure time, analogue gain, quantization gain and digital gain are 33251.27us, 10.6667, 1.00018 and 6.49639\n61.545331 (47.58 fps) cam0-stream0 seq: 000050 bytesused: 2073600/1036800\nkISP1Agc agc.cpp:644 Divided up exposure time, analogue gain, quantization gain and digital gain are 66578.16us, 10.6667, 1.00018 and 3.24451\n61.566241 (47.82 fps) cam0-stream0 seq: 000051 bytesused: 2073600/1036800\n\nSigned-off-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>\n---\nChanges in v2:\n- Rework of v1 that moves the exposure limits computation to the\n  AgcMeanLuminance exposure helpers\n\n---\nJacopo Mondi (9):\n      ipa: camera_sensor_helper: Introduce exposureMargin()\n      ipa: ipu3: Move CameraHelper to context\n      ipa: libipa: agc: Make Agc::configure() set limits\n      ipa: libipa: agc: Configure with frame duration\n      ipa: libipa: agc: Initialize exposure with frame duration\n      ipa: libipa: agc: Set exposure limits with frame duration\n      ipa: libipa: agc: Initialize a sensible frame duration\n      ipa: libipa: agc: Calculate frame duration in helper\n      [DNI] ipa: mali: Handle FrameDurationLimits\n\nKieran Bingham (1):\n      ipa: mali-c55: Move CameraHelper to context\n\n src/ipa/ipu3/algorithms/agc.cpp         |  32 +++++++---\n src/ipa/ipu3/ipa_context.cpp            |   3 +\n src/ipa/ipu3/ipa_context.h              |   3 +\n src/ipa/ipu3/ipu3.cpp                   |  22 +++----\n src/ipa/libipa/agc_mean_luminance.cpp   |  73 ++++++++++++++++++---\n src/ipa/libipa/agc_mean_luminance.h     |  18 +++++-\n src/ipa/libipa/camera_sensor_helper.cpp |  72 +++++++++++++++++++++\n src/ipa/libipa/camera_sensor_helper.h   |   2 +\n src/ipa/libipa/exposure_mode_helper.cpp | 109 +++++++++++++++++++++++++++-----\n src/ipa/libipa/exposure_mode_helper.h   |  16 ++++-\n src/ipa/mali-c55/algorithms/agc.cpp     |  76 +++++++++++++++++++---\n src/ipa/mali-c55/ipa_context.cpp        |   6 ++\n src/ipa/mali-c55/ipa_context.h          |  12 ++++\n src/ipa/mali-c55/mali-c55.cpp           |  44 ++++++-------\n src/ipa/rkisp1/algorithms/agc.cpp       |  42 ++++++------\n 15 files changed, 430 insertions(+), 100 deletions(-)\n---\nbase-commit: 36f9cdcdb4a3c69e10b7da8a3de8354421cdcb56\nchange-id: 20251017-exposure-limits-5c48252fe548\n\nBest regards,"
}