diff options
-rw-r--r-- | include/libcamera/internal/software_isp/software_isp.h | 1 | ||||
-rw-r--r-- | src/libcamera/software_isp/software_isp.cpp | 24 |
2 files changed, 10 insertions, 15 deletions
diff --git a/include/libcamera/internal/software_isp/software_isp.h b/include/libcamera/internal/software_isp/software_isp.h index 400a4dc5..133b545c 100644 --- a/include/libcamera/internal/software_isp/software_isp.h +++ b/include/libcamera/internal/software_isp/software_isp.h @@ -101,7 +101,6 @@ private: DmaBufAllocator dmaHeap_; std::unique_ptr<ipa::soft::IPAProxySoft> ipa_; - bool running_; std::deque<FrameBuffer *> queuedInputBuffers_; std::deque<FrameBuffer *> queuedOutputBuffers_; }; diff --git a/src/libcamera/software_isp/software_isp.cpp b/src/libcamera/software_isp/software_isp.cpp index 12d08078..a64e6b2c 100644 --- a/src/libcamera/software_isp/software_isp.cpp +++ b/src/libcamera/software_isp/software_isp.cpp @@ -14,6 +14,7 @@ #include <unistd.h> #include <libcamera/base/log.h> +#include <libcamera/base/thread.h> #include <libcamera/controls.h> #include <libcamera/formats.h> @@ -323,7 +324,6 @@ int SoftwareIsp::start() int ret = ipa_->start(); if (ret) return ret; - running_ = true; ispWorkerThread_.start(); return 0; @@ -340,7 +340,8 @@ void SoftwareIsp::stop() ispWorkerThread_.exit(); ispWorkerThread_.wait(); - running_ = false; + Thread::current()->dispatchMessages(Message::Type::InvokeMessage, this); + ipa_->stop(); for (auto buffer : queuedOutputBuffers_) { @@ -383,26 +384,21 @@ void SoftwareIsp::setSensorCtrls(const ControlList &sensorControls) void SoftwareIsp::statsReady(uint32_t frame, uint32_t bufferId) { - if (running_) - ispStatsReady.emit(frame, bufferId); + ispStatsReady.emit(frame, bufferId); } void SoftwareIsp::inputReady(FrameBuffer *input) { - if (running_) { - ASSERT(queuedInputBuffers_.front() == input); - queuedInputBuffers_.pop_front(); - inputBufferReady.emit(input); - } + ASSERT(queuedInputBuffers_.front() == input); + queuedInputBuffers_.pop_front(); + inputBufferReady.emit(input); } void SoftwareIsp::outputReady(FrameBuffer *output) { - if (running_) { - ASSERT(queuedOutputBuffers_.front() == output); - queuedOutputBuffers_.pop_front(); - outputBufferReady.emit(output); - } + ASSERT(queuedOutputBuffers_.front() == output); + queuedOutputBuffers_.pop_front(); + outputBufferReady.emit(output); } } /* namespace libcamera */ |