summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
-rw-r--r--src/camera/veyeimx287m.cpp52
1 files changed, 40 insertions, 12 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp
index 6df5a3e..a97297d 100644
--- a/src/camera/veyeimx287m.cpp
+++ b/src/camera/veyeimx287m.cpp
@@ -602,16 +602,22 @@ void VeyeIMX287m::getFrameLoop(std::stop_token stopToken)
auto &src = *(Image::radxa_data_t *) m_buffers[bufferIdx].mem;
auto &dst = image->data;
Image::copy(dst, src);
+ // image->rotate();
+ // const auto pixels = image->sharedPixels();
get_elapsed_ns += t.nsecsElapsed();
}
++processedCounter;
- m_sync.freeRawBuffers.acquire();
- // TODO: check that queue cannot contain duplicate indices due to ioctl
- // TODO: separate copied images from raw buffers
- m_sync.rawBufferIndices.enqueue(bufferIdx);
- m_sync.usedRawBuffers.release();
+ m_sync.rawSemQueue.enqueue(bufferIdx);
+ // m_sync.freeRawBuffers.acquire();
+ // // TODO: check that queue cannot contain duplicate indices due to ioctl
+ // // TODO: separate copied images from raw buffers
+ // {
+ // std::lock_guard l{m_sync.rawBufferMtx};
+ // m_sync.rawBufferIndices.enqueue(bufferIdx);
+ // }
+ // m_sync.usedRawBuffers.release();
// image->rotate();
// const auto pixels = image->sharedPixels();
@@ -623,15 +629,25 @@ void VeyeIMX287m::rotateFrameLoop(std::stop_token stopToken)
while (!stopToken.stop_requested()) {
// std::cout << __func__ << std::endl;
- m_sync.usedRawBuffers.acquire();
- const auto idx = m_sync.rawBufferIndices.dequeue();
+ // m_sync.usedRawBuffers.acquire();
+ // size_t idx = std::numeric_limits<size_t>::max();
+ // {
+ // std::lock_guard l{m_sync.rawBufferMtx};
+ // idx = m_sync.rawBufferIndices.dequeue();
+ // }
+ const auto idx = m_sync.rawSemQueue.dequeue();
const auto &image = m_buffers[idx].image;
image->rotate();
// const auto pixels = image->sharedPixels();
- m_sync.freeRawBuffers.release();
+ m_lastProcessedIdx = idx;
+ // m_sync.freeRawBuffers.release();
+ m_sync.rotSemQueue.enqueue(idx);
// m_sync.freeRotatedBuffers.acquire();
- // m_sync.rotatedBufferIndices.enqueue(idx);
+ // {
+ // std::lock_guard l{m_sync.rotatedBufferMtx};
+ // m_sync.rotatedBufferIndices.enqueue(idx);
+ // }
// m_sync.usedRotatedBuffers.release();
}
}
@@ -639,11 +655,16 @@ void VeyeIMX287m::rotateFrameLoop(std::stop_token stopToken)
void VeyeIMX287m::calcPixelsLoop(std::stop_token stopToken)
{
while (!stopToken.stop_requested()) {
- m_sync.usedRotatedBuffers.acquire();
- const auto idx = m_sync.rotatedBufferIndices.dequeue();
+ // m_sync.usedRotatedBuffers.acquire();
+ // size_t idx{std::numeric_limits<size_t>::max()};
+ // {
+ // std::lock_guard l{m_sync.rotatedBufferMtx};
+ // idx = m_sync.rotatedBufferIndices.dequeue();
+ // }
+ const auto idx = m_sync.rotSemQueue.dequeue();
const auto &image = m_buffers[idx].image;
const auto pixels = image->sharedPixels();
- m_sync.freeRotatedBuffers.release();
+ // m_sync.freeRotatedBuffers.release();
}
}
@@ -756,6 +777,7 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
bool VeyeIMX287m::getImage(Image *image)
{
+ return false;
if (!image) {
std::cerr << __func__ << ": image is nullptr" << std::endl;
@@ -790,6 +812,12 @@ std::shared_ptr<Image> VeyeIMX287m::getImage()
{
std::shared_ptr<Image> result;
+ if (m_lastProcessedIdx != std::numeric_limits<size_t>::max()) {
+ return m_buffers[m_lastProcessedIdx].image;
+ }
+
+ return {};
+
size_t bufferIdx{};
if (!dequeueImageBuffer(bufferIdx)) {