Show a patch.

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

{
    "id": 24456,
    "url": "https://patchwork.libcamera.org/api/1.1/patches/24456/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/24456/",
    "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": "<20250925192856.77881-3-mzamazal@redhat.com>",
    "date": "2025-09-25T19:28:51",
    "name": "[v4,2/7] libcamera: software_isp: Clarify SwStatsCpu::setWindow use",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "a83f7c03644683d041ad92ae07ce6b571c978f8c",
    "submitter": {
        "id": 177,
        "url": "https://patchwork.libcamera.org/api/1.1/people/177/?format=api",
        "name": "Milan Zamazal",
        "email": "mzamazal@redhat.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/24456/mbox/",
    "series": [
        {
            "id": 5458,
            "url": "https://patchwork.libcamera.org/api/1.1/series/5458/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5458",
            "date": "2025-09-25T19:28:49",
            "name": "Fix stats related problems in software ISP",
            "version": 4,
            "mbox": "https://patchwork.libcamera.org/series/5458/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/24456/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/24456/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 3CF3EC328C\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 25 Sep 2025 19:29:20 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id D9A4A6B606;\n\tThu, 25 Sep 2025 21:29:19 +0200 (CEST)",
            "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.129.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 1A5116B5FF\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 25 Sep 2025 21:29:14 +0200 (CEST)",
            "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-357-J4mEya7IN7yzGa94OZWzrA-1;\n\tThu, 25 Sep 2025 15:29:08 -0400",
            "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.17])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\tkey-exchange X25519 server-signature RSA-PSS (2048 bits)\n\tserver-digest SHA256) (No client certificate requested)\n\tby mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id A74C7180028E; Thu, 25 Sep 2025 19:29:07 +0000 (UTC)",
            "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.44.32.62])\n\tby mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id C41DE1956095; Thu, 25 Sep 2025 19:29:05 +0000 (UTC)"
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key;\n\tunprotected) header.d=redhat.com header.i=@redhat.com\n\theader.b=\"AOQmzjCw\"; dkim-atps=neutral",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1758828553;\n\th=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n\tto:to:cc:cc:mime-version:mime-version:content-type:content-type:\n\tcontent-transfer-encoding:content-transfer-encoding:\n\tin-reply-to:in-reply-to:references:references;\n\tbh=JA1CQ4xqsSqvxKDRsYazb2IohN7xUAnAqdTkJPMvb7s=;\n\tb=AOQmzjCw/vqK0BvawXJX+83tG44pcdNoI5xNf6irKpLdIbHfiyBjs9e4RG/RLWZwQYH9KK\n\tqAa9b8X7yu4Gc83Y2eI9HMBpvtELKp4ZBxMBSD9UzZXkOMwMd8iYhO/r4S/OOwf6/tRRuY\n\t8AYcSb5+YtxCjUohMOgOYRqQy59hJHY=",
        "X-MC-Unique": "J4mEya7IN7yzGa94OZWzrA-1",
        "X-Mimecast-MFC-AGG-ID": "J4mEya7IN7yzGa94OZWzrA_1758828547",
        "From": "Milan Zamazal <mzamazal@redhat.com>",
        "To": "libcamera-devel@lists.libcamera.org",
        "Cc": "Milan Zamazal <mzamazal@redhat.com>, pobrn@protonmail.com,\n\tmail@maciej.szmigiero.name",
        "Subject": "[PATCH v4 2/7] libcamera: software_isp: Clarify\n\tSwStatsCpu::setWindow use",
        "Date": "Thu, 25 Sep 2025 21:28:51 +0200",
        "Message-ID": "<20250925192856.77881-3-mzamazal@redhat.com>",
        "In-Reply-To": "<20250925192856.77881-1-mzamazal@redhat.com>",
        "References": "<20250925192856.77881-1-mzamazal@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "71lGiaOptKsqsQPqQZh0KbYgKgyWXqzn90EuyBOuPGM_1758828547",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Transfer-Encoding": "8bit",
        "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true",
        "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": "The window coordinates passed to SwStatsCpu::setWindow are confusing.\nLet's clarify what the coordinates should be.\n\nA source of confusion is that the specified window is relative to the\nprocessed area.  Debayering adjusts line pointers for its processed area\nand this is what's also passed to stats processing.  The window passed\nto SwStatsCpu::setWindow should either specify the size of the whole\nprocessed (not image) area, or its cropping in case the stats shouldn't\nbe gathered over the whole processed area.  This patch should clarify\nthis in the code.\n\nReviewed-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/libcamera/software_isp/debayer_cpu.cpp |  6 +++++-\n src/libcamera/software_isp/swstats_cpu.cpp | 19 +++++++++++++++++++\n 2 files changed, 24 insertions(+), 1 deletion(-)",
    "diff": "diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\nindex 2dc85e5e0..bcaaa5dee 100644\n--- a/src/libcamera/software_isp/debayer_cpu.cpp\n+++ b/src/libcamera/software_isp/debayer_cpu.cpp\n@@ -554,7 +554,11 @@ int DebayerCpu::configure(const StreamConfiguration &inputCfg,\n \twindow_.width = outputCfg.size.width;\n \twindow_.height = outputCfg.size.height;\n \n-\t/* Don't pass x,y since process() already adjusts src before passing it */\n+\t/*\n+\t * Set the stats window to the whole processed window. Its coordinates are\n+\t * relative to the debayered area since debayering passes only the part of\n+\t * data to be processed to the stats; see SwStatsCpu::setWindow.\n+\t */\n \tstats_->setWindow(Rectangle(window_.size()));\n \n \t/* pad with patternSize.Width on both left and right side */\ndiff --git a/src/libcamera/software_isp/swstats_cpu.cpp b/src/libcamera/software_isp/swstats_cpu.cpp\nindex e8a1d52f2..c936ef1dc 100644\n--- a/src/libcamera/software_isp/swstats_cpu.cpp\n+++ b/src/libcamera/software_isp/swstats_cpu.cpp\n@@ -416,6 +416,25 @@ int SwStatsCpu::configure(const StreamConfiguration &inputCfg)\n /**\n  * \\brief Specify window coordinates over which to gather statistics\n  * \\param[in] window The window object.\n+ *\n+ * This method specifies the image area over which to gather the statistics.\n+ * It must be called to set the area, otherwise the default zero-sized\n+ * \\a Rectangle is used and no statistics is gathered.\n+ *\n+ * The specified \\a window is relative to what is passed to processLine*\n+ * methods. Typically, this means processLine* methods get only data from the\n+ * processed area and \\a window is \\a Rectangle with (0, 0) top-left point and\n+ * of the same size as the processed area. But if statistics is gathered only\n+ * from some part of the image, e.g. its centre, \\a window should specify such a\n+ * restriction accordingly.\n+ *\n+ * It is the responsibility of the callers to provide sensible \\a window values,\n+ * most notably not exceeding the original image boundaries.\n+ *\n+ * The method may adjust the window slightly if it is not aligned according to\n+ * the bayer pattern determined in \\a SwStatsCpu::configure(). If that happens,\n+ * it is guaranteed that non-negative top-left point coordinates remain\n+ * non-negative and that the window width and height don't get enlarged.\n  */\n void SwStatsCpu::setWindow(const Rectangle &window)\n {\n",
    "prefixes": [
        "v4",
        "2/7"
    ]
}