diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-11-29 23:59:50 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-11-29 23:59:50 +0100 |
| commit | 73f978f1e1e42ec2b7445dd77ec35a58ff08cf20 (patch) | |
| tree | ecbaa33787212180156e84813473c16b6977b329 /src/camera/veyeimx287m.h | |
| parent | 5edbc081d61d47e5938a76fcb201aed4b148f1b4 (diff) | |
| parent | 1664027209ea3b8eb327b7755e4111577e66a2ee (diff) | |
merge and use 16 threadsradxa_imx287
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; |
