[v3,16/22] libcamera: software_isp: Move configure to worker thread
diff mbox series

Message ID 20251202133157.661407-17-bryan.odonoghue@linaro.org
State Superseded
Headers show
Series
  • GPUISP precursor series
Related show

Commit Message

Bryan O'Donoghue Dec. 2, 2025, 1:31 p.m. UTC
EGL requires both configure() and process() to operate on the same
thread. As preparation for that, move current CPU configure into the
WorkerThread with a ConnectionTypeBlocking invocation of
&DebayerCpu::configure.

Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 src/libcamera/software_isp/software_isp.cpp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

Comments

Milan Zamazal Dec. 3, 2025, 2:24 p.m. UTC | #1
Bryan O'Donoghue <bryan.odonoghue@linaro.org> writes:

> EGL requires both configure() and process() to operate on the same
> thread. As preparation for that, move current CPU configure into the
> WorkerThread with a ConnectionTypeBlocking invocation of
> &DebayerCpu::configure.
>
> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>

Reviewed-by: Milan Zamazal <mzamazal@redhat.com>

> ---
>  src/libcamera/software_isp/software_isp.cpp | 10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
> index afa4eb7a8..4f6792122 100644
> --- a/src/libcamera/software_isp/software_isp.cpp
> +++ b/src/libcamera/software_isp/software_isp.cpp
> @@ -267,7 +267,15 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
>  
>  	ispWorkerThread_.start();
>  
> -	return debayer_->configure(inputCfg, outputCfgs, ccmEnabled_);
> +	ret = debayer_->invokeMethod(&DebayerCpu::configure,
> +				     ConnectionTypeBlocking, inputCfg,
> +				     outputCfgs, ccmEnabled_);
> +	if (ret) {
> +		ispWorkerThread_.exit();
> +		ispWorkerThread_.wait();
> +	}
> +
> +	return ret;
>  }
>  
>  /**

Patch
diff mbox series

diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp
index afa4eb7a8..4f6792122 100644
--- a/src/libcamera/software_isp/software_isp.cpp
+++ b/src/libcamera/software_isp/software_isp.cpp
@@ -267,7 +267,15 @@  int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
 
 	ispWorkerThread_.start();
 
-	return debayer_->configure(inputCfg, outputCfgs, ccmEnabled_);
+	ret = debayer_->invokeMethod(&DebayerCpu::configure,
+				     ConnectionTypeBlocking, inputCfg,
+				     outputCfgs, ccmEnabled_);
+	if (ret) {
+		ispWorkerThread_.exit();
+		ispWorkerThread_.wait();
+	}
+
+	return ret;
 }
 
 /**