diff options
author | David Plowman <david.plowman@raspberrypi.com> | 2020-06-18 12:12:35 +0100 |
---|---|---|
committer | Laurent Pinchart <laurent.pinchart@ideasonboard.com> | 2020-06-22 07:03:25 +0300 |
commit | ff291b3c15ba250fb05236a774771fdf54554ff7 (patch) | |
tree | daf75a78d16df950e5f3ab238fcaded047144dae | |
parent | 1023107b6405266d480ce9c08cd82a30449a505b (diff) |
libcamera: ipa: raspberrypi: Allow SwitchMode method to return camera settings
This commit adds a Metadata parameter to the SwitchMode method
enabling it to return camera and other settings to the caller
(usually the configure method, just after the camera mode has been
selected).
In future this will allow the Raspberry Pi IPAs to take those settings
(such as exposure and analogue gain) and program them directly into
the camera or ISP before the camera is even started.
Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
-rw-r--r-- | src/ipa/raspberrypi/controller/algorithm.cpp | 3 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/algorithm.hpp | 2 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/controller.cpp | 4 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/controller.hpp | 2 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/alsc.cpp | 4 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/alsc.hpp | 2 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/noise.cpp | 4 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/noise.hpp | 2 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/sharpen.cpp | 4 | ||||
-rw-r--r-- | src/ipa/raspberrypi/controller/rpi/sharpen.hpp | 2 | ||||
-rw-r--r-- | src/ipa/raspberrypi/raspberrypi.cpp | 3 |
11 files changed, 20 insertions, 12 deletions
diff --git a/src/ipa/raspberrypi/controller/algorithm.cpp b/src/ipa/raspberrypi/controller/algorithm.cpp index 9bd3df86..55cb2012 100644 --- a/src/ipa/raspberrypi/controller/algorithm.cpp +++ b/src/ipa/raspberrypi/controller/algorithm.cpp @@ -16,9 +16,10 @@ void Algorithm::Read(boost::property_tree::ptree const ¶ms) void Algorithm::Initialise() {} -void Algorithm::SwitchMode(CameraMode const &camera_mode) +void Algorithm::SwitchMode(CameraMode const &camera_mode, Metadata *metadata) { (void)camera_mode; + (void)metadata; } void Algorithm::Prepare(Metadata *image_metadata) diff --git a/src/ipa/raspberrypi/controller/algorithm.hpp b/src/ipa/raspberrypi/controller/algorithm.hpp index b82c1841..187c50c6 100644 --- a/src/ipa/raspberrypi/controller/algorithm.hpp +++ b/src/ipa/raspberrypi/controller/algorithm.hpp @@ -37,7 +37,7 @@ public: virtual void Resume() { paused_ = false; } virtual void Read(boost::property_tree::ptree const ¶ms); virtual void Initialise(); - virtual void SwitchMode(CameraMode const &camera_mode); + virtual void SwitchMode(CameraMode const &camera_mode, Metadata *metadata); virtual void Prepare(Metadata *image_metadata); virtual void Process(StatisticsPtr &stats, Metadata *image_metadata); Metadata &GetGlobalMetadata() const diff --git a/src/ipa/raspberrypi/controller/controller.cpp b/src/ipa/raspberrypi/controller/controller.cpp index 20dd4c78..7c4b04fe 100644 --- a/src/ipa/raspberrypi/controller/controller.cpp +++ b/src/ipa/raspberrypi/controller/controller.cpp @@ -56,11 +56,11 @@ void Controller::Initialise() RPI_LOG("Controller finished"); } -void Controller::SwitchMode(CameraMode const &camera_mode) +void Controller::SwitchMode(CameraMode const &camera_mode, Metadata *metadata) { RPI_LOG("Controller starting"); for (auto &algo : algorithms_) - algo->SwitchMode(camera_mode); + algo->SwitchMode(camera_mode, metadata); switch_mode_called_ = true; RPI_LOG("Controller finished"); } diff --git a/src/ipa/raspberrypi/controller/controller.hpp b/src/ipa/raspberrypi/controller/controller.hpp index d6853866..6ba9412b 100644 --- a/src/ipa/raspberrypi/controller/controller.hpp +++ b/src/ipa/raspberrypi/controller/controller.hpp @@ -39,7 +39,7 @@ public: Algorithm *CreateAlgorithm(char const *name); void Read(char const *filename); void Initialise(); - void SwitchMode(CameraMode const &camera_mode); + void SwitchMode(CameraMode const &camera_mode, Metadata *metadata); void Prepare(Metadata *image_metadata); void Process(StatisticsPtr stats, Metadata *image_metadata); Metadata &GetGlobalMetadata(); diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.cpp b/src/ipa/raspberrypi/controller/rpi/alsc.cpp index 821a0ca3..76e2f04b 100644 --- a/src/ipa/raspberrypi/controller/rpi/alsc.cpp +++ b/src/ipa/raspberrypi/controller/rpi/alsc.cpp @@ -173,8 +173,10 @@ void Alsc::Initialise() lambda_r_[i] = lambda_b_[i] = 1.0; } -void Alsc::SwitchMode(CameraMode const &camera_mode) +void Alsc::SwitchMode(CameraMode const &camera_mode, Metadata *metadata) { + (void)metadata; + // There's a bit of a question what we should do if the "crop" of the // camera mode has changed. Any calculation currently in flight would // not be useful to the new mode, so arguably we should abort it, and diff --git a/src/ipa/raspberrypi/controller/rpi/alsc.hpp b/src/ipa/raspberrypi/controller/rpi/alsc.hpp index c8ed3d21..38062577 100644 --- a/src/ipa/raspberrypi/controller/rpi/alsc.hpp +++ b/src/ipa/raspberrypi/controller/rpi/alsc.hpp @@ -50,7 +50,7 @@ public: ~Alsc(); char const *Name() const override; void Initialise() override; - void SwitchMode(CameraMode const &camera_mode) override; + void SwitchMode(CameraMode const &camera_mode, Metadata *metadata) override; void Read(boost::property_tree::ptree const ¶ms) override; void Prepare(Metadata *image_metadata) override; void Process(StatisticsPtr &stats, Metadata *image_metadata) override; diff --git a/src/ipa/raspberrypi/controller/rpi/noise.cpp b/src/ipa/raspberrypi/controller/rpi/noise.cpp index 2209d791..2cafde3a 100644 --- a/src/ipa/raspberrypi/controller/rpi/noise.cpp +++ b/src/ipa/raspberrypi/controller/rpi/noise.cpp @@ -27,8 +27,10 @@ char const *Noise::Name() const return NAME; } -void Noise::SwitchMode(CameraMode const &camera_mode) +void Noise::SwitchMode(CameraMode const &camera_mode, Metadata *metadata) { + (void)metadata; + // For example, we would expect a 2x2 binned mode to have a "noise // factor" of sqrt(2x2) = 2. (can't be less than one, right?) mode_factor_ = std::max(1.0, camera_mode.noise_factor); diff --git a/src/ipa/raspberrypi/controller/rpi/noise.hpp b/src/ipa/raspberrypi/controller/rpi/noise.hpp index 51d46a3d..25bf1885 100644 --- a/src/ipa/raspberrypi/controller/rpi/noise.hpp +++ b/src/ipa/raspberrypi/controller/rpi/noise.hpp @@ -18,7 +18,7 @@ class Noise : public Algorithm public: Noise(Controller *controller); char const *Name() const override; - void SwitchMode(CameraMode const &camera_mode) override; + void SwitchMode(CameraMode const &camera_mode, Metadata *metadata) override; void Read(boost::property_tree::ptree const ¶ms) override; void Prepare(Metadata *image_metadata) override; diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp b/src/ipa/raspberrypi/controller/rpi/sharpen.cpp index 1f07bb62..086952fd 100644 --- a/src/ipa/raspberrypi/controller/rpi/sharpen.cpp +++ b/src/ipa/raspberrypi/controller/rpi/sharpen.cpp @@ -26,8 +26,10 @@ char const *Sharpen::Name() const return NAME; } -void Sharpen::SwitchMode(CameraMode const &camera_mode) +void Sharpen::SwitchMode(CameraMode const &camera_mode, Metadata *metadata) { + (void)metadata; + // can't be less than one, right? mode_factor_ = std::max(1.0, camera_mode.noise_factor); } diff --git a/src/ipa/raspberrypi/controller/rpi/sharpen.hpp b/src/ipa/raspberrypi/controller/rpi/sharpen.hpp index 3b0d6801..f871aa65 100644 --- a/src/ipa/raspberrypi/controller/rpi/sharpen.hpp +++ b/src/ipa/raspberrypi/controller/rpi/sharpen.hpp @@ -18,7 +18,7 @@ class Sharpen : public Algorithm public: Sharpen(Controller *controller); char const *Name() const override; - void SwitchMode(CameraMode const &camera_mode) override; + void SwitchMode(CameraMode const &camera_mode, Metadata *metadata) override; void Read(boost::property_tree::ptree const ¶ms) override; void Prepare(Metadata *image_metadata) override; diff --git a/src/ipa/raspberrypi/raspberrypi.cpp b/src/ipa/raspberrypi/raspberrypi.cpp index 9669f212..d6fd3df3 100644 --- a/src/ipa/raspberrypi/raspberrypi.cpp +++ b/src/ipa/raspberrypi/raspberrypi.cpp @@ -267,7 +267,8 @@ void IPARPi::configure(const CameraSensorInfo &sensorInfo, queueFrameAction.emit(0, op); } - controller_.SwitchMode(mode_); + RPi::Metadata metadata; + controller_.SwitchMode(mode_, &metadata); lastMode_ = mode_; } |