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.cpp163
1 files changed, 82 insertions, 81 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp
index 54bb47e..c36caaa 100644
--- a/src/camera/veyeimx287m.cpp
+++ b/src/camera/veyeimx287m.cpp
@@ -572,30 +572,26 @@ void VeyeIMX287m::getFramesLoop(std::stop_token stopToken)
const uint8_t i = threadIdx % futures.size();
futures[i].waitForFinished();
+ m_images[i].reset();
{
t.start();
const auto &src = *(Image::radxa_data_t *) m_rawBuffers[bufferIdx].mem;
- // const auto image = std::make_shared<Image>();
- // const auto &image = m_rawBuffers[i].image;
- auto &dst = m_rawBuffers[i].image->data;
+ auto &dst = m_images[i].data;
Image::copy(dst, src);
- // image->rotate();
- // const auto pixels = image->sharedPixels();
-
get_elapsed_ns += t.nsecsElapsed();
- // m_sync.rawSemQueue.enqueue(image);
}
- futures[i] = QtConcurrent::run(&threadPool,
- [this, i]() {
- const auto image = m_rawBuffers[i].image;
- image->rotate();
- const auto pixels = image->sharedPixels();
- return i;
- }) /*.then(&threadPool, [this](const uint8_t i) {
- const auto image = m_rawBuffers[i].image;
- const auto pixels = image->sharedPixels();
+ futures[i] = QtConcurrent::run(/*&threadPool, */ [this, i]() {
+ auto &image = m_images[i];
+ image.rotate();
+ // const auto pixels = image.sharedPixels();
+ const auto &pixels = image.getPixels();
+ m_lastImageIdx = i;
+ return i;
+ }) /*.then([this](const uint8_t i) {
+ auto &image = m_images[i];
+ const auto pixels = image.sharedPixels();
return i;
})*/
;
@@ -712,83 +708,88 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
return true;
}
-bool VeyeIMX287m::getImage(Image *image)
-{
- return false;
- // if (!image) {
- // std::cerr << __func__ << ": image is nullptr" << std::endl;
+// bool VeyeIMX287m::getImage(Image *image)
+// {
+// return false;
+// if (!image) {
+// std::cerr << __func__ << ": image is nullptr" << std::endl;
- // return false;
- // }
+// return false;
+// }
- // size_t bufferIdx{};
+// size_t bufferIdx{};
- // if (!dequeueImageBuffer(bufferIdx)) {
- // return false;
- // }
+// if (!dequeueImageBuffer(bufferIdx)) {
+// return false;
+// }
- // // TODO: remove this bullshit. return ptr to image or copy image metainfo
- // // only, then copy data
- // // *image = std::move(m_images[bufferIdx]);
- // *image = std::move(*m_rawBuffers[bufferIdx].image);
- // {
- // QElapsedTimer t;
- // t.start();
- // std::lock_guard lock{m_imageMutexes[bufferIdx]};
+// // TODO: remove this bullshit. return ptr to image or copy image metainfo
+// // only, then copy data
+// // *image = std::move(m_images[bufferIdx]);
+// *image = std::move(*m_rawBuffers[bufferIdx].image);
+// {
+// QElapsedTimer t;
+// t.start();
+// std::lock_guard lock{m_imageMutexes[bufferIdx]};
- // auto &src = *(Image::radxa_data_t *) m_rawBuffers[bufferIdx].mem;
- // auto &dst = image->data;
- // Image::copy(dst, src);
- // get_elapsed_ns += t.nsecsElapsed();
- // }
+// auto &src = *(Image::radxa_data_t *) m_rawBuffers[bufferIdx].mem;
+// auto &dst = image->data;
+// Image::copy(dst, src);
+// get_elapsed_ns += t.nsecsElapsed();
+// }
- // return true;
-}
+// return true;
+// }
-std::shared_ptr<Image> VeyeIMX287m::getImage()
+Image *VeyeIMX287m::getImage()
{
- std::shared_ptr<Image> result;
- // std::shared_ptr<Image> result = std::make_shared<Image>();
+ return m_lastImageIdx.has_value() ? &m_images[*m_lastImageIdx] : nullptr;
+}
- // if (m_lastProcessedImage != std::numeric_limits<size_t>::max()) {
- // if (m_lastProcessedImage) {
- // return m_rawBuffers[m_lastProcessedImage].image;
- // }
+// std::shared_ptr<Image> VeyeIMX287m::getImage()
+// {
+// std::shared_ptr<Image> result;
+// std::shared_ptr<Image> result = std::make_shared<Image>();
- {
- std::lock_guard l{m_lastImageMtx};
- // result = m_lastProcessedImage;
- // std::swap(result, m_lastProcessedImage);
- }
- // return {};
- // {
- // return m_lastProcessedImage;
- // result = m_lastProcessedImage;
- // }
- return result;
+// if (m_lastProcessedImage != std::numeric_limits<size_t>::max()) {
+// if (m_lastProcessedImage) {
+// return m_rawBuffers[m_lastProcessedImage].image;
+// }
- // size_t bufferIdx{};
+// {
+// std::lock_guard l{m_lastImageMtx};
+// result = m_lastProcessedImage;
+// std::swap(result, m_lastProcessedImage);
+// }
+// return {};
+// {
+// return m_lastProcessedImage;
+// result = m_lastProcessedImage;
+// }
+// return result;
- // if (!dequeueImageBuffer(bufferIdx)) {
- // std::cerr << "cannot dequeue" << std::endl;
- // return {};
- // }
+// size_t bufferIdx{};
- // // TODO: remove this bullshit. return ptr to image or copy image metainfo
- // // only, then copy data
- // // *image = std::move(m_images[bufferIdx]);
- // // result = m_rawBuffers[bufferIdx].image;
- // {
- // QElapsedTimer t;
- // t.start();
- // std::lock_guard lock{m_imageMutexes[bufferIdx]};
+// if (!dequeueImageBuffer(bufferIdx)) {
+// std::cerr << "cannot dequeue" << std::endl;
+// return {};
+// }
- // auto &src = *(Image::radxa_data_t *) m_rawBuffers[bufferIdx].mem;
- // auto &dst = result->data;
- // Image::copy(dst, src);
- // get_elapsed_ns += t.nsecsElapsed();
- // }
- // // std::cerr << "ok" << std::endl;
+// // TODO: remove this bullshit. return ptr to image or copy image metainfo
+// // only, then copy data
+// // *image = std::move(m_images[bufferIdx]);
+// // result = m_rawBuffers[bufferIdx].image;
+// {
+// QElapsedTimer t;
+// t.start();
+// std::lock_guard lock{m_imageMutexes[bufferIdx]};
- // return result;
-}
+// auto &src = *(Image::radxa_data_t *) m_rawBuffers[bufferIdx].mem;
+// auto &dst = result->data;
+// Image::copy(dst, src);
+// get_elapsed_ns += t.nsecsElapsed();
+// }
+// // std::cerr << "ok" << std::endl;
+
+// return result;
+// }