diff options
| author | Nikita Kostovsky <nikita@kostovsky.me> | 2025-11-14 11:16:23 +0100 |
|---|---|---|
| committer | Nikita Kostovsky <nikita@kostovsky.me> | 2025-11-14 11:16:23 +0100 |
| commit | 921b118472da6c9d4f4d1b76549b4c3672926925 (patch) | |
| tree | cb63abafbe1e4307979df7680a4dba0f1523e605 /src/camera/veyeimx287m.cpp | |
| parent | 3396ea3e7cf5a0def0ea720bcb863b374fd1cd0e (diff) | |
cleanup, add comments
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
| -rw-r--r-- | src/camera/veyeimx287m.cpp | 94 |
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(); } |
