From patchwork Fri Jan 24 21:57:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 22639 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 26B5ABD78E for ; Fri, 24 Jan 2025 21:58:31 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 265616855D; Fri, 24 Jan 2025 22:58:30 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="bUxWXCDy"; 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 699AB68556 for ; Fri, 24 Jan 2025 22:58:28 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1737755907; 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; bh=CZFk/zOy0vlnJt5fsSnlTimhoeGuzHc0LPAtzRXtToc=; b=bUxWXCDyTMIUb2G4B1MJgo0ezkhDnls32KtQoGo4WGmn16Qf31W4ISNbgOoCi8yC123swS d7drBgeZn710FHXAUBLhfjhEmMqtkEvpWa5U2x47d3LKXZJutxf6Yi88e5mAgmYEjVrgje LWUCE6czBxLnDtDLvAM4XZtqD+asFio= Received: from mx-prod-mc-08.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-663-n0xxgWZzMx-SMxf2hHWu3w-1; Fri, 24 Jan 2025 16:58:25 -0500 X-MC-Unique: n0xxgWZzMx-SMxf2hHWu3w-1 X-Mimecast-MFC-AGG-ID: n0xxgWZzMx-SMxf2hHWu3w 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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 125281801F14 for ; Fri, 24 Jan 2025 21:58:25 +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 AF1611800344; Fri, 24 Jan 2025 21:58:23 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal Subject: [RFC PATCH v2 00/13] Enable raw streams with software ISP Date: Fri, 24 Jan 2025 22:57:51 +0100 Message-ID: <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: eUcxYKZ5q-2sC9WkMsqlRkXsjZYgNK4AZeM7nXlr4JM_1737755905 X-Mimecast-Originator: redhat.com 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" This makes raw streams working again in ‘simple’ pipeline when software ISP is enabled for the given device. At most one raw stream and one processed stream (possibly both at once) are supported. An example ‘cam’ invocation requesting a raw stream rather than a debayered stream: cam -c1 -C8 -s role=raw,width=1920,height=1080 -Ffile#.raw Or for both raw and processed streams: cam -c1 -C8 -s role=raw,width=1920,height=1080,pixelformat=SRGGB8 -s role=viewfinder,width=1920,height=1080,pixelformat=RGB888 -Ffile# When only a raw stream is requested, there are no exposure/gain adjustments applied. This could be improved in future, once software ISP gets a mechanism to gather image statistics without processing and using them to make the adjustments, or once manual exposure controls are added to software ISP. In the meantime, exposure must be changed externally. A part of the patches is a small change to ‘cam’ PPM file handling, to be able to produce PPM files together with raw files when both processed and raw streams are requested. The patches are RFC because I’m not sure whether they are implemented properly. It’s also necessary to determine the right balance between the requested functionality (single raw + processed streams should be enough for current needs), cleanness of the implementation and the complexity of the patches. Changes in v2: - Completely reworked. - Extended to be able to produce a raw stream together with a processed stream. Milan Zamazal (13): libcamera: software_isp: Move a non-loop condition out of the loop libcamera: simple: Increase the default number of streams to 2 libcamera: simple: Don't use raw output formats with conversions libcamera: simple: Add plain output configurations to software ISP libcamera: simple: Identify requested stream roles libcamera: simple: Protect against null maxPipeConfig libcamera: simple: Consider raw output configurations libcamera: simple: Handle adjusted and raw configurations separately libcamera: simple: Don't use conversion with an added raw stream libcamera: simple: Make raw streams working apps: ppm_writer: Add a missing include apps: ppm_writer: Return EIO on I/O errors apps: cam: Write raw file if PPM cannot be written src/apps/cam/file_sink.cpp | 16 +- src/apps/common/ppm_writer.cpp | 7 +- src/libcamera/pipeline/simple/simple.cpp | 188 ++++++++++++++++---- src/libcamera/software_isp/software_isp.cpp | 7 +- 4 files changed, 168 insertions(+), 50 deletions(-)