libcamera: software_isp: Move configure to worker thread

OpenGL 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.

Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
This commit is contained in:
Bryan O'Donoghue 2024-12-18 00:59:39 +00:00
parent 87ccbc69ca
commit 355fd41dfd

View file

@ -263,7 +263,15 @@ int SoftwareIsp::configure(const StreamConfiguration &inputCfg,
debayer_->moveToThread(&ispWorkerThread_); debayer_->moveToThread(&ispWorkerThread_);
ispWorkerThread_.start(); ispWorkerThread_.start();
return debayer_->configure(inputCfg, outputCfgs, ccmEnabled_); ret = debayer_->invokeMethod(&Debayer::configure,
ConnectionTypeBlocking, inputCfg,
outputCfgs, ccmEnabled_);
if (ret) {
ispWorkerThread_.exit();
ispWorkerThread_.wait();
}
return ret;
} }
/** /**
@ -386,7 +394,7 @@ void SoftwareIsp::stop()
void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output) void SoftwareIsp::process(uint32_t frame, FrameBuffer *input, FrameBuffer *output)
{ {
ipa_->computeParams(frame); ipa_->computeParams(frame);
debayer_->invokeMethod(&DebayerCpu::process, debayer_->invokeMethod(&Debayer::process,
ConnectionTypeQueued, frame, input, output, debayerParams_); ConnectionTypeQueued, frame, input, output, debayerParams_);
} }