From patchwork Wed Apr 14 10:29:54 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11928 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 DE8BABD224 for ; Wed, 14 Apr 2021 10:30:04 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id E366F68816; Wed, 14 Apr 2021 12:30:03 +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="K6JVyybg"; dkim-atps=neutral Received: from mail-ej1-x631.google.com (mail-ej1-x631.google.com [IPv6:2a00:1450:4864:20::631]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A79036880B for ; Wed, 14 Apr 2021 12:30:01 +0200 (CEST) Received: by mail-ej1-x631.google.com with SMTP id g5so23916891ejx.0 for ; Wed, 14 Apr 2021 03:30:01 -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=tAHohxZ+A701u5gqGmIQteFz6G6UtZkAvLkzpylEG8o=; b=K6JVyybgPdflobv5FFfZsp2YZPUEiXp/km79TFaPSRLU+lHUumWgvoWgvwBevs5tcH 5saqBsMg20vm1mfA9Vl+WqxOk21lFjkIPyzwf3mwjcH1oBziNeicTj+nwm++/cUm1cq7 oqPOQV+6ahppSAdltBI8Co9/czdnHl3am/IivjoZPsZdmf08ExjNHf61gGhkNgBW6k0c sueQ/iu58Ba0GaSImUEJPbJS+DQgBw3rBjOMM+SLZlzcr8zMwzpx6mGc69bvPRcjVA5c E7EmThC3qSTFTY/6pZDO4+/UM6oeDXy4cBr6QEgbUdviJ/We3a0EqoUOD/xzp8Hfy8Qi Q7ng== 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=tAHohxZ+A701u5gqGmIQteFz6G6UtZkAvLkzpylEG8o=; b=aEICXb+9ltW+G6Q7X7Oc8KmF3vthgoGl1V3STqUAp6+foL79kl29e78P6HlURWMLPK xdvpvpfOmoJeSyR2LpT+4yvqDl174yuwhm6KOUMifVqwEsIsQ88Wke2clrLdIP8/Zkjl ocdklfjZ0dUqPOHAZTLpQnAWVgHJihUjqrTYw+UcbQ0L9VhkdvVFohHQOvnwYZ7MlMrF j9Fm+ttz9sHcOgN5JAaR4j3ewCk6O1JcNJQiLoMDGY3jsxAU8sL9Am1f6ShOqjdHEhgB sLIvATp/qvDIvugad2rmLnVgqGnlB3pivbY766Fm/9hv5sQCqxamK8DKH9sYT36tGQeR r19w== X-Gm-Message-State: AOAM532LF/Vmw37bsfjRFtPcnN/NPLR9zMkIhyRjn/SqiCnBx8gOt+A5 nw8JR9dUrNG1IKwNKZ9JMFGeYnz88bM7dw== X-Google-Smtp-Source: ABdhPJwzokcVacEBNnY8/a0lQuaaL9f7W+H0JCTr6AmrDfzDDE1PCUg7CRosyQPZmKLK/Bt8eMszYw== X-Received: by 2002:a17:907:75d9:: with SMTP id jl25mr14416589ejc.420.1618396201067; Wed, 14 Apr 2021 03:30:01 -0700 (PDT) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id h8sm11369137ede.25.2021.04.14.03.30.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Apr 2021 03:30:00 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Wed, 14 Apr 2021 11:29:54 +0100 Message-Id: <20210414102955.9503-3-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210414102955.9503-1-david.plowman@raspberrypi.com> References: <20210414102955.9503-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v3 2/3] 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 4053a870..a0b6b987 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;