[PATCH] libcamera: software_isp: Handle signals in the proper thread
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Fri Dec 20 00:22:19 CET 2024
Hi Milan,
On Thu, Dec 19, 2024 at 10:13:17PM +0100, Milan Zamazal wrote:
> Barnabás Pőcze writes:
> > 2024. december 19., csütörtök 11:31 keltezéssel, Milan Zamazal í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?
>
> Ah, right, should be `pipe', will fix it in v2.
I think it would be better to emit the signals from the camera manager
thread, instead of relying on the user of the soft ISP to perform
cross-thread synchronization. That will be less error-prone.
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list