[PATCH] libcamera: software_isp: Handle signals in the proper thread

Barnabás Pőcze pobrn at protonmail.com
Thu Dec 19 16:05:38 CET 2024


Hi


2024. december 19., csütörtök 11:31 keltezéssel, Milan Zamazal <mzamazal at redhat.com> írta:

> inputBufferReady ready signal in the simple pipeline is handled in the
> pipeline handler thread.  Similarly, outputBufferReady and ispStatsReady
> signals should be handled there too, everything should be called from
> the right thread and not block the callers.
> 
> Signed-off-by: Milan Zamazal <mzamazal at redhat.com>
> ---
>  src/libcamera/pipeline/simple/simple.cpp | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/src/libcamera/pipeline/simple/simple.cpp b/src/libcamera/pipeline/simple/simple.cpp
> index 8ac24e6e..280112f4 100644
> --- a/src/libcamera/pipeline/simple/simple.cpp
> +++ b/src/libcamera/pipeline/simple/simple.cpp
> @@ -548,12 +548,17 @@ int SimpleCameraData::init()
>  			 * bound explicitly to the pipe, which is bound to the pipeline
>  			 * handler thread. The function then simply forwards the call to
>  			 * conversionInputDone().
> +			 * Similarly for outputBufferReady and ispStatsReady signals.
>  			 */
>  			swIsp_->inputBufferReady.connect(pipe, [this](FrameBuffer *buffer) {
>  				this->conversionInputDone(buffer);
>  			});
> -			swIsp_->outputBufferReady.connect(this, &SimpleCameraData::conversionOutputDone);
> -			swIsp_->ispStatsReady.connect(this, &SimpleCameraData::ispStatsReady);
> +			swIsp_->outputBufferReady.connect(this, [this](FrameBuffer *buffer) {
> +				this->conversionOutputDone(buffer);
> +			});
> +			swIsp_->ispStatsReady.connect(this, [this](uint32_t frame, uint32_t bufferId) {
> +				this->ispStatsReady(frame, bufferId);
> +			});
> [...]

The object is still `this`, so I wouldn't expect any difference in behaviour. Is there?


Regards,
Barnabás Pőcze


More information about the libcamera-devel mailing list