From patchwork Sun Jan 31 18:17:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 11073 X-Patchwork-Delegate: laurent.pinchart@ideasonboard.com 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 B6017BD808 for ; Sun, 31 Jan 2021 18:17:50 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 80F42683D5; Sun, 31 Jan 2021 19:17:49 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="pUOHHs1u"; 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 D8384683D0 for ; Sun, 31 Jan 2021 19:17:46 +0100 (CET) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 6EFE48A0 for ; Sun, 31 Jan 2021 19:17:46 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1612117066; bh=B93rKEFIsKSv1e9z4QLZsekDGzSyG+XXysRBBjTmEq8=; h=From:To:Subject:Date:In-Reply-To:References:From; b=pUOHHs1uUGBXhbFe5BPsfp8Mo91PaLLc1AxaK2U/H3onlxx4T30YbHvY4pcDbz2M3 g3i9XgVHHlzO+Mu54Ben4H/LECkZe18dqXHgHCAMi7T+Urk1dSggCP0wVQPjyvcEjI pTR/RSEMGhL6o/ulZgN4xtY2ZGZqWgzFaMiiM7cs= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Sun, 31 Jan 2021 20:17:20 +0200 Message-Id: <20210131181722.5410-2-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20210131181722.5410-1-laurent.pinchart@ideasonboard.com> References: <20210131181722.5410-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/3] libcamera: camera_sensor: Store Bayer pattern in class member 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" The Bayer pattern is retrieved based on the media bus formats supported by the sensor, when registering camera sensor properties. To prepare for its usage elsewhere in the CameraSensor class, store it in a private member variable. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Paul Elder --- include/libcamera/internal/camera_sensor.h | 2 ++ src/libcamera/camera_sensor.cpp | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h index bf83d53134bf..a662807ab504 100644 --- a/include/libcamera/internal/camera_sensor.h +++ b/include/libcamera/internal/camera_sensor.h @@ -20,6 +20,7 @@ namespace libcamera { +class BayerFormat; class MediaEntity; struct CameraSensorInfo { @@ -89,6 +90,7 @@ private: Size pixelArraySize_; Rectangle activeArea_; + const BayerFormat *bayerFormat_; ControlList properties_; }; diff --git a/src/libcamera/camera_sensor.cpp b/src/libcamera/camera_sensor.cpp index 2d15043431aa..35312857ff90 100644 --- a/src/libcamera/camera_sensor.cpp +++ b/src/libcamera/camera_sensor.cpp @@ -133,7 +133,8 @@ LOG_DEFINE_CATEGORY(CameraSensor) * Once constructed the instance must be initialized with init(). */ CameraSensor::CameraSensor(const MediaEntity *entity) - : entity_(entity), pad_(UINT_MAX), properties_(properties::properties) + : entity_(entity), pad_(UINT_MAX), bayerFormat_(nullptr), + properties_(properties::properties) { } @@ -223,6 +224,15 @@ int CameraSensor::init() return initProperties(); } + /* Get the color filter array pattern (only for RAW sensors). */ + for (unsigned int mbusCode : mbusCodes_) { + const BayerFormat &bayerFormat = BayerFormat::fromMbusCode(mbusCode); + if (bayerFormat.isValid()) { + bayerFormat_ = &bayerFormat; + break; + } + } + ret = validateSensorDriver(); if (ret) return ret; @@ -405,14 +415,9 @@ int CameraSensor::initProperties() properties_.set(properties::PixelArrayActiveAreas, { activeArea_ }); /* Color filter array pattern, register only for RAW sensors. */ - for (const auto &format : formats_) { - unsigned int mbusCode = format.first; - BayerFormat bayerFormat = BayerFormat::fromMbusCode(mbusCode); - if (!bayerFormat.isValid()) - continue; - + if (bayerFormat_) { int32_t cfa; - switch (bayerFormat.order) { + switch (bayerFormat_->order) { case BayerFormat::BGGR: cfa = properties::draft::BGGR; break; @@ -428,7 +433,6 @@ int CameraSensor::initProperties() } properties_.set(properties::draft::ColorFilterArrangement, cfa); - break; } return 0;