summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-11-14 11:16:23 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-11-14 11:16:23 +0100
commit921b118472da6c9d4f4d1b76549b4c3672926925 (patch)
treecb63abafbe1e4307979df7680a4dba0f1523e605 /src/camera/veyeimx287m.cpp
parent3396ea3e7cf5a0def0ea720bcb863b374fd1cd0e (diff)
cleanup, add comments
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
-rw-r--r--src/camera/veyeimx287m.cpp94
1 files changed, 43 insertions, 51 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp
index 16ab344..3f3a9e6 100644
--- a/src/camera/veyeimx287m.cpp
+++ b/src/camera/veyeimx287m.cpp
@@ -16,7 +16,11 @@
#include <QElapsedTimer>
+<<<<<<< Updated upstream
// orpheus
+=======
+#include "camera/veye_i2c.h"
+>>>>>>> Stashed changes
#include "constants.h"
#include "httpservice.h"
#include "imagealgos.h"
@@ -316,8 +320,31 @@ bool VeyeIMX287m::init()
return true;
}
+bool VeyeIMX287m::setExposureTime(const std::chrono::microseconds us)
+{
+ const std::string i2c_dev{"/dev/i2c-2"};
+ const auto address = 0x3b;
+ const auto metime_reg = 0xc10;
+ const auto val = us.count();
+
+ const int fd = open(i2c_dev.c_str(), O_RDWR);
+
+ if (!fd) {
+ std::cerr << "cannot open i2c dev: " << i2c_dev << ", errno: " << errno << " ("
+ << strerror(errno) << ")" << std::endl;
+ return false;
+ }
+
+ return true;
+}
+
bool VeyeIMX287m::setExposureTimeUs(int valueUs)
{
+ std::cout << "AAAAAAAAAAAAAAAAAAAAAAAAAAAAA: " << __func__ << ": " << valueUs << std::endl;
+ const std::string i2c_dev{"/dev/i2c-2"};
+ const auto address = 0x3b;
+ const auto metime_reg = 0xc10;
+
//return true;
std::cout << __func__ << ": " << V4L2_CID_EXPOSURE << " - " << valueUs << std::endl
<< std::flush;
@@ -373,6 +400,8 @@ bool VeyeIMX287m::setSomething(int value)
bool VeyeIMX287m::setCamParam(unsigned int v4l2controlId, int value)
{
+ veye::imx287m::test(value);
+
std::cout << "radxa: skip setCamParam" << std::endl;
return true;
@@ -625,6 +654,7 @@ bool VeyeIMX287m::initCam()
return true;
}
+<<<<<<< Updated upstream
bool VeyeIMX287m::initHttpServer()
{
m_httpServer = std::make_shared<HttpServer>(this);
@@ -647,47 +677,30 @@ void VeyeIMX287m::dequeueFrameLoop(std::stop_token stopToken)
// std::cout << "VeyeIMX287m: stream interruption requested" << std::endl;
}
+=======
+>>>>>>> Stashed changes
void VeyeIMX287m::calcFrameLoop(std::stop_token stopToken)
{
QElapsedTimer t;
while (!stopToken.stop_requested()) {
- size_t bufferIdx{};
+ size_t bufferIdx{std::numeric_limits<size_t>::max()};
if (!dequeueImageBuffer(bufferIdx)) {
- std::cout << "AAAAAAAAAAAAAAAAAA" << std::endl;
continue;
}
- // std::lock_guard img_lock{m_imageMutexes[bufferIdx]};
+ std::lock_guard lock{m_imageMutexes[bufferIdx]};
+
auto &image = m_images[bufferIdx];
{
t.start();
- // auto &src = *(Image::data_t *) m_videoBuffers[bufferIdx];
+
auto &src = *(Image::radxa_data_t *) m_videoBuffers[bufferIdx];
auto &dst = image.data;
Image::copy(dst, src);
- // #pragma omp parallel for num_threads(4)
- // for (size_t i = 0; i < img_height; ++i) {
- // memcpy(dst[i].data(), src[i].data(), img_width);
- // }
-
- // for (std::tuple<Image::row_t, Image::row_t> dst_src : std::views::zip())
-
- // auto &dst = *(Image::data_t *) m_videoBuffers[bufferIdx];
- // std::transform(std::execution::unseq,
- // src.begin(),
- // src.end(),
- // dst.begin(),
- // src.begin(),
- // [](auto &srcRow, auto &dstRow) -> Image::row_t {
- // // memcpy(dstRow.data(), srcRow.data(), img_width);
- // return dstRow;
- // // return Image::row_t(dst.begin(), dst.begin() + img_width);
- // });
- // memcpy(&image.data, m_videoBuffers[bufferIdx], radxa_raw_img_size);
get_elapsed_ns += t.nsecsElapsed();
}
@@ -756,26 +769,17 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
buf.length = VIDEO_MAX_PLANES;
buf.m.planes = planes;
static uint16_t requestIdx{0};
- // buffer.index = BUFFER_COUNT;
- const auto tmpIdx = requestIdx++ % BUFFER_COUNT;
buf.index = requestIdx++ % BUFFER_COUNT;
{
- QElapsedTimer t;
- t.start();
-
- auto oldIdx = buf.index;
// m_bufferMutexes[buffer.index].lock();
{
std::lock_guard<std::mutex> lock(m_camMtx);
+ QElapsedTimer t;
+ t.start();
ret = ioctl(m_cam_fd, VIDIOC_DQBUF, &buf);
- }
-
- // m_bufferMutexes[buffer.index].unlock();
- auto newIdx = buf.index;
-
- if (oldIdx != newIdx) {
- // std::cout << "AAAAAAAAAAAAAA " << oldIdx << ' ' << newIdx << std::endl;
+ ++counter;
+ dq_elapsed_ns += t.nsecsElapsed();
}
if (ret != 0) {
@@ -788,16 +792,9 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
std::cerr << "invalid buffer index: " << buf.index << std::endl;
return false;
}
-
- // std::lock_guard<std::mutex> lock(m_queueMtx);
- // m_buffersQueue.push(buffer.index);
- ++counter;
- dq_elapsed_ns += t.nsecsElapsed();
}
- // auto &image = video_buffer_ptr[buffer.index];
imageIndex = buf.index;
- // std::cout << "index: " << imageIndex << '\t' << tmpIdx << std::endl;
auto &image = m_images[buf.index];
image.height = img_height;
image.width = img_width;
@@ -830,24 +827,19 @@ bool VeyeIMX287m::getImage(Image &image)
size_t bufferIdx{};
if (!dequeueImageBuffer(bufferIdx)) {
- std::cout << "AAAAAAAAAAAAAAAAAA" << std::endl;
return false;
}
+ // TODO: remove this bullshit. return ptr to image or copy image metainfo
+ // only, then copy data
image = std::move(m_images[bufferIdx]);
{
QElapsedTimer t;
t.start();
- // memcpy(&image.data, m_videoBuffers[bufferIdx], img_size);
+ std::lock_guard lock{m_imageMutexes[bufferIdx]};
auto &src = *(Image::radxa_data_t *) m_videoBuffers[bufferIdx];
auto &dst = image.data;
Image::copy(dst, src);
-
- // #pragma omp parallel for num_threads(4)
- // for (size_t i = 0; i < img_height; ++i) {
- // memcpy(dst[i].data(), src[i].data(), img_width);
- // }
- // memcpy(&image.data, buffers[bufferIdx].mem[0], img_size);
get_elapsed_ns += t.nsecsElapsed();
}