From patchwork Thu Apr 8 13:36:32 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11871 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 21424BD16B for ; Thu, 8 Apr 2021 13:36:43 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9F5C6687F8; Thu, 8 Apr 2021 15:36:41 +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="fO71p/dT"; 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 78F01602CC for ; Thu, 8 Apr 2021 15:36:40 +0200 (CEST) Received: by mail-wr1-x433.google.com with SMTP id f6so2167431wrv.12 for ; Thu, 08 Apr 2021 06:36:40 -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=mrjhT2FmHfGM+ETL2c8tGFpgFd9U4oNZSbU5UloGtqs=; b=fO71p/dTsgRkASA+2kJHgAqOz7xU5NzsTI/JKbkmAEU3d9dcouDa74bRuwviOPPHYc yuD66h0c1r7IYTDYi5Or1ZEh0E/v0dnqTXHr4mwK3x9ZNNICwh0mH/xJ2DXZSW0LjgR4 Xf/PYWKlxYfUCJ0Lj/bPLEW0T+Lxbrz+BXSoqz85HrMwny6Mo7+WPjJhKTDEseA+Mt3m QAkcCI3pKeGttfhMG6LBIGa/ycO33EwZ8F4UHH9kCVjEmXfyQXBsJDoKhNPcZGkQ1ARl 0J9xcBTGSN7oraVVKj5+zgMVYFZOji/KrcsoyLMyIZSxMVxReCp7WdOxQFChmFomgqKG 3E5g== 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=mrjhT2FmHfGM+ETL2c8tGFpgFd9U4oNZSbU5UloGtqs=; b=ITLHJnr4SUoCCA/XM6zKTx6M9OejbsB10jbB+GSj+gPZVFaP+mSTECDDJveoQVI463 Q4cWbEbyddDiNDEjrqPD3+PQrtj7d7wkhBW+KrJ0TcUlscYNKBCtH9ZY8+UThHNoN8k6 cdHBxFyDGleylaJIUtY9fLm61UPur36wND5z8hH1jT1VQI8mPBG6oO2qDudHUl2DGvRF Wr0v5NOGzrAdQb/08Zv5v7JHLsrrckn4i88PBme31EkM7Zkq04pi0Iiew19Fz64KlUQT CVU8Llm0m2XjN64lsHbwl+iOrU6ltlJPQWGuh3nUrG6v34erqxZVo+RiO6DcznS1tTLk r2aQ== X-Gm-Message-State: AOAM532p0/esJvNssJmrPbei6J6rrHywJBVwIXMkaKG5QCkSghGCJaaz lTW8KmlQXw2foG6jyxaJl+/H7Ur05IerFg== X-Google-Smtp-Source: ABdhPJyyWcNVJsRVyT/keBNVl8KDqQ0l+DNhITvlfVy+xmiT0JogyQR46P3yJqEASNG1NhFvT0m/nA== X-Received: by 2002:adf:f908:: with SMTP id b8mr11244846wrr.184.1617888999952; Thu, 08 Apr 2021 06:36:39 -0700 (PDT) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id z18sm13132522wmc.27.2021.04.08.06.36.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Apr 2021 06:36:39 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Thu, 8 Apr 2021 14:36:32 +0100 Message-Id: <20210408133634.16815-2-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210408133634.16815-1-david.plowman@raspberrypi.com> References: <20210408133634.16815-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 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 --- 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 Thu Apr 8 13:36:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11872 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 CE266BD16B for ; Thu, 8 Apr 2021 13:36:43 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 45673602CD; Thu, 8 Apr 2021 15:36:43 +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="lgXBVoby"; 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 290BF602CD for ; Thu, 8 Apr 2021 15:36:41 +0200 (CEST) Received: by mail-wm1-x32c.google.com with SMTP id o20-20020a05600c4fd4b0290114265518afso1249942wmq.4 for ; Thu, 08 Apr 2021 06:36:41 -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=bPgy71T3ChQPM1WXwYAkhYqDaJuQNuEYvNRjWcTa3CM=; b=lgXBVobyQ/odebYVLuWoq+WA8050xFFeCK98SDfgxw4JMKcyxxHasz0rUdxNgy7r79 YGQKJ+zuBPCHJmvEaADqPnRlLn4HLvZOIUrndsFHA/MSjJo1k4hd7fOooDDWuDkC1I3j BmsOsu4CbjDEIvDTK74qE1Hp5JalTU4IPIMy1aPFqwQZBeWtPNdsX9OwCEDZ86w5WGJh X+uk0iEpqTqtxpGiVp6MFy00myZ+t2OsOoh1hgDeAqkz+1NVkWDCaM3bHCklxc9yhDzV flLobboHXN7HdNXHoul1EzDPXZ5JGs1khyulDBZwGkKwthLHEeOwvYR/lP2q+C/KaZQF IqBw== 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=bPgy71T3ChQPM1WXwYAkhYqDaJuQNuEYvNRjWcTa3CM=; b=boS3ogx0Q4Jwxc+37ehHdFxFzP+CcCubgr9+OsB2hlEZaRNpwZ8ZXmbfZ0YtIthf6d KNSy+rWj8GqKXkf7NAgxY9plrMDtw12R5LvUQ4Amwq0a+934JqLCjbGmKte6k+74bIiu cqXWs9TRsIaqVjWAQ21GnvfVKjmkYyMEumIqK7RQKQ1rZ4vQ5MxDbdPQMY4HgAj/aex4 tRjvvm8biUw9yUiYuOGCQKTtcSUyIRZtmyO93+q3S1GPvqVCbU+5NOSCxcoR7HR7vBUx +ouxD8C+sP2Mu5ET7NtO17F+LCkxmKUS+rxCZtlctohJqW+5JpiXKpBHVUSTBC5hXB58 ep/Q== X-Gm-Message-State: AOAM531JCa2TMa3Yo4JK6q7klpP0nD0WtKcQ+JbDPgmCCX6xdDjaHSZX QDtwuYyLCQUV9eiHLU6h7jwHGMaME2QLOQ== X-Google-Smtp-Source: ABdhPJwI4uXi5hPVz+UH1Jbubp0Haos0PY+UIk2ILnlbLcYV9Hss8qEYi7tdcvq2hXOvUccZCd090A== X-Received: by 2002:a7b:c1c4:: with SMTP id a4mr8397811wmj.67.1617889000615; Thu, 08 Apr 2021 06:36:40 -0700 (PDT) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id z18sm13132522wmc.27.2021.04.08.06.36.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Apr 2021 06:36:40 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Thu, 8 Apr 2021 14:36:33 +0100 Message-Id: <20210408133634.16815-3-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210408133634.16815-1-david.plowman@raspberrypi.com> References: <20210408133634.16815-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 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 --- src/ipa/raspberrypi/cam_helper.cpp | 11 +++++++++++ src/ipa/raspberrypi/cam_helper.hpp | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/ipa/raspberrypi/cam_helper.cpp b/src/ipa/raspberrypi/cam_helper.cpp index 0ae0baa0..556a7c03 100644 --- a/src/ipa/raspberrypi/cam_helper.cpp +++ b/src/ipa/raspberrypi/cam_helper.cpp @@ -57,6 +57,17 @@ 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. + */ + assert(0); + 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 Thu Apr 8 13:36:34 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Plowman X-Patchwork-Id: 11873 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 56EFCBD16B for ; Thu, 8 Apr 2021 13:36:44 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 90EA768800; Thu, 8 Apr 2021 15:36:43 +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="CaoJTeD+"; dkim-atps=neutral Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [IPv6:2a00:1450:4864:20::431]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id CD4EB602CC for ; Thu, 8 Apr 2021 15:36:41 +0200 (CEST) Received: by mail-wr1-x431.google.com with SMTP id a4so2191288wrr.2 for ; Thu, 08 Apr 2021 06:36:41 -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=AQav4R2q5Pmtad2u5QffIsZ0yQgPDaIh0eB6DfyPay8=; b=CaoJTeD+yxDhoek3PfysPemkHVQIhRagg0YzDC4J+gRDJD1fZQflj6QT7dTS7Vrkz+ AM5qxmCp+elFhsSR57/D6gDaTe7PWFIQK6UV8NQPspmxf3YTTGM4IPoEld4BExLMXs+k VUP3AhdlFNciRaWxOKtPqTzHwiB/B7ErVZLHPhrXIUgSdNsKaITZU+QW0NKiSANKDPH+ 2FFE7z0/UC/klvUa05oki9ngqQjoTmULhKuoVOSe3oq/jkfleIUbyCSkwnddh8FM+6C5 FvstviJ0jNw0CdGQS7RlcmC1PVO5SAU+gas34BOAevvm2bXsOVZjL/0+Fg3wEePJ0azx LoZw== 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=AQav4R2q5Pmtad2u5QffIsZ0yQgPDaIh0eB6DfyPay8=; b=IAF8wlKOdqDnjkWenwyXJTWMnD/IP3ydhV1Mc0jWAbE2njvudd5LduRK4I89MtZVn7 HtuewXlNM651/ixSouK81/7aVg8/sq1pqmN1yD0zaFUoY6XTCtiwvbcRcolk7teGA1bK 6Fb15PGgY/gc9WGOk7QiXS14zOsWENP6y83Nno0CTS/FSl9WOLydzgkqVd4MpOQHTGAc xGAQF1h6W/8dPbimuIXNqv94jZSGUUnwWjchA/dJUXxyx6TF1qA8Ry2TY3kKyRxWdeYe Id2dZma2iEqwVQk7WwTzbuW6DuFG7Nwp7/iwPQNAseduLDjqXL4OnA5OrEU9dUiNKZjr XONA== X-Gm-Message-State: AOAM530hmDiK6Z4q1r1ktgsnRiHZ1CtgaslRC5rV8fU/P/Q3On8nfso9 yuQCa0xMOzYbdH8o2HUYDukf4DvKBuFsmw== X-Google-Smtp-Source: ABdhPJyLpZUgqJq7EiIKMiufH6xY18MWfh+PPKuVRcZQb4ZW8UNVL40d0am5HtUhDPtU9cl14H/y5A== X-Received: by 2002:adf:fb0b:: with SMTP id c11mr11491354wrr.425.1617889001378; Thu, 08 Apr 2021 06:36:41 -0700 (PDT) Received: from pi4-davidp.lan (plowpeople3.plus.com. [80.229.223.72]) by smtp.gmail.com with ESMTPSA id z18sm13132522wmc.27.2021.04.08.06.36.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Apr 2021 06:36:40 -0700 (PDT) From: David Plowman To: libcamera-devel@lists.libcamera.org Date: Thu, 8 Apr 2021 14:36:34 +0100 Message-Id: <20210408133634.16815-4-david.plowman@raspberrypi.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210408133634.16815-1-david.plowman@raspberrypi.com> References: <20210408133634.16815-1-david.plowman@raspberrypi.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH v2 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 --- 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;