{"id":22643,"url":"https://patchwork.libcamera.org/api/1.1/patches/22643/?format=json","web_url":"https://patchwork.libcamera.org/patch/22643/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/1.1/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250124215806.158024-5-mzamazal@redhat.com>","date":"2025-01-24T21:57:55","name":"[RFC,v2,04/13] libcamera: simple: Add plain output configurations to software ISP","commit_ref":null,"pull_url":null,"state":"superseded","archived":false,"hash":"0ad343c143d3bf0b1b51263dd1eb22fa18900633","submitter":{"id":177,"url":"https://patchwork.libcamera.org/api/1.1/people/177/?format=json","name":"Milan Zamazal","email":"mzamazal@redhat.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/22643/mbox/","series":[{"id":4970,"url":"https://patchwork.libcamera.org/api/1.1/series/4970/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=4970","date":"2025-01-24T21:57:51","name":"Enable raw streams with software ISP","version":2,"mbox":"https://patchwork.libcamera.org/series/4970/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/22643/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/22643/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 DFFDAC322E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tFri, 24 Jan 2025 21:58:41 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id B8F126856A;\n\tFri, 24 Jan 2025 22:58:40 +0100 (CET)","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 F2B3F6855F\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jan 2025 22:58:36 +0100 (CET)","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-623-802ezCsIPfiJwlaHp-86zQ-1;\n\tFri, 24 Jan 2025 16:58:34 -0500","from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t(mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com\n\t[10.30.177.111])\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\n\tid 6AF78180034F for <libcamera-devel@lists.libcamera.org>;\n\tFri, 24 Jan 2025 21:58:33 +0000 (UTC)","from mzamazal-thinkpadp1gen3.tpbc.com (unknown [10.39.192.49])\n\tby mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix)\n\twith ESMTP id 2EA681800344; Fri, 24 Jan 2025 21:58:31 +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=\"UlxL4y6j\"; dkim-atps=neutral","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n\ts=mimecast20190719; t=1737755916;\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=Zz46ARXrMy+iXL3UExR/gCA/Cf3Ddr7e7iZ8u3v4/b8=;\n\tb=UlxL4y6jj7DLKtQaAOcD0BVL0zs2Drad9hSVyRfWNo4t42gjYmBadFlJSYXIETuewkMm8L\n\tqX2OV5OCifU3YNC+gHllzSftNrX4SVm7g2QyGq35PPDKpS0KQPjvYeV/YO2GDaRMB8dzPi\n\thU6B5Zjo2DM3hs8hapb+fuzPWN4s+7Q=","X-MC-Unique":"802ezCsIPfiJwlaHp-86zQ-1","X-Mimecast-MFC-AGG-ID":"802ezCsIPfiJwlaHp-86zQ","From":"Milan Zamazal <mzamazal@redhat.com>","To":"libcamera-devel@lists.libcamera.org","Cc":"Milan Zamazal <mzamazal@redhat.com>","Subject":"[RFC PATCH v2 04/13] libcamera: simple: Add plain output\n\tconfigurations to software ISP","Date":"Fri, 24 Jan 2025 22:57:55 +0100","Message-ID":"<20250124215806.158024-5-mzamazal@redhat.com>","In-Reply-To":"<20250124215806.158024-1-mzamazal@redhat.com>","References":"<20250124215806.158024-1-mzamazal@redhat.com>","MIME-Version":"1.0","X-Scanned-By":"MIMEDefang 3.4.1 on 10.30.177.111","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"56680BkD5zIunCMShLnJPBM0XciFdSoq91c9VOQHl78_1737755913","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":"When software ISP is active, only software ISP adjusted output\nconfigurations are considered.  We want to support raw streams together\nwith software ISP and for that purpose, we need to track also unmodified\nconfigurations.\n\nA flag is added to SimpleCameraData::Configuration indicating whether\nit's for software ISP.  Configurations for unmodified output sizes and\nformats are added now whether software ISP is active or not.  We later\nfilter formats and output sizes for particular stream configuration\naccording to the new configuration flag.  This is just preparation and\nraw output is still not supported; for this reason, we just look whether\nsoftware ISP is active; this will be changed in followup patches.\n\nSigned-off-by: Milan Zamazal <mzamazal@redhat.com>\n---\n src/libcamera/pipeline/simple/simple.cpp | 30 ++++++++++++++----------\n 1 file changed, 18 insertions(+), 12 deletions(-)","diff":"diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp\nindex 06df909b..71853bb2 100644\n--- a/src/libcamera/pipeline/simple/simple.cpp\n+++ b/src/libcamera/pipeline/simple/simple.cpp\n@@ -273,6 +273,7 @@ public:\n \t\tSize captureSize;\n \t\tstd::vector<PixelFormat> outputFormats;\n \t\tSizeRange outputSizes;\n+\t\tbool swisp;\n \t};\n \n \tstd::vector<Stream> streams_;\n@@ -654,19 +655,24 @@ void SimpleCameraData::tryPipeline(unsigned int code, const Size &size)\n \t\tconfig.sensorSize = size;\n \t\tconfig.captureFormat = pixelFormat;\n \t\tconfig.captureSize = format.size;\n+\t\tconfig.swisp = false;\n \n \t\tif (converter_) {\n \t\t\tconfig.outputFormats = converter_->formats(pixelFormat);\n \t\t\tconfig.outputSizes = converter_->sizes(format.size);\n-\t\t} else if (swIsp_) {\n-\t\t\tconfig.outputFormats = swIsp_->formats(pixelFormat);\n-\t\t\tconfig.outputSizes = swIsp_->sizes(pixelFormat, format.size);\n-\t\t\tif (config.outputFormats.empty()) {\n-\t\t\t\t/* Do not use swIsp for unsupported pixelFormat's. */\n-\t\t\t\tconfig.outputFormats = { pixelFormat };\n-\t\t\t\tconfig.outputSizes = config.captureSize;\n-\t\t\t}\n \t\t} else {\n+\t\t\tif (swIsp_) {\n+\t\t\t\tConfiguration swispConfig = config;\n+\t\t\t\tswispConfig.outputFormats = swIsp_->formats(pixelFormat);\n+\t\t\t\tswispConfig.outputSizes = swIsp_->sizes(pixelFormat, format.size);\n+\t\t\t\tif (swispConfig.outputFormats.empty()) {\n+\t\t\t\t\t/* Do not use swIsp for unsupported pixelFormat's. */\n+\t\t\t\t\tswispConfig.outputFormats = { pixelFormat };\n+\t\t\t\t\tswispConfig.outputSizes = swispConfig.captureSize;\n+\t\t\t\t}\n+\t\t\t\tswispConfig.swisp = true;\n+\t\t\t\tconfigs_.push_back(swispConfig);\n+\t\t\t}\n \t\t\tconfig.outputFormats = { pixelFormat };\n \t\t\tconfig.outputSizes = config.captureSize;\n \t\t}\n@@ -1185,10 +1191,10 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span<const StreamRo\n \t/* Create the formats map. */\n \tstd::map<PixelFormat, std::vector<SizeRange>> formats;\n \n-\tfor (const SimpleCameraData::Configuration &cfg : data->configs_) {\n-\t\tfor (PixelFormat format : cfg.outputFormats)\n-\t\t\tformats[format].push_back(cfg.outputSizes);\n-\t}\n+\tfor (const SimpleCameraData::Configuration &cfg : data->configs_)\n+\t\tif (static_cast<bool>(data->swIsp_) == cfg.swisp)\n+\t\t\tfor (PixelFormat format : cfg.outputFormats)\n+\t\t\t\tformats[format].push_back(cfg.outputSizes);\n \n \t/* Sort the sizes and merge any consecutive overlapping ranges. */\n \tfor (auto &[format, sizes] : formats) {\n","prefixes":["RFC","v2","04/13"]}