Patch Detail
Show a patch.
GET /api/patches/25274/?format=api
{ "id": 25274, "url": "https://patchwork.libcamera.org/api/patches/25274/?format=api", "web_url": "https://patchwork.libcamera.org/patch/25274/", "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": "<20251127211932.122463-10-mzamazal@redhat.com>", "date": "2025-11-27T21:19:30", "name": "[v16,9/9] libcamera: simple: Compute separate max stream sizes", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "3da8f1063e7033a25bf9811aa9edca993545691e", "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/25274/mbox/", "series": [ { "id": 5619, "url": "https://patchwork.libcamera.org/api/series/5619/?format=api", "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=5619", "date": "2025-11-27T21:19:21", "name": "Enable raw streams with software ISP", "version": 16, "mbox": "https://patchwork.libcamera.org/series/5619/mbox/" } ], "comments": "https://patchwork.libcamera.org/api/patches/25274/comments/", "check": "pending", "checks": "https://patchwork.libcamera.org/api/patches/25274/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 8365AC32E0\n\tfor <parsemail@patchwork.libcamera.org>;\n\tThu, 27 Nov 2025 21:20:19 +0000 (UTC)", "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 2074860A9D;\n\tThu, 27 Nov 2025 22:20:19 +0100 (CET)", "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 71AF6609DE\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tThu, 27 Nov 2025 22:20:17 +0100 (CET)", "from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com\n\t(ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63])\n\tby relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n\tcipher=TLS_AES_256_GCM_SHA384) id us-mta-252-IUtRDHsAMOiou0Eus6Kz6g-1;\n\tThu, 27 Nov 2025 16:20:12 -0500", "from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.12])\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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTPS id 4303919560B0; Thu, 27 Nov 2025 21:20:11 +0000 (UTC)", "from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.224.67])\n\tby mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 9FC2C19560B0; Thu, 27 Nov 2025 21:20:08 +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=\"KhGqy1B/\"; dkim-atps=neutral", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1764278416;\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=azn2d01FldaHRnitYFUL5IBBXfP/igEXGo+xMnUcl8w=;\n\tb=KhGqy1B/1w7ZLukyJrx9h/FVY5acm8hlPDszKQnoNBVCqYh9HO/ST+x4+inuCBkk+MDnGp\n\tbSI2Nhwgez8S05iII1Suasc5vDpucrUme5spX1c3L17QdZuXMM8i1lSJtcZ8fRyXqscCHX\n\tfkktrQtLbh7KtjrTVV3hNhujXvC6CeU=", "X-MC-Unique": "IUtRDHsAMOiou0Eus6Kz6g-1", "X-Mimecast-MFC-AGG-ID": "IUtRDHsAMOiou0Eus6Kz6g_1764278411", "From": "Milan Zamazal <mzamazal@redhat.com>", "To": "libcamera-devel@lists.libcamera.org", "Cc": "Milan Zamazal <mzamazal@redhat.com>, Laurent Pinchart\n\t<laurent.pinchart@ideasonboard.com>, Kieran Bingham\n\t<kieran.bingham@ideasonboard.com>, =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?=\n\t<barnabas.pocze@ideasonboard.com>, Paul Elder\n\t<paul.elder@ideasonboard.com>, Umang Jain <uajain@igalia.com>", "Subject": "[PATCH v16 9/9] libcamera: simple: Compute separate max stream sizes", "Date": "Thu, 27 Nov 2025 22:19:30 +0100", "Message-ID": "<20251127211932.122463-10-mzamazal@redhat.com>", "In-Reply-To": "<20251127211932.122463-1-mzamazal@redhat.com>", "References": "<20251127211932.122463-1-mzamazal@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.12", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "8TqbDDVnHtUTxFOQiORIQ-8Bd4SvsRKRYUmyUCOpz5A_1764278411", "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": "Configuration validation computes the maximum size of all the requested\nstreams and compares it to the output sizes. When e.g. only a raw\nstream is requested then this may result in an invalid adjustment of its\nsize. This is because the output sizes are computed for processed\nstreams and may be smaller than capture sizes. If a raw stream with the\ncapture size is requested, it may then be wrongly adjusted to a larger\nsize because the output sizes, which are irrelevant for raw streams\nanyway, are smaller than the requested capture size.\n\nLet's fix the problem by tracking raw and processed streams maximum\nsizes separately and comparing raw stream sizes against capture rather\nthan output sizes.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/libcamera/pipeline/simple/simple.cpp | 23 ++++++++++++++++-------\n 1 file changed, 16 insertions(+), 7 deletions(-)", "diff": "diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 2820d1254..bb67000e2 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -1153,12 +1153,18 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n \t}\n \n \t/* Find the largest stream size. */\n-\tSize maxStreamSize;\n-\tfor (const StreamConfiguration &cfg : config_)\n-\t\tmaxStreamSize.expandTo(cfg.size);\n+\tSize maxProcessedStreamSize;\n+\tSize maxRawStreamSize;\n+\tfor (const StreamConfiguration &cfg : config_) {\n+\t\tif (isRaw(cfg))\n+\t\t\tmaxRawStreamSize.expandTo(cfg.size);\n+\t\telse\n+\t\t\tmaxProcessedStreamSize.expandTo(cfg.size);\n+\t}\n \n \tLOG(SimplePipeline, Debug)\n-\t\t<< \"Largest stream size is \" << maxStreamSize;\n+\t\t<< \"Largest stream size is \"\n+\t\t<< maxProcessedStreamSize << \"/\" << maxRawStreamSize;\n \n \t/* Cap the number of raw stream configurations */\n \tunsigned int rawCount = 0;\n@@ -1217,8 +1223,10 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n \t\tconst Size &captureSize = pipeConfig->captureSize;\n \t\tconst Size &maxOutputSize = pipeConfig->outputSizes.max;\n \n-\t\tif (maxOutputSize.width >= maxStreamSize.width &&\n-\t\t maxOutputSize.height >= maxStreamSize.height) {\n+\t\tif (maxOutputSize.width >= maxProcessedStreamSize.width &&\n+\t\t maxOutputSize.height >= maxProcessedStreamSize.height &&\n+\t\t captureSize.width >= maxRawStreamSize.width &&\n+\t\t captureSize.height >= maxRawStreamSize.height) {\n \t\t\tif (!pipeConfig_ || captureSize < pipeConfig_->captureSize)\n \t\t\t\tpipeConfig_ = pipeConfig;\n \t\t}\n@@ -1236,7 +1244,8 @@ CameraConfiguration::Status SimpleCameraConfiguration::validate()\n \t\t<< V4L2SubdeviceFormat{ pipeConfig_->code, pipeConfig_->sensorSize, {} }\n \t\t<< \" -> \" << pipeConfig_->captureSize\n \t\t<< \"-\" << pipeConfig_->captureFormat\n-\t\t<< \" for max stream size \" << maxStreamSize;\n+\t\t<< \" for max stream size \"\n+\t\t<< maxProcessedStreamSize << \"/\" << maxRawStreamSize;\n \n \t/*\n \t * Adjust the requested streams.\n", "prefixes": [ "v16", "9/9" ] }