Patch Detail
Show a patch.
GET /api/patches/24100/?format=api
{ "id": 24100, "url": "https://patchwork.libcamera.org/api/patches/24100/?format=api", "web_url": "https://patchwork.libcamera.org/patch/24100/", "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": "<20250813170240.50173-2-mzamazal@redhat.com>", "date": "2025-08-13T17:02:40", "name": "[v3,1/1] libcamera: software_isp: Reduce statistics image area", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d998e674168308d61a42d48069628bc5c7612bb6", "submitter": { "id": 177, "url": "https://patchwork.libcamera.org/api/people/177/?format=api", "name": "Milan Zamazal", "email": "mzamazal@redhat.com" }, "delegate": null, "mbox": "https://patchwork.libcamera.org/patch/24100/mbox/", "series": [ { "id": 5372, "url": "https://patchwork.libcamera.org/api/series/5372/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5372", "date": "2025-08-13T17:02:39", "name": "Reduce statistics image area for GPU", "version": 3, "mbox": "https://patchwork.libcamera.org/series/5372/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/24100/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/24100/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 6D021BDCC1\n\tfor <parsemail@patchwork.libcamera.org>;\n\tWed, 13 Aug 2025 17:02:59 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 36EAD69256;\n\tWed, 13 Aug 2025 19:02:59 +0200 (CEST)", "from us-smtp-delivery-124.mimecast.com\n\t(us-smtp-delivery-124.mimecast.com [170.10.133.124])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 7439D69251\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tWed, 13 Aug 2025 19:02:57 +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-672-T-hNYWsJNbm654nhYTFF6w-1;\n\tWed, 13 Aug 2025 13:02:52 -0400", "from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.93])\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 9043F18002A1; Wed, 13 Aug 2025 17:02:51 +0000 (UTC)", "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.224.13])\n\tby mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 20A471800447; Wed, 13 Aug 2025 17:02:48 +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=\"akRoBHP0\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1755104576;\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=mhL2cZ5v6HdlLAEXZ9lSFSNiEvtrbfHNaY/m0nIAuws=;\n\tb=akRoBHP0FgKtF5Qk4MCxgJp0vV0V/3KLf/UH5CzvMcEScNG4Qopj067Y1riHvBK9tOo/MN\n\tfqvJ0Xc/DWHS1RV04DzQ+07QrdImwFKlIr3gPLNxmlw3jYeeAHRP3sP/yAGrhZdw10qOoG\n\tJJp4D5F+aecQPICWAyQZlY3KsX28c+I=", "X-MC-Unique": "T-hNYWsJNbm654nhYTFF6w-1", "X-Mimecast-MFC-AGG-ID": "T-hNYWsJNbm654nhYTFF6w_1755104571", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>, Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?=\n\t<barnabas.pocze@ideasonboard.com>, Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>", "Subject": "[PATCH v3 1/1] libcamera: software_isp: Reduce statistics image area", "Date": "Wed, 13 Aug 2025 19:02:40 +0200", "Message-ID": "<20250813170240.50173-2-mzamazal@redhat.com>", "In-Reply-To": "<20250813170240.50173-1-mzamazal@redhat.com>", "References": "<20250813170240.50173-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.93", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "bFf24XmJsp1JiX-j982-mzb-AClYfg6mavxJhI2FiAM_1755104571", "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 statistics in software ISP is computed basically over the whole\nimage area, although only on part of the pixels. It is not necessary to\ncover the whole image area, it's sufficient to compute the statistics\nlet's say over the central area of 2/3 of the image width and height,\nwhich should be both sufficient and faster. The speedup is not that\nimportant with the CPU implementation but it may save CPU work\nmore noticeably with GPU debayering implementation.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/libcamera/software_isp/debayer_cpu.cpp | 9 +++++++--\n src/libcamera/software_isp/debayer_egl.cpp | 7 +++++--\n 2 files changed, 12 insertions(+), 4 deletions(-)", "diff": "diff --git a/src/libcamera/software_isp/debayer_cpu.cpp b/src/libcamera/software_isp/debayer_cpu.cpp\nindex e56492848..a7d6e4fd8 100644\n--- a/src/libcamera/software_isp/debayer_cpu.cpp\n+++ b/src/libcamera/software_isp/debayer_cpu.cpp\n@@ -526,8 +526,13 @@ 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-\tstats_->setWindow(Rectangle(window_.size()));\n+\t/*\n+\t * Don't pass x,y from window_ since process() already adjusts for it.\n+\t * But crop the window to 2/3 of its width and height for speedup.\n+\t * The speedup is more important with GPU than with CPU ISP; we want the\n+\t * same implementation on both.\n+\t */\n+\tstats_->setWindow((window_.size() * 2 / 3).centeredTo(window_.center()));\n \n \t/* pad with patternSize.Width on both left and right side */\n \tlineBufferPadding_ = inputConfig_.patternSize.width * inputConfig_.bpp / 8;\ndiff --git a/src/libcamera/software_isp/debayer_egl.cpp b/src/libcamera/software_isp/debayer_egl.cpp\nindex 9ec966608..057ad1c38 100644\n--- a/src/libcamera/software_isp/debayer_egl.cpp\n+++ b/src/libcamera/software_isp/debayer_egl.cpp\n@@ -393,8 +393,11 @@ int DebayerEGL::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-\tstats_->setWindow(Rectangle(window_.size()));\n+\t/*\n+\t * Don't pass x,y from window_ since process() already adjusts for it.\n+\t * But crop the window to 2/3 of its width and height for speedup.\n+\t */\n+\tstats_->setWindow((window_.size() * 2 / 3).centeredTo(window_.center()));\n \n \tLOG(Debayer, Debug) << \"Input width \" << inputCfg.size.width << \" height \" << inputCfg.size.height;\n \tLOG(Debayer, Debug) << \"Output width \" << outputCfg.size.width << \" height \" << outputCfg.size.height;\n", "prefixes": [ "v3", "1/1" ] }