[libcamera-devel] [PATCH v4 5/7] libcamera: delayed_controls: Fix off-by-one error in get()

Naushir Patuck naush at raspberrypi.com
Thu Mar 4 09:17:26 CET 2021


There was an off-by-one error in DelayedControls::get() when picking
controls from the queue to return back to the pipeline handler.
This is only noticeable as small oscillations in brightness when closely
viewing frame while AGC is running. The old StaggeredCtrl did not show
this error as the startup queuing mechanism has changed in
DelayedControls.

Fix this by indexing to the correct position in the queue.

Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
Reported-by: David Plowman <david.plowman at raspberrypi.com>
Fixes: 3d4b7b005911 ("libcamera: delayed_controls: Add helper for controls that apply with a delay")
Tested-by: David Plowman <david.plowman at raspberrypi.com>
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
---
 src/libcamera/delayed_controls.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/libcamera/delayed_controls.cpp b/src/libcamera/delayed_controls.cpp
index 5a05741c0285..138761c9852e 100644
--- a/src/libcamera/delayed_controls.cpp
+++ b/src/libcamera/delayed_controls.cpp
@@ -184,7 +184,7 @@ bool DelayedControls::push(const ControlList &controls)
  */
 ControlList DelayedControls::get(uint32_t sequence)
 {
-	uint32_t adjustedSeq = sequence - firstSequence_ + 1;
+	uint32_t adjustedSeq = sequence - firstSequence_;
 	unsigned int index = std::max<int>(0, adjustedSeq - maxDelay_);
 
 	ControlList out(device_->controls());
-- 
2.25.1



More information about the libcamera-devel mailing list