From patchwork Mon May 26 10:15:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Milan Zamazal X-Patchwork-Id: 23435 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 F2A2BC31E9 for ; Mon, 26 May 2025 10:16:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 876BF68DA9; Mon, 26 May 2025 12:16:04 +0200 (CEST) Authentication-Results: lancelot.ideasonboard.com; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.b="gR97VrqZ"; 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 101A668D96 for ; Mon, 26 May 2025 12:15:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1748254559; 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=Z5mEcTEmeRwXb+Wda/Q7oNRG48KniGLV0vHYEEI8zNc=; b=gR97VrqZOAN7RU27YAX/NtHDZAN3YE8eKfsK9vKSM4dW5zOMJJ1uWt8d4+57WsRIqEfg8e nSHjF1jbMwCqzv8yv1w+MJzlLrRUSR80pxjXBUlYYqXE0+9QHLa5lyvgwiy3gLeNS9tBxZ CmgK/GcUbNPzYawWNY9Q0eaX/vruTiE= Received: from mx-prod-mc-02.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-171-YYJc-lYDP-iPqfGJqnUF8w-1; Mon, 26 May 2025 06:15:55 -0400 X-MC-Unique: YYJc-lYDP-iPqfGJqnUF8w-1 X-Mimecast-MFC-AGG-ID: YYJc-lYDP-iPqfGJqnUF8w_1748254554 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-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A316C195608C; Mon, 26 May 2025 10:15:54 +0000 (UTC) Received: from mzamazal-thinkpadp1gen7.tpbc.com (unknown [10.45.226.78]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4F4F5180045B; Mon, 26 May 2025 10:15:51 +0000 (UTC) From: Milan Zamazal To: libcamera-devel@lists.libcamera.org Cc: Milan Zamazal , Laurent Pinchart , Kieran Bingham , =?utf-8?q?Barnab=C3=A1s_P=C5=91cze?= , Paul Elder Subject: [PATCH v6 04/12] libcamera: formats: Add a helper to check for a raw pixel info Date: Mon, 26 May 2025 12:15:24 +0200 Message-ID: <20250526101536.29222-5-mzamazal@redhat.com> In-Reply-To: <20250526101536.29222-1-mzamazal@redhat.com> References: <20250526101536.29222-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: FkNtU5w2afxAMdSfDIaNiVa8Iz3ApFQ1QDrx3Wy0kHU_1748254554 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" There is another common pattern checking for raw colour encoding, present in multiple places: pixelFormatInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW Let's extract it into a helper too. Signed-off-by: Milan Zamazal --- include/libcamera/internal/formats.h | 1 + src/libcamera/formats.cpp | 9 +++++++-- src/libcamera/pipeline/imx8-isi/imx8-isi.cpp | 7 +++---- src/libcamera/pipeline/ipu3/ipu3.cpp | 4 ++-- src/libcamera/pipeline/rkisp1/rkisp1.cpp | 4 ++-- src/libcamera/pipeline/rkisp1/rkisp1_path.cpp | 7 +++---- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/include/libcamera/internal/formats.h b/include/libcamera/internal/formats.h index bc4417d0..dd81a888 100644 --- a/include/libcamera/internal/formats.h +++ b/include/libcamera/internal/formats.h @@ -32,6 +32,7 @@ public: }; bool isValid() const { return format.isValid(); } + bool isRaw() const { return colourEncoding == ColourEncodingRAW; } static const PixelFormatInfo &info(const PixelFormat &format); static const PixelFormatInfo &info(const V4L2PixelFormat &format); diff --git a/src/libcamera/formats.cpp b/src/libcamera/formats.cpp index c6e0a262..02888acf 100644 --- a/src/libcamera/formats.cpp +++ b/src/libcamera/formats.cpp @@ -993,6 +993,12 @@ const std::map pixelFormatInfo{ * \return True if the pixel format info is valid, false otherwise */ +/** + * \fn bool PixelFormatInfo::isRaw() const + * \brief Check if the colour encoding is raw + * \return True if the colour encoding is raw, false otherwise + */ + /** * \brief Retrieve information about a pixel format * \param[in] format The pixel format @@ -1222,8 +1228,7 @@ unsigned int PixelFormatInfo::numPlanes() const */ bool isFormatRaw(const libcamera::PixelFormat &pixFmt) { - return libcamera::PixelFormatInfo::info(pixFmt).colourEncoding == - libcamera::PixelFormatInfo::ColourEncodingRAW; + return libcamera::PixelFormatInfo::info(pixFmt).isRaw(); } } /* namespace libcamera */ diff --git a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp index ad36ebea..5feaaa65 100644 --- a/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp +++ b/src/libcamera/pipeline/imx8-isi/imx8-isi.cpp @@ -452,9 +452,8 @@ ISICameraConfiguration::validateYuv(std::set &availableStreams, /* If the stream is RAW or not supported default it to YUYV. */ const PixelFormatInfo &cfgInfo = PixelFormatInfo::info(cfg.pixelFormat); - if (cfgInfo.colourEncoding == PixelFormatInfo::ColourEncodingRAW || - !formatsMap_.count(cfg.pixelFormat)) { + if (cfgInfo.isRaw() || !formatsMap_.count(cfg.pixelFormat)) { LOG(ISI, Debug) << "Stream " << i << " format: " << cfg.pixelFormat << " adjusted to YUYV"; @@ -523,7 +522,7 @@ CameraConfiguration::Status ISICameraConfiguration::validate() const PixelFormatInfo info = PixelFormatInfo::info(config_[0].pixelFormat); Status validationStatus; - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) + if (info.isRaw()) validationStatus = validateRaw(availableStreams, maxResolution); else validationStatus = validateYuv(availableStreams, maxResolution); @@ -651,7 +650,7 @@ StreamConfiguration PipelineHandlerISI::generateYUVConfiguration(Camera *camera, for (const auto &[pixFmt, pipeFmt] : ISICameraConfiguration::formatsMap_) { const PixelFormatInfo &info = PixelFormatInfo::info(pixFmt); - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) + if (info.isRaw()) continue; streamFormats[pixFmt] = { { kMinISISize, sensorSize } }; diff --git a/src/libcamera/pipeline/ipu3/ipu3.cpp b/src/libcamera/pipeline/ipu3/ipu3.cpp index e31e3879..6d10ed7f 100644 --- a/src/libcamera/pipeline/ipu3/ipu3.cpp +++ b/src/libcamera/pipeline/ipu3/ipu3.cpp @@ -218,7 +218,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate() for (const StreamConfiguration &cfg : config_) { const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat); - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) { + if (info.isRaw()) { rawCount++; rawSize = std::max(rawSize, cfg.size); } else { @@ -286,7 +286,7 @@ CameraConfiguration::Status IPU3CameraConfiguration::validate() LOG(IPU3, Debug) << "Validating stream: " << config_[i].toString(); - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) { + if (info.isRaw()) { /* Initialize the RAW stream with the CIO2 configuration. */ cfg->size = cio2Configuration_.size; cfg->pixelFormat = cio2Configuration_.pixelFormat; diff --git a/src/libcamera/pipeline/rkisp1/rkisp1.cpp b/src/libcamera/pipeline/rkisp1/rkisp1.cpp index 50c83fb7..4c6be9b7 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1.cpp @@ -651,7 +651,7 @@ CameraConfiguration::Status RkISP1CameraConfiguration::validate() for (const StreamConfiguration &cfg : config_) { const PixelFormatInfo &info = PixelFormatInfo::info(cfg.pixelFormat); - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) + if (info.isRaw()) rawFormat = cfg.pixelFormat; maxSize = std::max(maxSize, cfg.size); @@ -842,7 +842,7 @@ int PipelineHandlerRkISP1::configure(Camera *camera, CameraConfiguration *c) Rectangle outputCrop = inputCrop; const PixelFormat &streamFormat = config->at(0).pixelFormat; const PixelFormatInfo &info = PixelFormatInfo::info(streamFormat); - isRaw_ = info.colourEncoding == PixelFormatInfo::ColourEncodingRAW; + isRaw_ = info.isRaw(); useDewarper_ = dewarper_ && !isRaw_; /* YUYV8_2X8 is required on the ISP source path pad for YUV output. */ diff --git a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp index 64018dc5..3e437b0c 100644 --- a/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp +++ b/src/libcamera/pipeline/rkisp1/rkisp1_path.cpp @@ -188,7 +188,7 @@ RkISP1Path::generateConfiguration(const CameraSensor *sensor, const Size &size, const PixelFormatInfo &info = PixelFormatInfo::info(format); /* Populate stream formats for non-RAW configurations. */ - if (info.colourEncoding != PixelFormatInfo::ColourEncodingRAW) { + if (!info.isRaw()) { if (role == StreamRole::Raw) continue; @@ -279,7 +279,7 @@ RkISP1Path::validate(const CameraSensor *sensor, for (const auto &format : streamFormats_) { const PixelFormatInfo &info = PixelFormatInfo::info(format); - if (info.colourEncoding == PixelFormatInfo::ColourEncodingRAW) { + if (info.isRaw()) { /* Skip raw formats not supported by the sensor. */ uint32_t mbusCode = formatToMediaBus.at(format); if (std::find(mbusCodes.begin(), mbusCodes.end(), mbusCode) == @@ -310,8 +310,7 @@ RkISP1Path::validate(const CameraSensor *sensor, if (sensorConfig && !rawFormat.isValid()) return CameraConfiguration::Invalid; - bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).colourEncoding == - PixelFormatInfo::ColourEncodingRAW; + bool isRaw = PixelFormatInfo::info(cfg->pixelFormat).isRaw(); /* * If no raw format supported by the sensor has been found, use a