From patchwork Fri Jul 18 09:40:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 23848 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 088E9C3237 for ; Fri, 18 Jul 2025 09:40:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 5FB1068F9E; Fri, 18 Jul 2025 11:40:46 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="LMLl5uov"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 42FCB6150A for ; Fri, 18 Jul 2025 11:40:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=XGHtG/nQ7DVVBxR7l8Xzy+qHS2F5tiwm1HHlkKBrbOc=; b=LMLl5uovHcSwexlMPgV5xsApev UmpDIJncTdCMK6b7BcfnWgapHZiEVtnbxb6EzrD4L4vE7i2x/UedLwEyTWqjmigN3UifsWSK1akqY hB8l+cRpIoWlIpQDObWxSJCjxfotgzgKCU9Hmh1RwnV6BsUsbDk/r8G2nHzcq9z3PoR5MLRROzBAB /T8Qkjsrj9Bi78bAblRuklQWxZROFVrAaaYbgsmwWEnqMarPkRnL/YhjTiE3YzF+vgzjueX89aij0 XP14SAlBqj3RpuqwVhgwyxCOzQgvPCscswpIYfftK7eLpYKZZr60/89h6VWGiq5q4R8UHlsr5TlIR VAYaMK9w==; Received: from [49.36.71.87] (helo=uajain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1ucha7-000VuI-BD; Fri, 18 Jul 2025 11:40:43 +0200 From: Umang Jain To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , Umang Jain Subject: [PATCH v2 1/2] libcamera: simple: Detect Bayer pattern change during configure() Date: Fri, 18 Jul 2025 15:10:47 +0530 Message-ID: <20250718094048.59162-2-uajain@igalia.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250718094048.59162-1-uajain@igalia.com> References: <20250718094048.59162-1-uajain@igalia.com> MIME-Version: 1.0 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" Bayer pattern on the sensor can change while configuring it with the intended capture format. This is due to the transform being applied on the sensor which supports [v/h]flips. During configure(), the simple pipeline handler does not detect any bayer pattern changes that can arise due to the transformations being applied via SimpleCameraData:setupFormats(). In such cases, the video node will be configured in-correctly, without realising the bayer pattern has changed on the sensor, for the given capture format. This patch detects the bayer pattern change after the sensor has been configured and retrieves the corresponding V4L2 pixel format to correctly configure the video node and the input to converter or Soft-ISP. Signed-off-by: Umang Jain --- src/libcamera/pipeline/simple/simple.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index efb07051..11d56873 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -1353,8 +1353,20 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) if (ret < 0) return ret; - /* Configure the video node. */ - V4L2PixelFormat videoFormat = video->toV4L2PixelFormat(pipeConfig->captureFormat); + /* Configure the video node, taking into account any Bayer pattern change. */ + V4L2PixelFormat videoFormat; + if (format.code == pipeConfig->code) { + videoFormat = video->toV4L2PixelFormat(pipeConfig->captureFormat); + } else { + /* + * Bayer pattern has changed because of the transform that was applied on + * the sensor. Get the V4L2PixelFormat corresponding to the configured Bayer + * pattern. + */ + BayerFormat cfgBayer = BayerFormat::fromPixelFormat(pipeConfig->captureFormat); + cfgBayer.order = data->sensor_->bayerOrder(config->combinedTransform()); + videoFormat = cfgBayer.toV4L2PixelFormat(); + } V4L2DeviceFormat captureFormat; captureFormat.fourcc = videoFormat; @@ -1396,7 +1408,7 @@ int SimplePipelineHandler::configure(Camera *camera, CameraConfiguration *c) return 0; StreamConfiguration inputCfg; - inputCfg.pixelFormat = pipeConfig->captureFormat; + inputCfg.pixelFormat = videoFormat.toPixelFormat(); inputCfg.size = pipeConfig->captureSize; inputCfg.stride = captureFormat.planes[0].bpl; inputCfg.bufferCount = kNumInternalBuffers; From patchwork Fri Jul 18 09:40:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Umang Jain X-Patchwork-Id: 23849 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 5F6A4C3237 for ; Fri, 18 Jul 2025 09:40:51 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id A738C68FA1; Fri, 18 Jul 2025 11:40:48 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=igalia.com header.i=@igalia.com header.b="qfAx08NO"; dkim-atps=neutral Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7964468F95 for ; Fri, 18 Jul 2025 11:40:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=aPd1l8Bj7VzKWwcTR2LorWgRAsoR8Dc3ci4JE5P11fw=; b=qfAx08NOJ1/q0VC9xSmo34aLN2 Z7SXig7VhqWkc3KD9CFnCqks+xrr/rQj7w9tZnU+fUFoouBAIY6ghK/GuQb8LJfBl+fnDx6Yqcjg9 5ShvRGcYRRR5RvUa5HIOL62LT/VIaBn5dl2WaMk0Qt2gYamEViE0DV8xLSVjfifWapMJGyKldLA11 /Xkhut7sKD/z6ZunGaoM14Vnf3PY8QJ7qktHWvcpJmQ7DO+rezCTxeeWBIj7cF04+hw2Kq5gezwEo vtiOR0pEugm6oHn16lyL29rJDShH0KQuncpEsX61Dp+kdP+//ocKHOtUPxDwdLoLhInKzIK6atdWM Kjg8ARrQ==; Received: from [49.36.71.87] (helo=uajain) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1ucha8-000VuI-GJ; Fri, 18 Jul 2025 11:40:44 +0200 From: Umang Jain To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , Umang Jain Subject: [PATCH v2 2/2] libcamera: simple: Support RPi's unicam CSI-2 receiver Date: Fri, 18 Jul 2025 15:10:48 +0530 Message-ID: <20250718094048.59162-3-uajain@igalia.com> X-Mailer: git-send-email 2.50.0 In-Reply-To: <20250718094048.59162-1-uajain@igalia.com> References: <20250718094048.59162-1-uajain@igalia.com> MIME-Version: 1.0 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 patch enables RaspberryPi's unicam CSI-2 receiver to be able to function and capture images via the simple pipeline handler along with SoftISP. Unicam CSI-2 supports capture in both packed and unpacked pixel formats. Currently, the unicam video node is configured to use the unpacked formats for streaming with simple pipeline handler. Signed-off-by: Umang Jain Tested-by: Umang Jain # RPi-3B + IMX219 --- src/libcamera/pipeline/simple/simple.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp index 11d56873..c258e98c 100644 --- a/src/libcamera/pipeline/simple/simple.cpp +++ b/src/libcamera/pipeline/simple/simple.cpp @@ -257,6 +257,7 @@ static const SimplePipelineInfo supportedDevices[] = { { "mxc-isi", {}, false }, { "qcom-camss", {}, true }, { "sun6i-csi", {}, false }, + { "unicam", {}, true }, }; } /* namespace */