[libcamera-devel] [PATCH v4 3/7] libcamera: delayed_controls: Remove unneeded write when starting up

paul.elder at ideasonboard.com paul.elder at ideasonboard.com
Tue Mar 9 10:50:16 CET 2021


Hi Naush,

On Thu, Mar 04, 2021 at 08:17:24AM +0000, Naushir Patuck wrote:
> 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 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>

> ---
>  include/libcamera/internal/delayed_controls.h | 4 ++--
>  src/libcamera/delayed_controls.cpp            | 9 ++++++---
>  2 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/include/libcamera/internal/delayed_controls.h b/include/libcamera/internal/delayed_controls.h
> index 564d9f2e2440..2a6a912bde10 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 3ed1dfebd035..f6d761d1cc41 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()
> -- 
> 2.25.1
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel at lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel


More information about the libcamera-devel mailing list