From patchwork Mon Mar 8 22:39:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11522 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 65F15BD1F1 for ; Mon, 8 Mar 2021 22:39:48 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 21E2768A92; Mon, 8 Mar 2021 23:39:48 +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="X6/6KZFl"; dkim-atps=neutral Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 329B168A92 for ; Mon, 8 Mar 2021 23:39:46 +0100 (CET) Received: by mail-wr1-x42a.google.com with SMTP id j2so13132801wrx.9 for ; Mon, 08 Mar 2021 14:39:46 -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=6cpGSK6jVuNXhIB+3pAc3OxbV7hDqDDnMJI2a0EMvhA=; b=X6/6KZFlLZojPbFlT+nkiMttNwc0Oq3GiLzAc6FUZH7nPUIAWIspO0eujzlRlviEV4 QWJBXkAvn8ENdZW7bBDv47ByFpSJ22kUFlctpTBF+9UBH4gt21X+ya7n4md3BCn2+JsI 7zcxm+xgi75sBSQA35rgTNpizVHUYDCGNPnHwJ/hDDj6Cw6lYqSBV00xNJ/Ym0LrC6Qe UwnrejU1poATNh3P450qTjXkwRVSO6h9EKDXEHVwKuIqrLfAvNeQSez4MWidUGWGtTiv pydhF9Na/eNiRiYyy6DHhiZw1FkBEkviGCB8Xr1RBIuBttoo8o2C2WW9ux0c4qs4h+4f x2DA== 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=6cpGSK6jVuNXhIB+3pAc3OxbV7hDqDDnMJI2a0EMvhA=; b=LttiFN9tuAXoX195xmkp4owCRwDABqYpp4IgumcFoGmu74UFNcr5T/hTWhrTEuhkeL Zs/arWnY+C+pdAQtSrlhIHQqrSEBbcyBbtgeFtz6Gtv4gqqLKaKpncpNPIY4LKXnVqeB hfpvvoW8fq+GwiwKtTDwDBSk4rnq21Jl2mpdZNgcFUUvT5u8O2kdN/1DJFPMdvtC6Q7K 8GMOj7iGuZusuW6kTtalffTIZoFfPwrNe9aObvNtmugj/lNBghbxtZe0dDzodZjrAxkS ScEWRvaPwJKUAXv8M8GqjyByBMUBMTknDnYhSsaHGN0FeL6H/Bee96NNbjVtSO8yFXPg Yr+Q== X-Gm-Message-State: AOAM531oQLd2mPTdTp7goyTY2elIkyHN/upDE1G2YDNcn8w5FHbR6q83 9kAnZohjcbwYg3086n0CBQjFHvzsntVtBg== X-Google-Smtp-Source: ABdhPJzQvn1Mla0NAasRRN1r3IbKR3QnLeUjQj4w3MS8FoYievxT3hPM6tkEMquRTuztwIByfOQk9A== X-Received: by 2002:adf:c186:: with SMTP id x6mr25583284wre.253.1615243185665; Mon, 08 Mar 2021 14:39:45 -0800 (PST) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id f17sm19811322wru.31.2021.03.08.14.39.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Mar 2021 14:39:45 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Mon, 8 Mar 2021 22:39:37 +0000 Message-Id: <20210308223939.2088-2-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210308223939.2088-1-david.plowman@raspberrypi.com> References: <20210308223939.2088-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 1/3] 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 --- src/ipa/raspberrypi/cam_helper.cpp | 4 +++- src/ipa/raspberrypi/cam_helper.hpp | 11 ++++++----- 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(+), 13 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..1b2d6eec 100644 --- a/src/ipa/raspberrypi/cam_helper.hpp +++ b/src/ipa/raspberrypi/cam_helper.hpp @@ -28,10 +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 -// take the values 2 and 1 respectively, but sensors that are different will -// need to over-ride the default method provided. +// 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. // // A method to query if the sensor outputs embedded data that can be parsed. // @@ -72,7 +72,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 Mon Mar 8 22:39:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11523 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 19C21BD1F1 for ; Mon, 8 Mar 2021 22:39:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 8660868A9C; Mon, 8 Mar 2021 23:39:48 +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="sQ7jXWtg"; dkim-atps=neutral Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [IPv6:2a00:1450:4864:20::42a]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 0CCEC68A9C for ; Mon, 8 Mar 2021 23:39:46 +0100 (CET) Received: by mail-wr1-x42a.google.com with SMTP id a18so13100999wrc.13 for ; Mon, 08 Mar 2021 14:39:46 -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=TD6wA7NgMCO7Fsrk7JVWtWgCOiilFYvVNKIs+GYHyVA=; b=sQ7jXWtguS1lMs9QNbge51zfJ7160s6zccNfWljByza3EPsKgZcYwycQigM2h0snZn BysydgAB7aD0NFAoSjM5uKO6e3ZOBFuaPZzY8mgzJMShzK3SwlmxXVe0L+zWCn5xVtbI GqmmkXAoDFrRw7UAmUGKgwzGz9UfeK9K9YdETUjdFRq9CjZEXXrpgDMpJSd6U1CkkDmy TXcmc04dYdqdRnUGlFO1zLZI2Omi10p7ZNeJxg1NgHowcYyNo6xBLCGudDONmtVCpFwK C0htthDyoW4qPlXyh2hxYGMfs0mod2yqCMsfC29IsZ2561qGA5iXI+uDleOYvnyRP8gs irsg== 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=TD6wA7NgMCO7Fsrk7JVWtWgCOiilFYvVNKIs+GYHyVA=; b=IcLBRXLujpnkxTNOoFURG/ofKNSWrWxeCYF6+pTc1KBx9S1t9Jup1X7AhTN8CFSANz 2p39LRi5/izLvZSi66XrRPxMt7W4uAKjBL6KChGmZhz15UrMb5GHqVLZH35gC7ydznMN C+SKTm8wc0AP3PrjU12XeHcPKqDn5SnKF50cj2TJ/sP2/sS5eraQ9IZexblsi3/+xIAd U0hwEzCOq+77B2/wSZK7kbqeWabirqU7LzcV5eIcm5n1aPSM1Z8olsCvS5Fz98DUj3bR a1n/kiX4MN09oCfocFxOEE7T2NK6r5NO/pV7Okl5TztKkrXVLkQucT7RnWDBpU9lKUS6 EwnQ== X-Gm-Message-State: AOAM531IDmKTeaBrJoeb5x+TcZGEurora3hLaO5rbFkm3/KymNW3luEO fA5hdtzI8HY21TfXBPIL578EJeFRmBWNcw== X-Google-Smtp-Source: ABdhPJwmL6ElYKfPDfClAXoI7EB2+bTZzUA4y0OaX1bKsS8ZIUWn3DqrYH1pTdEk8rNcv8OU3ib/WQ== X-Received: by 2002:adf:cf11:: with SMTP id o17mr16304974wrj.391.1615243186370; Mon, 08 Mar 2021 14:39:46 -0800 (PST) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id f17sm19811322wru.31.2021.03.08.14.39.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Mar 2021 14:39:45 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Mon, 8 Mar 2021 22:39:38 +0000 Message-Id: <20210308223939.2088-3-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210308223939.2088-1-david.plowman@raspberrypi.com> References: <20210308223939.2088-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 2/3] 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 --- 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..41fd02e3 100644 --- a/src/ipa/raspberrypi/data/meson.build +++ b/src/ipa/raspberrypi/data/meson.build @@ -2,6 +2,7 @@ conf_files = files([ 'imx219.json', + 'imx290.json', 'imx477.json', 'ov5647.json', 'uncalibrated.json', diff --git a/src/ipa/raspberrypi/meson.build b/src/ipa/raspberrypi/meson.build index 59e49686..d1397a32 100644 --- a/src/ipa/raspberrypi/meson.build +++ b/src/ipa/raspberrypi/meson.build @@ -20,6 +20,7 @@ rpi_ipa_sources = files([ 'cam_helper.cpp', 'cam_helper_ov5647.cpp', 'cam_helper_imx219.cpp', + 'cam_helper_imx290.cpp', 'cam_helper_imx477.cpp', 'controller/controller.cpp', 'controller/histogram.cpp', From patchwork Mon Mar 8 22:39:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11524 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 977DDBD1F1 for ; Mon, 8 Mar 2021 22:39:49 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id CBBD668AB0; Mon, 8 Mar 2021 23:39:48 +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="TM5Mnlek"; dkim-atps=neutral Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 7932A68A92 for ; Mon, 8 Mar 2021 23:39:47 +0100 (CET) Received: by mail-wr1-x435.google.com with SMTP id b18so13145124wrn.6 for ; Mon, 08 Mar 2021 14:39:47 -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=u+gFQSGRNNhD2P9SkZ4c6rCGJV1jyRmT9Rhqq+A1UBI=; b=TM5Mnlekpb1JpOHdDsNTv05ivgGjgbScnPtZpfofGOnk8FfByEsb4wi0fFcLjjJM6L jdCgZn0JvRGf1Stc51lypCCSMGAAR11aFgf+JZ6fChGEZd7DVedMOeFRwED2xahsYPzx AMh0Hm3pXhxMeUOQc5nZlggvC5c5/D+ERk6v3IIaxkpLZU7oG0LnzcSqZnNc3IFO1lea vDJAhcGLYOyFskpvCTEFu6O8fGXxx8NbGCv4s02J9xwiB0pTA3sbPl5siPVLDtlV84ML WgFvG1jdkxndqMkKWk3ZNaiiwRMyB2ZpcKqyNxOk5YhXpzCr13mNBkYmJR+NnjVECYs+ 7RjQ== 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=u+gFQSGRNNhD2P9SkZ4c6rCGJV1jyRmT9Rhqq+A1UBI=; b=HIazzwBijjVFPa/XRNtYejmjiSFNgZDz68bXfFxJXhL4TCtBPitliTCo9uodwbSj8z gE34QtTj5D+9zHdtAPubn+ycYy+E6MbPgdRP9T/SKWnnDE6Kxpx6MJqQCk8KkbUoEsuR tq4KX97xEDppPbgUx9fu2kMg1kNxBOX7bxSxhVqiMf+jjfcN86WEvMOgngF6ebliv5XB UyY2s0sAoVXeSx02AuIxmvS9hL411RrI8/04LCKohgkZnC7fH1sMQ3FcuKH198mTv89/ 2T8A+ef4HKzh4ArAOtBz9NH9UWKqodDGgsFZdkf7wka3UuhrKLeMocPbn412TsYMHAdK wbvg== X-Gm-Message-State: AOAM530XDDLJi94CwNQRY1JXlJgy4g8KWSx1KPFsoEvayZh3GeKjcRnk B81Yp5Grf1yxwFXlUUkK7xXFKxGPhjYHLA== X-Google-Smtp-Source: ABdhPJwZTnm0WL+hNMs2Mr2v7En/sX8BgQdFqqDnzuQfWaXRy4MqGK/EdOZHjMoOrbv7IuZn1+OKjg== X-Received: by 2002:a5d:658d:: with SMTP id q13mr25136520wru.388.1615243187038; Mon, 08 Mar 2021 14:39:47 -0800 (PST) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id f17sm19811322wru.31.2021.03.08.14.39.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Mar 2021 14:39:46 -0800 (PST) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Mon, 8 Mar 2021 22:39:39 +0000 Message-Id: <20210308223939.2088-4-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210308223939.2088-1-david.plowman@raspberrypi.com> References: <20210308223939.2088-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 3/3] ipa: raspberrypi: Rename vblank field in SensorConfig to vblankDelay 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 name vblankDelay is clearer. Signed-off-by: David Plowman --- include/libcamera/ipa/raspberrypi.mojom | 2 +- src/ipa/raspberrypi/raspberrypi.cpp | 2 +- src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom index f733a2cd..c3d614b8 100644 --- a/include/libcamera/ipa/raspberrypi.mojom +++ b/include/libcamera/ipa/raspberrypi.mojom @@ -22,7 +22,7 @@ enum ConfigOutputParameters { struct SensorConfig { uint32 gainDelay; uint32 exposureDelay; - uint32 vblank; + uint32 vblankDelay; uint32 sensorMetadata; }; diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 741bff4c..85a2b846 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -349,7 +349,7 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo, result->params |= ipa::RPi::ConfigSensorParams; result->sensorConfig.gainDelay = gainDelay; result->sensorConfig.exposureDelay = exposureDelay; - result->sensorConfig.vblank = vblankDelay; + result->sensorConfig.vblankDelay = vblankDelay; result->sensorConfig.sensorMetadata = sensorMetadata; } diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index db91f1b5..6387fae5 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -1266,7 +1266,7 @@ int RPiCameraData::configureIPA(const CameraConfiguration *config) std::unordered_map delays = { { V4L2_CID_ANALOGUE_GAIN, result.sensorConfig.gainDelay }, { V4L2_CID_EXPOSURE, result.sensorConfig.exposureDelay }, - { V4L2_CID_VBLANK, result.sensorConfig.vblank } + { V4L2_CID_VBLANK, result.sensorConfig.vblankDelay } }; delayedCtrls_ = std::make_unique(unicam_[Unicam::Image].dev(), delays);