From patchwork Fri Jan 24 21:57:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 22643 Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id DFFDAC322E for ; Fri, 24 Jan 2025 21:58:41 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id B8F126856A; Fri, 24 Jan 2025 22:58:40 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="UlxL4y6j"; dkim-atps=neutral Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id F2B3F6855F for ; Fri, 24 Jan 2025 22:58:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737755916; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Zz46ARXrMy+iXL3UExR/gCA/Cf3Ddr7e7iZ8u3v4/b8=; b=UlxL4y6jj7DLKtQaAOcD0BVL0zs2Drad9hSVyRfWNo4t42gjYmBadFlJSYXIETuewkMm8L qX2OV5OCifU3YNC+gHllzSftNrX4SVm7g2QyGq35PPDKpS0KQPjvYeV/YO2GDaRMB8dzPi hU6B5Zjo2DM3hs8hapb+fuzPWN4s+7Q= Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-623-802ezCsIPfiJwlaHp-86zQ-1; Fri, 24 Jan 2025 16:58:34 -0500 X-MC-Unique: 802ezCsIPfiJwlaHp-86zQ-1 X-Mimecast-MFC-AGG-ID: 802ezCsIPfiJwlaHp-86zQ Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6AF78180034F for ; Fri, 24 Jan 2025 21:58:33 +0000 (UTC) Received: from mzamazal-thinkpadp1gen3.tpbc.com (unknown [10.39.192.49]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2EA681800344; Fri, 24 Jan 2025 21:58:31 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal Subject: [RFC PATCH v2 04/13] libcamera: simple: Add plain output configurations 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-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: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" When software ISP is active, only software ISP adjusted output configurations are considered. We want to support raw streams together with software ISP and for that purpose, we need to track also unmodified configurations. A flag is added to SimpleCameraData::Configuration indicating whether it's for software ISP. Configurations for unmodified output sizes and formats are added now whether software ISP is active or not. We later filter formats and output sizes for particular stream configuration according to the new configuration flag. This is just preparation and raw output is still not supported; for this reason, we just look whether software ISP is active; this will be changed in followup patches. Signed-off-by: Milan Zamazal --- src/libcamera/pipeline/simple/simple.cpp | 30 ++++++++++++++---------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 06df909b..71853bb2 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -273,6 +273,7 @@ public: Size captureSize; std::vector outputFormats; SizeRange outputSizes; + bool swisp; }; std::vector streams_; @@ -654,19 +655,24 @@ void SimpleCameraData::tryPipeline(unsigned int code, const Size &size) config.sensorSize = size; config.captureFormat = pixelFormat; config.captureSize = format.size; + config.swisp = false; if (converter_) { config.outputFormats = converter_->formats(pixelFormat); config.outputSizes = converter_->sizes(format.size); - } else if (swIsp_) { - config.outputFormats = swIsp_->formats(pixelFormat); - config.outputSizes = swIsp_->sizes(pixelFormat, format.size); - if (config.outputFormats.empty()) { - /* Do not use swIsp for unsupported pixelFormat's. */ - config.outputFormats = { pixelFormat }; - config.outputSizes = config.captureSize; - } } else { + if (swIsp_) { + Configuration swispConfig = config; + swispConfig.outputFormats = swIsp_->formats(pixelFormat); + swispConfig.outputSizes = swIsp_->sizes(pixelFormat, format.size); + if (swispConfig.outputFormats.empty()) { + /* Do not use swIsp for unsupported pixelFormat's. */ + swispConfig.outputFormats = { pixelFormat }; + swispConfig.outputSizes = swispConfig.captureSize; + } + swispConfig.swisp = true; + configs_.push_back(swispConfig); + } config.outputFormats = { pixelFormat }; config.outputSizes = config.captureSize; } @@ -1185,10 +1191,10 @@ SimplePipelineHandler::generateConfiguration(Camera *camera, Span> formats; - for (const SimpleCameraData::Configuration &cfg : data->configs_) { - for (PixelFormat format : cfg.outputFormats) - formats[format].push_back(cfg.outputSizes); - } + for (const SimpleCameraData::Configuration &cfg : data->configs_) + if (static_cast(data->swIsp_) == cfg.swisp) + for (PixelFormat format : cfg.outputFormats) + formats[format].push_back(cfg.outputSizes); /* Sort the sizes and merge any consecutive overlapping ranges. */ for (auto &[format, sizes] : formats) {