summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/software_isp/software_isp.h1
-rw-r--r--src/libcamera/software_isp/software_isp.cpp24
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 */