From patchwork Tue Dec 9 18:09:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Isaac Scott X-Patchwork-Id: 25393 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 E447EC326B for ; Tue, 9 Dec 2025 18:10:12 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id DF1EF61435; Tue, 9 Dec 2025 19:10:11 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="JuhOnRNh"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 243C7606D5 for ; Tue, 9 Dec 2025 19:10:07 +0100 (CET) Received: from isaac-ThinkPad-T16-Gen-2.infra.iob (cpc90716-aztw32-2-0-cust408.18-1.cable.virginm.net [86.26.101.153]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6DB7163B; Tue, 9 Dec 2025 19:10:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1765303806; bh=SE28YWuqt35kw8fU9oenowgvuG20yoJVM4usMRiMnrI=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JuhOnRNhu1LwzgJB+vVCJDTcrD/h1RwN2/knk2vJRrlzIrHpoLxq4qydZ8Xxs+QUQ bn/gDKfm0gTytJblsxPS7S1xZOHmAwTIspH32Lhf4+q2w6c06T2lmyyDc3W84PDQuH aVcfl4BHoCzge2ii32p2rXSIPv7HJDQAzTk3V0oI= From: Isaac Scott To: libcamera-devel@lists.libcamera.org Cc: Isaac Scott Subject: [RFC PATCH 4/6] pipeline: rkisp1: Add YUV bypass formats to list of 'raw' formats Date: Tue, 9 Dec 2025 18:09:52 +0000 Message-ID: <20251209180954.332392-5-isaac.scott@ideasonboard.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251209180954.332392-1-isaac.scott@ideasonboard.com> References: <20251209180954.332392-1-isaac.scott@ideasonboard.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" When ISP bypass is enabled, we need to be able to match YUV formats as YUV and RAW bypass should be handled the same way by the pipeline handler. Add them. Signed-off-by: Isaac Scott --- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 31 ++++++++++++++++---- src/libcamera/sensor/camera_sensor_basic.cpp | 1 + 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index ad0f3af34..0c8c15ea5 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -520,7 +520,9 @@ void RkISP1CameraData::metadataReady(unsigned int frame, const ControlList &meta namespace { /* Keep in sync with the supported raw formats in rkisp1_path.cpp. */ -const std::map rawFormats = { +const std::map bypassFormats = { + { formats::UYVY, MEDIA_BUS_FMT_UYVY8_1X16 }, + { formats::YUYV, MEDIA_BUS_FMT_YUYV8_1X16 }, { formats::SBGGR8, MEDIA_BUS_FMT_SBGGR8_1X8 }, { formats::SGBRG8, MEDIA_BUS_FMT_SGBRG8_1X8 }, { formats::SGRBG8, MEDIA_BUS_FMT_SGRBG8_1X8 }, @@ -755,10 +757,27 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate() std::vector mbusCodes; - if (isRaw) { - mbusCodes = { rawFormats.at(config_[0].pixelFormat) }; + if (isRaw) + mbusCodes = { bypassFormats.at(config_[0].pixelFormat) }; + + /* Select the sensor format. */ + PixelFormat bypassFormat; + Size maxSize; + + for (const StreamConfiguration &cfg : config_) { + const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat); + if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW || + info.colourEncoding == PixelFormatInfo::ColourEncodingYUV) + bypassFormat = cfg.pixelFormat; + + maxSize = std::max(maxSize, cfg.size); + } + + if (bypassFormat.isValid()) { + LOG(RkISP1, Info) << "Using bypass format " << bypassFormat; + mbusCodes = { bypassFormats.at(bypassFormat) }; } else { - std::transform(rawFormats.begin(), rawFormats.end(), + std::transform(bypassFormats.begin(), bypassFormats.end(), std::back_inserter(mbusCodes), [](const auto &value) { return value.second; }); } @@ -919,8 +938,8 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) const PixelFormat &streamFormat = config->at(0).pixelFormat; const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat); - isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW; - data->usesDewarper_ = data->canUseDewarper_ && !isRaw_; + isIspBypassed_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW; + data->usesDewarper_ = data->canUseDewarper_ && !isIspBypassed_; Transform transform = config->combinedTransform(); bool transposeAfterIsp = false; diff --git a/src/libcamera/sensor/camera_sensor_basic.cpp b/src/libcamera/sensor/camera_sensor_basic.cpp index 57213a1ab..9531fc192 100644 --- a/src/libcamera/sensor/camera_sensor_basic.cpp +++ b/src/libcamera/sensor/camera_sensor_basic.cpp @@ -97,6 +97,7 @@ public: int setTestPatternMode(controls::draft::TestPatternModeEnum mode) override; const CameraSensorProperties::SensorDelays &sensorDelays() override; BayerFormat::Order bayerOrder(Transform t) const override; + Orientation mountingOrientation() const override { return mountingOrientation_; } protected: std::string logPrefix() const override;