From patchwork Tue Apr 27 13:08:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 12120 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 425F3BDE3B for ; Tue, 27 Apr 2021 13:08:55 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id D6287688B9; Tue, 27 Apr 2021 15:08:54 +0200 (CEST) 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="iyJv5dZs"; dkim-atps=neutral Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 3061E6885A for ; Tue, 27 Apr 2021 15:08:51 +0200 (CEST) Received: by mail-wm1-x333.google.com with SMTP id n84so4602053wma.0 for ; Tue, 27 Apr 2021 06:08:51 -0700 (PDT) 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=ohoT8WuC7h9DgVwzv9RJ54NlPOfdOQJQOBKorFlaCo8=; b=iyJv5dZsf7xvnAEpJbY2culjxCw4oeoXE/tA2/D1DEKOje6FJu01uF/+6SP5O5YFky Uj4dzwaMU4hWNWm3lS0QB5r9ioTAnmnFKF9TAyloQSxYwb34bBWzKcm25823mpFi49kd jihIW3x9viWGd4cks+4GwfQe9zmBFCZiCI3G77U2msKg947N0ERRLM54z3vdblHHiVoj stYvLGvT1xx8kEBfGRRjXB3CegKyFJAYevBvufwdr8qrzenIOWJf5QR/RelZq7ZZ+GEa OhqBlOADlvTOx2hebbXYofe+7PdswnRioYea8hRYoQ+oG1FZjCMbROho5G8aAiyUzpii pvHg== 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=ohoT8WuC7h9DgVwzv9RJ54NlPOfdOQJQOBKorFlaCo8=; b=WoX1gFYdQ733l1MGd357w0cLcAevtsj0spx2ajYmCj43xRAicNezhDPkmgdPIkYn9a M9Sa78WUt6lb5CdzWc+j614Xct2R3s0iaaqjy3AoceoYDqL+311Qj18uUf+KWgHfpvfs qB5a3Utz7aud60lnVv0mmzUnAgJEJQGP528zka73InBkpZdhC0v/lQCSle3Rnf/qNz4e 1VprH+Na/mlQM8t3k+WDHpRXurIhHMVDSi7V810g5ZiNdjskcz8yePWNzNUjRb6cE0+q WCZo4B9uFLlky6Qikcz8wSLZE4nOSBovArtsH3Y7SuxTjRmSfTRUSrNwJJFH8UfeuVBh GSGQ== X-Gm-Message-State: AOAM530F+u7jmHprinCQbDuJHP8Pd1We3M23U4mpCp/d+Jm3hPO+1Iz6 6xWuRUF5oLylXBDhX+GA62OZ6LgyOtfqCA== X-Google-Smtp-Source: ABdhPJxaSvBMHPjbhnh8nAB8Y4adoDQzua+cirvZqrARaQnuuXcziV81ZFh7wowQ82MP9eXmC9oTaA== X-Received: by 2002:a1c:7209:: with SMTP id n9mr5453501wmc.60.1619528930749; Tue, 27 Apr 2021 06:08:50 -0700 (PDT) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id r11sm3899327wrx.22.2021.04.27.06.08.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Apr 2021 06:08:50 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Tue, 27 Apr 2021 14:08:42 +0100 Message-Id: <20210427130844.11357-3-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210427130844.11357-1-david.plowman@raspberrypi.com> References: <20210427130844.11357-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v4 2/4] ipa: raspberrypi: Add CamHelper::ColourGainCode method 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" Some sensors may require the V4L2_RED/BLUE_BALANCE to be set. These will require a ColourGainCode method in the CamHelper, analogous to the GainCode method, but which converts the red and blue gains to the codes that the driver will want. Most sensors don't require these values so it's helpful to provide a default method - noting that it should then never be called. Signed-off-by: David Plowman Reviewed-by: Kieran Bingham Reviewed-by: Naushir Patuck --- src/ipa/raspberrypi/cam_helper.cpp | 18 ++++++++++++++++++ src/ipa/raspberrypi/cam_helper.hpp | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp index 0ae0baa0..ad344d29 100644 --- a/src/ipa/raspberrypi/cam_helper.cpp +++ b/src/ipa/raspberrypi/cam_helper.cpp @@ -17,6 +17,11 @@ #include "md_parser.hpp" using namespace RPiController; +using namespace libcamera; + +namespace libcamera { +LOG_DECLARE_CATEGORY(IPARPI) +} static std::map cam_helpers; @@ -57,6 +62,19 @@ double CamHelper::Exposure(uint32_t exposure_lines) const return exposure_lines * mode_.line_length / 1000.0; } +uint32_t CamHelper::ColourGainCode([[maybe_unused]] double gain) const +{ + /* + * This is only used when the sensor has RED/BLUE_BALANCE controls. + * Most do not, so supplying a default is helpful - though no one + * should be calling it. + */ + LOG(IPARPI, Fatal) + << "Sensor is requesting RED/BLUE gains so a proper " + << "implementation of ColourGainCode must be provided"; + return 0; +} + uint32_t CamHelper::GetVBlanking(double &exposure, double minFrameDuration, double maxFrameDuration) const { diff --git a/src/ipa/raspberrypi/cam_helper.hpp b/src/ipa/raspberrypi/cam_helper.hpp index 618391e9..8b8d1124 100644 --- a/src/ipa/raspberrypi/cam_helper.hpp +++ b/src/ipa/raspberrypi/cam_helper.hpp @@ -26,7 +26,8 @@ namespace RPiController { // // The ability to convert between number of lines of exposure and actual // exposure time, and to convert between the sensor's gain codes and actual -// gains. +// gains. Some sensors like to be told the colour (red and blue) gains, so +// there's a method for converting these to gain codes too. // // 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 @@ -72,6 +73,7 @@ public: double maxFrameDuration) const; virtual uint32_t GainCode(double gain) const = 0; virtual double Gain(uint32_t gain_code) const = 0; + virtual uint32_t ColourGainCode(double gain) const; virtual void GetDelays(int &exposure_delay, int &gain_delay, int &vblank_delay) const; virtual bool SensorEmbeddedDataPresent() const;