From patchwork Thu Mar 4 15:31:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11498 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 63FBABD80C for ; Thu, 4 Mar 2021 15:31:27 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 01BEA68A98; Thu, 4 Mar 2021 16:31:27 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="M3uR0Vbw"; dkim-atps=neutral Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [IPv6:2a00:1450:4864:20::32c]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 4A6E4602ED for ; Thu, 4 Mar 2021 16:31:25 +0100 (CET) Received: by mail-wm1-x32c.google.com with SMTP id k66so10112810wmf.1 for ; Thu, 04 Mar 2021 07:31:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Cdk9CfEFsqBeO5H/wJtNdPeCQxTmsiOJvmejofZe9Jo=; b=M3uR0Vbww4/+/CS/eG5kqje2+IhsAmcHwKWDmNrsl9cSt0g9FiPRwhexPLfXQBeZuo gnF7iQPrrfKrTYx8hHa4A+COlNWgVkGW9lKEZyjPhFVYEiXUH20V2IxPK2nRTbJHhnVU y5kpSbM9QtSWoF2tT4dPUurC+zf9fjmSX5PpDxFQne3fY0vMF7PQBGxEMhPKyQWnByU5 ZMHgNw7+lKZLmhpCKv1nmiCR05iZIPz/YvBM4TJD31QYGsngRZgOFdzZBBdQhOBW7XJm iM3MVf4wFDgdmymbmug6h7Dza7sJp2YHAmyeUgzluZ4IzYH9pf/CQGLlC5bfHU52R3WD gk+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Cdk9CfEFsqBeO5H/wJtNdPeCQxTmsiOJvmejofZe9Jo=; b=Fi5LU/lKpbB/3Fp8PTMTi/Clg/K2GuSZOXhhM9BMdAg+cjWURUcQwbFow8G+L0wOEU UVKSnUdGz78gQ4FU8ww3hHK/RL1bqfv5al7OermRd+ses14MC81HXQa45p2gDUXI6ild hLrpbVtHkry+mhp+2bCZqNjC2QcIu2UGt63k28LL+GnCdrWRpGgEe9NBPNU2XBRAtiZx kTgUC4L+eurqMNs8qX727b9gV/LZZLuOgZDPz9Xvn8Fk8WjxXxW0R4HbGZvXUrujx6S0 tN8qwbxC/IQihyQLlg49x+UdMX9BmMx3WTwG2fgtrpVuY01otzI2quq1xQmGdv5R8Py3 m5WA== X-Gm-Message-State: AOAM532fNMWVHtJGppaXF+MCUSOK+ZJ5faWlQVGYtR3V9frf51Jf8UPv KGYfzlVCVc8hCATPECZVU+xcrkpvacdMYg== X-Google-Smtp-Source: ABdhPJz35it7fFxGdK/m0uAISnqGj7fDPFfkuFP3hEh9ZdJ1rLo9jSMRyxtuq+f4h0uUJ9Xanpbi6A== X-Received: by 2002:a05:600c:2204:: with SMTP id z4mr4662920wml.31.1614871884693; Thu, 04 Mar 2021 07:31:24 -0800 (PST) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id f7sm20306129wrm.36.2021.03.04.07.31.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Mar 2021 07:31:24 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Thu, 4 Mar 2021 15:31:19 +0000 Message-Id: <20210304153120.1904-2-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304153120.1904-1-david.plowman@raspberrypi.com> References: <20210304153120.1904-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 1/2] ipa: raspberrypi: Make CamHelpers return the frame delay for vblanking 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" For some sensors (e.g. imx477) we need to update the vblanking on the frame before the exposure. For this reason the GetDelays method must also return the number of frame delays for the vblanking control. Signed-off-by: David Plowman Reviewed-by: Laurent Pinchart --- src/ipa/raspberrypi/cam_helper.cpp | 4 +++- src/ipa/raspberrypi/cam_helper.hpp | 9 ++++++--- src/ipa/raspberrypi/cam_helper_imx477.cpp | 7 +++++-- src/ipa/raspberrypi/cam_helper_ov5647.cpp | 7 +++++-- src/ipa/raspberrypi/raspberrypi.cpp | 6 +++--- 5 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp index 2837fcce..0ae0baa0 100644 --- a/src/ipa/raspberrypi/cam_helper.cpp +++ b/src/ipa/raspberrypi/cam_helper.cpp @@ -95,7 +95,8 @@ void CamHelper::SetCameraMode(const CameraMode &mode) initialized_ = true; } -void CamHelper::GetDelays(int &exposure_delay, int &gain_delay) const +void CamHelper::GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const { /* * These values are correct for many sensors. Other sensors will @@ -103,6 +104,7 @@ void CamHelper::GetDelays(int &exposure_delay, int &gain_delay) const */ exposure_delay = 2; gain_delay = 1; + vblank_delay = 2; } bool CamHelper::SensorEmbeddedDataPresent() const diff --git a/src/ipa/raspberrypi/cam_helper.hpp b/src/ipa/raspberrypi/cam_helper.hpp index 14d70112..8c5659ed 100644 --- a/src/ipa/raspberrypi/cam_helper.hpp +++ b/src/ipa/raspberrypi/cam_helper.hpp @@ -28,8 +28,10 @@ namespace RPiController { // exposure time, and to convert between the sensor's gain codes and actual // gains. // -// A method to return the number of frames of delay between updating exposure -// and analogue gain and the changes taking effect. For many sensors these +// A method to return the number of frames of delay between updating exposure, +// analogue gain and vblanking, and for the changes to take effect. For many +// sensors these take the values 2, 1 and 2 respectively, but sensors that are +// different will need to over-ride the default method provided. // take the values 2 and 1 respectively, but sensors that are different will // need to over-ride the default method provided. // @@ -72,7 +74,8 @@ public: double maxFrameDuration) const; virtual uint32_t GainCode(double gain) const = 0; virtual double Gain(uint32_t gain_code) const = 0; - virtual void GetDelays(int &exposure_delay, int &gain_delay) const; + virtual void GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const; virtual bool SensorEmbeddedDataPresent() const; virtual unsigned int HideFramesStartup() const; virtual unsigned int HideFramesModeSwitch() const; diff --git a/src/ipa/raspberrypi/cam_helper_imx477.cpp b/src/ipa/raspberrypi/cam_helper_imx477.cpp index 419f8e77..73a5ca7d 100644 --- a/src/ipa/raspberrypi/cam_helper_imx477.cpp +++ b/src/ipa/raspberrypi/cam_helper_imx477.cpp @@ -37,7 +37,8 @@ public: CamHelperImx477(); uint32_t GainCode(double gain) const override; double Gain(uint32_t gain_code) const override; - void GetDelays(int &exposure_delay, int &gain_delay) const override; + void GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const override; bool SensorEmbeddedDataPresent() const override; private: @@ -63,10 +64,12 @@ double CamHelperImx477::Gain(uint32_t gain_code) const return 1024.0 / (1024 - gain_code); } -void CamHelperImx477::GetDelays(int &exposure_delay, int &gain_delay) const +void CamHelperImx477::GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const { exposure_delay = 2; gain_delay = 2; + vblank_delay = 3; } bool CamHelperImx477::SensorEmbeddedDataPresent() const diff --git a/src/ipa/raspberrypi/cam_helper_ov5647.cpp b/src/ipa/raspberrypi/cam_helper_ov5647.cpp index 75486e90..12be6bf9 100644 --- a/src/ipa/raspberrypi/cam_helper_ov5647.cpp +++ b/src/ipa/raspberrypi/cam_helper_ov5647.cpp @@ -17,7 +17,8 @@ public: CamHelperOv5647(); uint32_t GainCode(double gain) const override; double Gain(uint32_t gain_code) const override; - void GetDelays(int &exposure_delay, int &gain_delay) const override; + void GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const override; unsigned int HideFramesStartup() const override; unsigned int HideFramesModeSwitch() const override; unsigned int MistrustFramesStartup() const override; @@ -51,7 +52,8 @@ double CamHelperOv5647::Gain(uint32_t gain_code) const return static_cast(gain_code) / 16.0; } -void CamHelperOv5647::GetDelays(int &exposure_delay, int &gain_delay) const +void CamHelperOv5647::GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const { /* * We run this sensor in a mode where the gain delay is bumped up to @@ -59,6 +61,7 @@ void CamHelperOv5647::GetDelays(int &exposure_delay, int &gain_delay) const */ exposure_delay = 2; gain_delay = 2; + vblank_delay = 2; } unsigned int CamHelperOv5647::HideFramesStartup() const diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 6348d071..741bff4c 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -342,14 +342,14 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo, * Pass out the sensor config to the pipeline handler in order * to setup the staggered writer class. */ - int gainDelay, exposureDelay, sensorMetadata; - helper_->GetDelays(exposureDelay, gainDelay); + int gainDelay, exposureDelay, vblankDelay, sensorMetadata; + helper_->GetDelays(exposureDelay, gainDelay, vblankDelay); sensorMetadata = helper_->SensorEmbeddedDataPresent(); result->params |= ipa::RPi::ConfigSensorParams; result->sensorConfig.gainDelay = gainDelay; result->sensorConfig.exposureDelay = exposureDelay; - result->sensorConfig.vblank = exposureDelay; + result->sensorConfig.vblank = vblankDelay; result->sensorConfig.sensorMetadata = sensorMetadata; } From patchwork Thu Mar 4 15:31:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11499 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 3522FBD80C for ; Thu, 4 Mar 2021 15:31:28 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 54BA968AA5; Thu, 4 Mar 2021 16:31:27 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=raspberrypi.com header.i=@raspberrypi.com header.b="dXQfwoP7"; dkim-atps=neutral Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com [IPv6:2a00:1450:4864:20::433]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 44CC068A93 for ; Thu, 4 Mar 2021 16:31:26 +0100 (CET) Received: by mail-wr1-x433.google.com with SMTP id l12so28108083wry.2 for ; Thu, 04 Mar 2021 07:31:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=raspberrypi.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LTwnC0vyoy3l438IK046DHxRsyFGzWUUtArKSKS0FGo=; b=dXQfwoP7TUhCl2ifFHN8V6RPTGwXFBzfywLzMNXZeDnKxr/mDtOdmEBGr9cmlngLqi OYhnQjpYirunkRkr25Zj89y5Q59H8hR2XveEiWhipbjTp8f9s6ghlykDTaxANwMkjbCt vjOsw8HgjYaVNz9zzY3d4dbSy3NJ5Oi5rrAggQGhKrKQH7SNaOSg09BOpfX95sg8ZgbJ J5SrL6ltH1KjEqfJGRrEP9xlEmboAmmuaSK1QQuQrlMVckdr/sAFhKZAEBfywwD4t0pN r6klw55JxtYcrwGH3363zp/KiSgqnd3xydeOjtr41o2VfjAXA6vOIZxSiYakmoK958N5 xhvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LTwnC0vyoy3l438IK046DHxRsyFGzWUUtArKSKS0FGo=; b=mjZVoLRSBaxmvn52GuJ2bODOFc50zA4y9ZWTtxf0D/CwWhCMwim1ucdBNpSJF1aXOd 6u9z3oz0qF22hbsGoxgeiE43T5W8pIo3+uGrr8StbZiM0T6YwNKuNTYvTgvF2nbMAdSU FRGLe/WLoaxCKGSg4nQ/TWWKM22bcJoCIaT7hli1pEtQGsNljGUKHYW2VEsZuE6XYX7s 4efj67r5U0Q2dCniWijr5sj2eY+5rZjhf2dYp7Ia5nsCzeBMUSg91mywsQ70yvrn+O84 QLolyYLRGhHrRvtFEq1vyyCWhjLRonf3RDcnom6gdrp/0V7QhxbKQKAMbHura61wKD/S jjIw== X-Gm-Message-State: AOAM531qVBUQ8IMXDr7QH3D8SRjObvucTtFnlfsFiSmszMuYoWYgB7Yo DL89gSYj64NqYRuEYmpVMm8n8dfWheCmZw== X-Google-Smtp-Source: ABdhPJwcxFQfz2f3S9A/pjMceWVTOnxfHLHLL2c2I+jurO2kXs1IIAVlajPYG6UG3gFm6LE0CndwVQ== X-Received: by 2002:a5d:6205:: with SMTP id y5mr4620140wru.238.1614871885580; Thu, 04 Mar 2021 07:31:25 -0800 (PST) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id f7sm20306129wrm.36.2021.03.04.07.31.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Mar 2021 07:31:25 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Thu, 4 Mar 2021 15:31:20 +0000 Message-Id: <20210304153120.1904-3-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210304153120.1904-1-david.plowman@raspberrypi.com> References: <20210304153120.1904-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 2/2] ipa: raspberrypi: Add support for imx290/imx327 sensors 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" imx290 and imx327 share the same kernel driver (imx290.c) and are therefore both recognised here as "imx290". We add the necessary CamHelper for these sensors, as well as a camera tuning file. The tuning was done with an Innomaker STARVIS IMX327LQR module. These have no IR cut filter so there is no proper colour tuning. However, you should obtain reasonable results for most modules using this sensor. Specific tunings for further modules can always be added subsequently. To use this sensor on the Raspberry Pi platform, please add dtoverlay=imx290,clock-frequency=74250000 into your /boot/config.txt file. Signed-off-by: David Plowman Reviewed-by: Laurent Pinchart --- src/ipa/raspberrypi/cam_helper_imx290.cpp | 67 +++++++++ src/ipa/raspberrypi/data/imx290.json | 165 ++++++++++++++++++++++ src/ipa/raspberrypi/data/meson.build | 1 + src/ipa/raspberrypi/meson.build | 1 + 4 files changed, 234 insertions(+) create mode 100644 src/ipa/raspberrypi/cam_helper_imx290.cpp create mode 100644 src/ipa/raspberrypi/data/imx290.json diff --git a/src/ipa/raspberrypi/cam_helper_imx290.cpp b/src/ipa/raspberrypi/cam_helper_imx290.cpp new file mode 100644 index 00000000..6f412e40 --- /dev/null +++ b/src/ipa/raspberrypi/cam_helper_imx290.cpp @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +/* + * Copyright (C) 2021, Raspberry Pi (Trading) Limited + * + * cam_helper_imx290.cpp - camera helper for imx290 sensor + */ + +#include + +#include "cam_helper.hpp" + +using namespace RPiController; + +class CamHelperImx290 : public CamHelper +{ +public: + CamHelperImx290(); + uint32_t GainCode(double gain) const override; + double Gain(uint32_t gain_code) const override; + void GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const override; + unsigned int HideFramesModeSwitch() const override; + +private: + /* + * Smallest difference between the frame length and integration time, + * in units of lines. + */ + static constexpr int frameIntegrationDiff = 2; +}; + +CamHelperImx290::CamHelperImx290() + : CamHelper(nullptr, frameIntegrationDiff) +{ +} + +uint32_t CamHelperImx290::GainCode(double gain) const +{ + int code = 66.6667 * log10(gain); + return std::max(0, std::min(code, 0xf0)); +} + +double CamHelperImx290::Gain(uint32_t gain_code) const +{ + return pow(10, 0.015 * gain_code); +} + +void CamHelperImx290::GetDelays(int &exposure_delay, int &gain_delay, + int &vblank_delay) const +{ + exposure_delay = 2; + gain_delay = 2; + vblank_delay = 2; +} + +unsigned int CamHelperImx290::HideFramesModeSwitch() const +{ + /* After a mode switch, we seem to get 1 bad frame. */ + return 1; +} + +static CamHelper *Create() +{ + return new CamHelperImx290(); +} + +static RegisterCamHelper reg("imx290", &Create); diff --git a/src/ipa/raspberrypi/data/imx290.json b/src/ipa/raspberrypi/data/imx290.json new file mode 100644 index 00000000..6fb92cc4 --- /dev/null +++ b/src/ipa/raspberrypi/data/imx290.json @@ -0,0 +1,165 @@ +{ + "rpi.black_level": + { + "black_level": 3840 + }, + "rpi.dpc": + { + }, + "rpi.lux": + { + "reference_shutter_speed": 6813, + "reference_gain": 1.0, + "reference_aperture": 1.0, + "reference_lux": 890, + "reference_Y": 12900 + }, + "rpi.noise": + { + "reference_constant": 0, + "reference_slope": 2.67 + }, + "rpi.geq": + { + "offset": 187, + "slope": 0.00842 + }, + "rpi.sdn": + { + }, + "rpi.awb": + { + "bayes": 0 + }, + "rpi.agc": + { + "speed": 0.2, + "metering_modes": + { + "matrix": + { + "weights": + [ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 + ] + }, + "centre-weighted": + { + "weights": + [ + 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0 + ] + }, + "spot": + { + "weights": + [ + 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + ] + } + }, + "exposure_modes": + { + "normal": + { + "shutter": + [ + 10, 30000, 60000 + ], + "gain": + [ + 1.0, 2.0, 8.0 + ] + }, + "sport": + { + "shutter": + [ + 10, 5000, 10000, 20000, 120000 + ], + "gain": + [ + 1.0, 2.0, 4.0, 6.0, 6.0 + ] + } + }, + "constraint_modes": + { + "normal": + [ + ], + "highlight": + [ + { + "bound": "LOWER", "q_lo": 0.98, "q_hi": 1.0, "y_target": + [ + 0, 0.5, 1000, 0.5 + ] + }, + { + "bound": "UPPER", "q_lo": 0.98, "q_hi": 1.0, "y_target": + [ + 0, 0.8, 1000, 0.8 + ] + } + ] + }, + "y_target": + [ + 0, 0.16, 1000, 0.16, 10000, 0.16 + ] + }, + "rpi.alsc": + { + "omega": 1.3, + "n_iter": 100, + "luminance_strength": 0.7, + "luminance_lut": + [ + 2.844, 2.349, 2.018, 1.775, 1.599, 1.466, 1.371, 1.321, 1.306, 1.316, 1.357, 1.439, 1.552, 1.705, 1.915, 2.221, + 2.576, 2.151, 1.851, 1.639, 1.478, 1.358, 1.272, 1.231, 1.218, 1.226, 1.262, 1.335, 1.438, 1.571, 1.766, 2.067, + 2.381, 2.005, 1.739, 1.545, 1.389, 1.278, 1.204, 1.166, 1.153, 1.161, 1.194, 1.263, 1.356, 1.489, 1.671, 1.943, + 2.242, 1.899, 1.658, 1.481, 1.329, 1.225, 1.156, 1.113, 1.096, 1.107, 1.143, 1.201, 1.289, 1.423, 1.607, 1.861, + 2.152, 1.831, 1.602, 1.436, 1.291, 1.193, 1.121, 1.069, 1.047, 1.062, 1.107, 1.166, 1.249, 1.384, 1.562, 1.801, + 2.104, 1.795, 1.572, 1.407, 1.269, 1.174, 1.099, 1.041, 1.008, 1.029, 1.083, 1.146, 1.232, 1.364, 1.547, 1.766, + 2.104, 1.796, 1.572, 1.403, 1.264, 1.171, 1.097, 1.036, 1.001, 1.025, 1.077, 1.142, 1.231, 1.363, 1.549, 1.766, + 2.148, 1.827, 1.594, 1.413, 1.276, 1.184, 1.114, 1.062, 1.033, 1.049, 1.092, 1.153, 1.242, 1.383, 1.577, 1.795, + 2.211, 1.881, 1.636, 1.455, 1.309, 1.214, 1.149, 1.104, 1.081, 1.089, 1.125, 1.184, 1.273, 1.423, 1.622, 1.846, + 2.319, 1.958, 1.698, 1.516, 1.362, 1.262, 1.203, 1.156, 1.137, 1.142, 1.171, 1.229, 1.331, 1.484, 1.682, 1.933, + 2.459, 2.072, 1.789, 1.594, 1.441, 1.331, 1.261, 1.219, 1.199, 1.205, 1.232, 1.301, 1.414, 1.571, 1.773, 2.052, + 2.645, 2.206, 1.928, 1.728, 1.559, 1.451, 1.352, 1.301, 1.282, 1.289, 1.319, 1.395, 1.519, 1.685, 1.904, 2.227 + ], + "sigma": 0.005, + "sigma_Cb": 0.005 + }, + "rpi.contrast": + { + "ce_enable": 1, + "gamma_curve": + [ + 0, 0, 1024, 5040, 2048, 9338, 3072, 12356, 4096, 15312, 5120, 18051, 6144, 20790, 7168, 23193, + 8192, 25744, 9216, 27942, 10240, 30035, 11264, 32005, 12288, 33975, 13312, 35815, 14336, 37600, 15360, 39168, + 16384, 40642, 18432, 43379, 20480, 45749, 22528, 47753, 24576, 49621, 26624, 51253, 28672, 52698, 30720, 53796, + 32768, 54876, 36864, 57012, 40960, 58656, 45056, 59954, 49152, 61183, 53248, 62355, 57344, 63419, 61440, 64476, + 65535, 65535 + ] + }, + "rpi.sharpen": + { + }, + "rpi.ccm": + { + "ccms": + [ + { + "ct": 3900, "ccm": + [ + 1.54659, -0.17707, -0.36953, -0.51471, 1.72733, -0.21262, 0.06667, -0.92279, 1.85612 + ] + } + ] + }, + "rpi.focus": + { + } +} diff --git a/src/ipa/raspberrypi/data/meson.build b/src/ipa/raspberrypi/data/meson.build index 5236bf1e..509ad58b 100644 --- a/src/ipa/raspberrypi/data/meson.build +++ b/src/ipa/raspberrypi/data/meson.build @@ -3,6 +3,7 @@ conf_files = files([ 'imx219.json', 'imx477.json', + 'imx290.json', 'ov5647.json', 'uncalibrated.json', ]) diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build index 59e49686..7e88f8e0 100644 --- a/src/ipa/raspberrypi/meson.build +++ b/src/ipa/raspberrypi/meson.build @@ -21,6 +21,7 @@ rpi_ipa_sources = files([ 'cam_helper_ov5647.cpp', 'cam_helper_imx219.cpp', 'cam_helper_imx477.cpp', + 'cam_helper_imx290.cpp', 'controller/controller.cpp', 'controller/histogram.cpp', 'controller/algorithm.cpp',