diff options
Diffstat (limited to 'src/camera/veyeimx287m.h')
| -rw-r--r-- | src/camera/veyeimx287m.h | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/src/camera/veyeimx287m.h b/src/camera/veyeimx287m.h index 2b5c28c..e4c02b0 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 { @@ -106,42 +107,30 @@ private: void *mem{nullptr}; std::shared_ptr<Image> image{std::make_shared<Image>()}; }; - std::vector<buffer> m_buffers; + std::vector<buffer> m_rawBuffers; struct Semaphore { - Semaphore() - { - rawBufferIndices.reserve(BUFFER_COUNT); - rotatedBufferIndices.reserve(BUFFER_COUNT); - } - const uint8_t maxSize{BUFFER_COUNT}; - - QQueue<size_t> rawBufferIndices; - QSemaphore freeRawBuffers{BUFFER_COUNT}; - QSemaphore usedRawBuffers{}; - - QQueue<size_t> rotatedBufferIndices; - QSemaphore freeRotatedBuffers{BUFFER_COUNT}; - QSemaphore usedRotatedBuffers{}; - - // uint8_t bufferIdx{std::numeric_limits<decltype(bufferIdx)>::max()}; - // std::binary_semaphore main2calc{0}; - // std::binary_semaphore calc2main{0}; + // sem_queue<std::shared_ptr<Image>, BUFFER_COUNT> rawSemQueue; + // sem_queue<size_t, BUFFER_COUNT> rawSemQueue; + // sem_queue<std::shared_ptr<Image>, BUFFER_COUNT> rotSemQueue; + // sem_queue<size_t, BUFFER_COUNT> rotSemQueue; } m_sync; std::mutex m_camMtx; /*! * \brief m_buffersQueue - queue of buffers which require extracting pixels */ - std::queue<std::remove_const<decltype(BUFFER_COUNT)>> m_buffersQueue; + // std::queue<std::remove_const<decltype(BUFFER_COUNT)>> m_buffersQueue; std::jthread m_streamThread; std::jthread m_getThreads[1]; // 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_rotateThreads[0]; + std::jthread m_calcPixelsThreads[0]; + std::mutex m_lastImageMtx; + std::shared_ptr<Image> m_lastProcessedImage{}; std::shared_ptr<veye::imx287m::i2c> m_i2c; std::shared_ptr<HttpServer> m_httpServer; |
