summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.h
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-11-29 19:55:00 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-11-29 19:55:00 +0100
commit1664027209ea3b8eb327b7755e4111577e66a2ee (patch)
treeb3eca983cda8443dff6427bf703fad4986ae2090 /src/camera/veyeimx287m.h
parentc657073f8ebe84505613b593db4a41f30f86c970 (diff)
1x2x2 no crashes
Diffstat (limited to 'src/camera/veyeimx287m.h')
-rw-r--r--src/camera/veyeimx287m.h36
1 files changed, 9 insertions, 27 deletions
diff --git a/src/camera/veyeimx287m.h b/src/camera/veyeimx287m.h
index a9311ba..b875bb7 100644
--- a/src/camera/veyeimx287m.h
+++ b/src/camera/veyeimx287m.h
@@ -92,7 +92,7 @@ private:
*/
std::optional<int64_t> m_previousFrameCounter{};
- static constexpr uint8_t BUFFER_COUNT{16};
+ static constexpr uint8_t BUFFER_COUNT{4};
// std::array<Image, BUFFER_COUNT> m_images;
/*!
@@ -105,35 +105,16 @@ private:
struct buffer
{
void *mem{nullptr};
- std::shared_ptr<Image> image{std::make_shared<Image>()};
+ // 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};
-
- 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{};
-
- // 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;
@@ -148,7 +129,8 @@ private:
// TODO: sync all loops somehow to guarantee frames order
std::jthread m_rotateThreads[2];
std::jthread m_calcPixelsThreads[2];
- size_t m_lastProcessedIdx{std::numeric_limits<size_t>::max()};
+ std::mutex m_lastImageMtx;
+ std::shared_ptr<Image> m_lastProcessedImage{};
std::shared_ptr<veye::imx287m::i2c> m_i2c;
std::shared_ptr<HttpServer> m_httpServer;