From patchwork Wed Apr 14 10:29:53 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11927 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 E5D8DBD22F for ; Wed, 14 Apr 2021 10:30:03 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9AB3668818; Wed, 14 Apr 2021 12:30:02 +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="Eh3Obv55"; dkim-atps=neutral Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id C2EF468803 for ; Wed, 14 Apr 2021 12:30:00 +0200 (CEST) Received: by mail-ej1-x62d.google.com with SMTP id w3so30658162ejc.4 for ; Wed, 14 Apr 2021 03:30:00 -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=Y7RBLkfsx9Q0XA5VMAG5UTmLaj1/rjfPHufTqSsjJXs=; b=Eh3Obv5549rmgXEGVthxv9ucPUsCnA4R+elqq8ohkvIH1IklA0A71QZUkgUy+rFQDZ pW9eiMnSzsV/JjR89dLfNpjiFxM8dTTg74yeb6cfqQicuzOjbMmP9H7TXTIt3P+MGe7z UOzK0zoHzxl+DjR5uuP4FxEkl+MibAMMjYjuyvSRIN7W0j0Nw8I+n1E42boN70rrRlG+ 0DfMt7/fk6QO3fkKPjZocs/HnUnSU/0TSkMWOkDtI1AtK4bu+sh3R6nLFikMRREMkhR3 ZTcyRBnm0h8NCtiJT98sqaaN/otY7oB2Pphyj5M28ZTDh8DEP9l00SsCihJ/24vxED8Y ei2Q== 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=Y7RBLkfsx9Q0XA5VMAG5UTmLaj1/rjfPHufTqSsjJXs=; b=a1KN8v3k6cE7QE9q2VPCaijbPWVDKhX6K5Kbw2BXkSPm0RKOMsJ66owYxORB5mMVN1 0TWcfflxe22nWh5uM1+RlZPWV4gek6uDs+QWTp/40jez0DjjRM3WiXhSGHmkko7MK+rp +rx496x4NfAl2WYT2wbQghX6G55tiLlyEDeTRVxsvTa4369Qv3PPsJt3ROP/suBPDPcx FtYmH9kwN/dQnKQsuAgv393+B6Rsc48NMbkeDCoG4tyfHsCGbcNzN4zQ1BNL2U+WfY/m 3DpuyptVGK8b9nA4udGpCfu0/9GaBmwl4vsQIB3Czku5duEr8tAgDfo0KQz5SRehWMRH 3/Ow== X-Gm-Message-State: AOAM530B3oBOiApK6x2WC6PQEFQoWyvUsYIWEQ6NBaRPrzhqeVHsXv2S mqtIPN+AzJ8dyZ/kKndUpGf0lCLFSt6Z8w== X-Google-Smtp-Source: ABdhPJyhta5LVEj6ZJk8ENLF3cfRberSlIERniNrg0KnP22vqyyUEAnurUjVJzX7lLWQn8n3a7trMA== X-Received: by 2002:a17:907:2bcb:: with SMTP id gv11mr2863941ejc.353.1618396200300; Wed, 14 Apr 2021 03:30:00 -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.29.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Apr 2021 03:29:59 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Wed, 14 Apr 2021 11:29:53 +0100 Message-Id: <20210414102955.9503-2-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 1/3] ipa: raspberrypi: Make CamHelper exposure methods virtual 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" This allows derived classes to override them if they have any special behaviours to implement. For instance if a particular camera mode produces a different signal level to other modes, you might choose to address that in the gain or exposure methods. Signed-off-by: David Plowman Reviewed-by: Naushir Patuck Reviewed-by: Kieran Bingham Reviewed-by: Laurent Pinchart --- src/ipa/raspberrypi/cam_helper.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ipa/raspberrypi/cam_helper.hpp b/src/ipa/raspberrypi/cam_helper.hpp index 1b2d6eec..4053a870 100644 --- a/src/ipa/raspberrypi/cam_helper.hpp +++ b/src/ipa/raspberrypi/cam_helper.hpp @@ -66,8 +66,8 @@ public: virtual ~CamHelper(); void SetCameraMode(const CameraMode &mode); MdParser &Parser() const { return *parser_; } - uint32_t ExposureLines(double exposure_us) const; - double Exposure(uint32_t exposure_lines) const; // in us + virtual uint32_t ExposureLines(double exposure_us) const; + virtual double Exposure(uint32_t exposure_lines) const; // in us virtual uint32_t GetVBlanking(double &exposure_us, double minFrameDuration, double maxFrameDuration) const; virtual uint32_t GainCode(double gain) const = 0; 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; From patchwork Wed Apr 14 10:29:55 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11929 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 647D3BD224 for ; Wed, 14 Apr 2021 10:30:05 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 57E7868813; Wed, 14 Apr 2021 12:30:04 +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="lDw8iNr+"; dkim-atps=neutral Received: from mail-ed1-x532.google.com (mail-ed1-x532.google.com [IPv6:2a00:1450:4864:20::532]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id A63A968819 for ; Wed, 14 Apr 2021 12:30:02 +0200 (CEST) Received: by mail-ed1-x532.google.com with SMTP id f8so23038646edd.11 for ; Wed, 14 Apr 2021 03:30:02 -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=EK0KpznhWxelp9GWrSl8L18Zfi0E+M59ms30V470TNM=; b=lDw8iNr+MhgOtSfelvrxqRuDZsoKAekzcRvkiI2h7TzC0nDCGeBJrM+ag8uw3TJoZi oBrcEcogt3ZKcR71YzkcwKNy8rJ8WtGSDPons6wdaixmA493uftCDZDsHbOOW1cMFFJK YdvCVXk/x1fHUbVV1V5ZjBzeyN7n7Kpg8GShQ4OzuOwTRx8lDUrqm1GF0UoteoP4dd8+ y3PzISU8jw5Eg/V/7K1DFd6n7HdcVcrEAhfkPFLusj+GLsHLAsJfOU3zbod7LxUOEPbL 8QJQrYesHHFiDLNSnB/hrJ1BrgHSd8NulMffkyX3vQyxukKla3v6sP/nyTbggpby014L m4Ig== 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=EK0KpznhWxelp9GWrSl8L18Zfi0E+M59ms30V470TNM=; b=IIuYO657PjGq37PFOhr46hPcp+hfNRQwhLNzKxBOJ3Jk/UIoHmdNLUK5Q7RqaDVqrW iPAm/jUB3smkQjgZy/+hZVr9ThGL8SS1mjZ6qAn+hjMvk+88Q9zUGaZ1tlBxmmMhkzHe s1qJpXwO6z0LEzOTELpw9m8xZl7TPytk1O9P/x+t7m9qIsoxCWr+Qmfj4ECirZIYUq+C 3i3ipP4qIASMIcM1rIKcM9H/5trxMhoklQp+md/VohnpvwFNgH/Ceb8DRhYP90IO6zRM gNtLaYuOtu9E3PybhEYoih5up/pCFNimaTNXt4+eRwWbfiBzFr9wgRtK/hkabzMlSVdA yUXQ== X-Gm-Message-State: AOAM5306bQbrXDzEE6slEZ/PMmnyIP/Q4haFNWI9/l4O3RVhoMYh9ALg BZ4Pau9txMnNDGnzqKm53ix0s4WEJo3xFQ== X-Google-Smtp-Source: ABdhPJzLzu2mA/ASiBKybAr6SD0KGFjzJQ5MJasuS9AABu4BH20RixYuX5I4ibpTjEzdHE1cG5tp3A== X-Received: by 2002:a05:6402:c:: with SMTP id d12mr39746082edu.100.1618396202001; Wed, 14 Apr 2021 03:30:02 -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.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Apr 2021 03:30:01 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Wed, 14 Apr 2021 11:29:55 +0100 Message-Id: <20210414102955.9503-4-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 3/3] ipa: raspberrypi: Update sensor's RED/BLUE balance controls when present 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" If the sensor exposes V4L2_CID_RED_BALANCE and V4L2_CID_BLUE_BALANCE controls, assume it wants to be told the colour gains. We want these to be applied as soon as possible so we add a new setSensorControls signal to the IPA which passes these back to the pipeline handler without using the DelayedControls mechanism. Signed-off-by: David Plowman Reviewed-by: Kieran Bingham Reviewed-by: Naushir Patuck --- include/libcamera/ipa/raspberrypi.mojom | 1 + src/ipa/raspberrypi/raspberrypi.cpp | 13 +++++++++++++ src/libcamera/pipeline/raspberrypi/raspberrypi.cpp | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/include/libcamera/ipa/raspberrypi.mojom b/include/libcamera/ipa/raspberrypi.mojom index f38c2261..ebaf0a04 100644 --- a/include/libcamera/ipa/raspberrypi.mojom +++ b/include/libcamera/ipa/raspberrypi.mojom @@ -117,6 +117,7 @@ interface IPARPiEventInterface { statsMetadataComplete(uint32 bufferId, ControlList controls); runIsp(uint32 bufferId); embeddedComplete(uint32 bufferId); + setSensorControls(ControlList controls); setIspControls(ControlList controls); setDelayedControls(ControlList controls); }; diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index dad6395f..f95896d2 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -1036,6 +1036,19 @@ void IPARPi::processStats(unsigned int bufferId) setDelayedControls.emit(ctrls); } + + struct AwbStatus awbStatus; + if (rpiMetadata_.Get("awb.status", awbStatus) == 0 && + sensorCtrls_.find(V4L2_CID_RED_BALANCE) != sensorCtrls_.end() && + sensorCtrls_.find(V4L2_CID_BLUE_BALANCE) != sensorCtrls_.end()) { + ControlList ctrls(sensorCtrls_); + ctrls.set(V4L2_CID_RED_BALANCE, + static_cast(helper_->ColourGainCode(awbStatus.gain_r))); + ctrls.set(V4L2_CID_BLUE_BALANCE, + static_cast(helper_->ColourGainCode(awbStatus.gain_b))); + + setSensorControls.emit(ctrls); + } } void IPARPi::applyAWB(const struct AwbStatus *awbStatus, ControlList &ctrls) diff --git a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp index f22e286e..8dae4912 100644 --- a/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp +++ b/src/libcamera/pipeline/raspberrypi/raspberrypi.cpp @@ -152,6 +152,7 @@ public: void statsMetadataComplete(uint32_t bufferId, const ControlList &controls); void runIsp(uint32_t bufferId); void embeddedComplete(uint32_t bufferId); + void setSensorControls(const ControlList &controls); void setIspControls(const ControlList &controls); void setDelayedControls(const ControlList &controls); @@ -1219,6 +1220,7 @@ int RPiCameraData::loadIPA(ipa::RPi::SensorConfig *sensorConfig) ipa_->statsMetadataComplete.connect(this, &RPiCameraData::statsMetadataComplete); ipa_->runIsp.connect(this, &RPiCameraData::runIsp); ipa_->embeddedComplete.connect(this, &RPiCameraData::embeddedComplete); + ipa_->setSensorControls.connect(this, &RPiCameraData::setSensorControls); ipa_->setIspControls.connect(this, &RPiCameraData::setIspControls); ipa_->setDelayedControls.connect(this, &RPiCameraData::setDelayedControls); @@ -1361,6 +1363,14 @@ void RPiCameraData::embeddedComplete(uint32_t bufferId) handleState(); } +void RPiCameraData::setSensorControls(const ControlList &controls) +{ + ControlList ctrls = controls; + + unicam_[Unicam::Image].dev()->setControls(&ctrls); + handleState(); +} + void RPiCameraData::setIspControls(const ControlList &controls) { ControlList ctrls = controls;