diff options
Diffstat (limited to 'src/camera/veyeimx287m.h')
| -rw-r--r-- | src/camera/veyeimx287m.h | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/camera/veyeimx287m.h b/src/camera/veyeimx287m.h index 2b5c28c..a9311ba 100644 --- a/src/camera/veyeimx287m.h +++ b/src/camera/veyeimx287m.h @@ -15,6 +15,7 @@ #include "constants.h" #include "icamera.h" #include "image.h" +#include "utils/sem_queue.h" namespace veye { namespace imx287m { @@ -112,15 +113,20 @@ private: { Semaphore() { - rawBufferIndices.reserve(BUFFER_COUNT); + // rawBufferIndices.reserve(BUFFER_COUNT); rotatedBufferIndices.reserve(BUFFER_COUNT); } const uint8_t maxSize{BUFFER_COUNT}; - QQueue<size_t> rawBufferIndices; - QSemaphore freeRawBuffers{BUFFER_COUNT}; - QSemaphore usedRawBuffers{}; + sem_queue<size_t, BUFFER_COUNT> rawSemQueue; + sem_queue<size_t, BUFFER_COUNT> rotSemQueue; + // std::mutex rawBufferMtx; + // QQueue<size_t> rawBufferIndices; + // QSemaphore freeRawBuffers{BUFFER_COUNT}; + // QSemaphore usedRawBuffers{}; + + std::mutex rotatedBufferMtx; QQueue<size_t> rotatedBufferIndices; QSemaphore freeRotatedBuffers{BUFFER_COUNT}; QSemaphore usedRotatedBuffers{}; @@ -141,7 +147,8 @@ private: // std::jthread m_getThreads[4]; // TODO: sync all loops somehow to guarantee frames order std::jthread m_rotateThreads[2]; - std::jthread m_calcPixelsThreads[1]; + std::jthread m_calcPixelsThreads[2]; + size_t m_lastProcessedIdx{std::numeric_limits<size_t>::max()}; std::shared_ptr<veye::imx287m::i2c> m_i2c; std::shared_ptr<HttpServer> m_httpServer; |
