summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2022-06-29 09:57:22 +0100
committerKieran Bingham <kieran.bingham@ideasonboard.com>2022-06-29 12:12:07 +0100
commit8acfb8494c7575161b88dfa982819ecca2c79b3a (patch)
tree8355e44b8bf807f7584fab9e9a1c94bae90dea1b
parent95151dd06feb1574090e13bdcaa69be25498dee9 (diff)
ipa: raspberrypi: Use std::optional in DeviceStatus
Switch the aperture, lens_position, and flash_intensity fields in the DeviceStatus structure to use std::optional instead of using invalid default values. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: David Plowman <david.plowman@raspberrypi.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--src/ipa/raspberrypi/controller/device_status.cpp14
-rw-r--r--src/ipa/raspberrypi/controller/device_status.h9
-rw-r--r--src/ipa/raspberrypi/controller/rpi/lux.cpp4
3 files changed, 15 insertions, 12 deletions
diff --git a/src/ipa/raspberrypi/controller/device_status.cpp b/src/ipa/raspberrypi/controller/device_status.cpp
index 05897fc1..a389c40d 100644
--- a/src/ipa/raspberrypi/controller/device_status.cpp
+++ b/src/ipa/raspberrypi/controller/device_status.cpp
@@ -12,10 +12,16 @@ std::ostream &operator<<(std::ostream &out, const DeviceStatus &d)
{
out << "Exposure: " << d.shutter_speed
<< " Frame length: " << d.frame_length
- << " Gain: " << d.analogue_gain
- << " Aperture: " << d.aperture
- << " Lens: " << d.lens_position
- << " Flash: " << d.flash_intensity;
+ << " Gain: " << d.analogue_gain;
+
+ if (d.aperture)
+ out << " Aperture: " << *d.aperture;
+
+ if (d.lens_position)
+ out << " Lens: " << *d.lens_position;
+
+ if (d.flash_intensity)
+ out << " Flash: " << *d.flash_intensity;
if (d.sensor_temperature)
out << " Temperature: " << *d.sensor_temperature;
diff --git a/src/ipa/raspberrypi/controller/device_status.h b/src/ipa/raspberrypi/controller/device_status.h
index eca3bf4b..b33f0d09 100644
--- a/src/ipa/raspberrypi/controller/device_status.h
+++ b/src/ipa/raspberrypi/controller/device_status.h
@@ -19,8 +19,7 @@
struct DeviceStatus {
DeviceStatus()
: shutter_speed(std::chrono::seconds(0)), frame_length(0),
- analogue_gain(0.0), lens_position(0.0), aperture(0.0),
- flash_intensity(0.0)
+ analogue_gain(0.0)
{
}
@@ -32,11 +31,11 @@ struct DeviceStatus {
uint32_t frame_length;
double analogue_gain;
/* 1.0/distance-in-metres, or 0 if unknown */
- double lens_position;
+ std::optional<double> lens_position;
/* 1/f so that brightness quadruples when this doubles, or 0 if unknown */
- double aperture;
+ std::optional<double> aperture;
/* proportional to brightness with 0 = no flash, 1 = maximum flash */
- double flash_intensity;
+ std::optional<double> flash_intensity;
/* Sensor reported temperature value (in degrees) */
std::optional<double> sensor_temperature;
};
diff --git a/src/ipa/raspberrypi/controller/rpi/lux.cpp b/src/ipa/raspberrypi/controller/rpi/lux.cpp
index f77e9140..4d145b6f 100644
--- a/src/ipa/raspberrypi/controller/rpi/lux.cpp
+++ b/src/ipa/raspberrypi/controller/rpi/lux.cpp
@@ -63,9 +63,7 @@ void Lux::Process(StatisticsPtr &stats, Metadata *image_metadata)
DeviceStatus device_status;
if (image_metadata->Get("device.status", device_status) == 0) {
double current_gain = device_status.analogue_gain;
- double current_aperture = device_status.aperture;
- if (current_aperture == 0)
- current_aperture = current_aperture_;
+ double current_aperture = device_status.aperture.value_or(current_aperture_);
uint64_t sum = 0;
uint32_t num = 0;
uint32_t *bin = stats->hist[0].g_hist;