summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/camera/veyeimx287m.h')
-rw-r--r--src/camera/veyeimx287m.h33
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;