summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaushir Patuck <naush@raspberrypi.com>2021-03-04 08:17:24 +0000
committerKieran Bingham <kieran.bingham@ideasonboard.com>2021-03-12 14:12:55 +0000
commitf1569db3fb784095bc712c8ebff3a246a13ee5af (patch)
tree443493a190c43edbee9b0449c6aa30d8ee2f3aa7
parente363eb0b6b3ef694d3e97a5bfb31a2b407959a64 (diff)
libcamera: delayed_controls: Remove unneeded write when starting up
On DelayedControls::reset(), the values retrieved from the sensor device were added to the queues with the updated flag set to true. This would cause the helper to write out the value to the device again on the first DelayedControls::applyControls() call. This is unnecessary, as the controls written are identical to what is stored in the device driver. Fix this by explicitly setting the update flag to false in DelayedControls::reset() when adding the controls to the queue. Additionally, use the Info() constructor when adding items to the queue for consistency. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> Fixes: 3d4b7b005911 ("libcamera: delayed_controls: Add helper for controls that apply with a delay") Tested-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Tested-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
-rw-r--r--include/libcamera/internal/delayed_controls.h4
-rw-r--r--src/libcamera/delayed_controls.cpp9
2 files changed, 8 insertions, 5 deletions
diff --git a/include/libcamera/internal/delayed_controls.h b/include/libcamera/internal/delayed_controls.h
index 564d9f2e..2a6a912b 100644
--- a/include/libcamera/internal/delayed_controls.h
+++ b/include/libcamera/internal/delayed_controls.h
@@ -43,8 +43,8 @@ private:
{
}
- Info(const ControlValue &v)
- : ControlValue(v), updated(true)
+ Info(const ControlValue &v, bool updated_ = true)
+ : ControlValue(v), updated(updated_)
{
}
diff --git a/src/libcamera/delayed_controls.cpp b/src/libcamera/delayed_controls.cpp
index fb9e6c42..a2af4a29 100644
--- a/src/libcamera/delayed_controls.cpp
+++ b/src/libcamera/delayed_controls.cpp
@@ -111,7 +111,11 @@ void DelayedControls::reset()
values_.clear();
for (const auto &ctrl : controls) {
const ControlId *id = device_->controls().idmap().at(ctrl.first);
- values_[id][0] = Info(ctrl.second);
+ /*
+ * Do not mark this control value as updated, it does not need
+ * to be written to to device on startup.
+ */
+ values_[id][0] = Info(ctrl.second, false);
}
}
@@ -150,8 +154,7 @@ bool DelayedControls::push(const ControlList &controls)
Info &info = values_[id][queueCount_];
- info = control.second;
- info.updated = true;
+ info = Info(control.second);
LOG(DelayedControls, Debug)
<< "Queuing " << id->name()