summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.cpp
diff options
context:
space:
mode:
authorNikita Kostovsky <nikita@kostovsky.me>2025-11-14 22:20:20 +0100
committerNikita Kostovsky <nikita@kostovsky.me>2025-11-14 22:20:20 +0100
commitac27fb455c76aee4f9e9f65747483006909b14ab (patch)
tree3819750b1475674296f1f02b7f237552afd6f386 /src/camera/veyeimx287m.cpp
parentff20080b6f6cdc8b7f8003a6673bf149c515cdda (diff)
cleanup
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
-rw-r--r--src/camera/veyeimx287m.cpp83
1 files changed, 13 insertions, 70 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp
index a03aa83..7b6302c 100644
--- a/src/camera/veyeimx287m.cpp
+++ b/src/camera/veyeimx287m.cpp
@@ -238,6 +238,8 @@ VeyeIMX287m::~VeyeIMX287m()
std::vector<std::shared_ptr<ICamera> > VeyeIMX287m::search()
{
+ // FIXME: use saved params, get rid of hardcode
+
// return only one camera for now
const auto cam = std::make_shared<VeyeIMX287m>();
@@ -257,18 +259,13 @@ std::vector<std::shared_ptr<ICamera> > VeyeIMX287m::search()
if (!cam->set_gain(0.1))
return {};
- if (!cam->setLaserLevel(1))
- return {};
-
return {cam};
}
bool VeyeIMX287m::startStream()
{
- // int buffer_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- const auto radxa_buf_type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
- // auto ret = ioctl(m_cam_fd, VIDIOC_STREAMON, &buffer_type);
- auto ret = ioctl(m_cam_fd, VIDIOC_STREAMON, &radxa_buf_type);
+ constexpr auto radxa_buf_type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+ const auto ret = ioctl(m_cam_fd, VIDIOC_STREAMON, &radxa_buf_type);
if (ret != 0) {
std::cerr << "ioctl(VIDIOC_STREAMON) failed: " << errno << " ("
@@ -276,14 +273,12 @@ bool VeyeIMX287m::startStream()
return false;
}
- std::cout << "stream started" << std::endl;
-
- // m_streamThread = std::jthread{&VeyeIMX287m::dequeueFrameLoop, this};
-
for (auto &t : m_calcThreads) {
t = std::jthread{&VeyeIMX287m::calcFrameLoop, this};
}
+ std::cout << __func__ << " - OK" << std::endl;
+
return true;
}
@@ -292,9 +287,6 @@ bool VeyeIMX287m::init()
if (!openCam())
return false;
- // if (!selectCam())
- // return false;
-
if (!initCam())
return false;
@@ -395,16 +387,6 @@ std::optional<float> VeyeIMX287m::get_gain()
return *value * 10;
}
-bool VeyeIMX287m::setLaserLevel(int value)
-{
- std::cout << __func__ << ": " << value << std::endl << std::flush;
-
- // return setCamParam(V4L2_CID_FLASH_TIMEOUT, value);
-
- // FIXME: tmp workaround for imx287llr
- return true;
-}
-
bool VeyeIMX287m::openCam()
{
m_cam_fd = open(videoDevice, O_RDWR);
@@ -420,23 +402,6 @@ bool VeyeIMX287m::openCam()
return true;
}
-bool VeyeIMX287m::selectCam(int camIdx)
-{
- int input = camIdx;
- int ret = ioctl(m_cam_fd, VIDIOC_S_INPUT, &input);
-
- if (ret < 0) {
- fprintf(stderr,
- "cannot select cam: idx - %d, error - '%s'\n",
- camIdx,
- strerror(errno));
-
- return false;
- }
-
- return true;
-}
-
bool VeyeIMX287m::initCam()
{
int ret{-1};
@@ -516,11 +481,13 @@ bool VeyeIMX287m::initCam()
struct v4l2_requestbuffers rb;
memset(&rb, 0, sizeof rb);
rb.count = BUFFER_COUNT;
+
if constexpr (radxa_zero_3et) {
rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
} else {
rb.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
}
+
rb.memory = V4L2_MEMORY_MMAP;
ret = ioctl(m_cam_fd, VIDIOC_REQBUFS, &rb);
@@ -545,10 +512,6 @@ bool VeyeIMX287m::initCam()
buffers.resize(rb.count);
- // memset(&buffer, 0, sizeof(buffer));
- // buffer.type = request.type;
- // buffer.memory = V4L2_MEMORY_MMAP;
-
std::cout << "query buffers" << std::endl;
for (uint32_t i = 0; i < rb.count; i++) {
@@ -570,9 +533,9 @@ bool VeyeIMX287m::initCam()
ret = ioctl(m_cam_fd, VIDIOC_QUERYBUF, &buf);
if (ret < 0) {
- // std::cout << "ioctl(VIDIOC_QUERYBUF) failed: " << errno << " " << std::endl;
std::cerr << "ioctl(VIDIOC_QUERYBUF) failed: " << errno << " ("
<< strerror(errno) << ")" << std::endl;
+
return false;
}
@@ -591,18 +554,14 @@ bool VeyeIMX287m::initCam()
MAP_SHARED,
m_cam_fd,
offset);
+
if (buffers[i].mem[0] == MAP_FAILED) {
std::cerr << "mmap() failed: " << errno << " (" << strerror(errno)
<< ")" << std::endl;
std::cerr << "length: " << length << std::endl;
std::cerr << "offset: " << offset << std::endl;
- return false;
- // m_videoBuffers[i] = (uint8_t *)
- // mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, m_cam_fd, buf.m.offset);
- // if (m_videoBuffers[i] == MAP_FAILED) {
- // DBG("mmap() failed %d(%s)", errno, strerror(errno));
- // return false;
+ return false;
}
m_videoBuffers[i] = (uint8_t *) buffers[i].mem[0];
@@ -615,10 +574,8 @@ bool VeyeIMX287m::initCam()
i,
buffers[i].mem[0]);
- // buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- // buf.memory = V4L2_MEMORY_MMAP;
- // buf.index = i;
ret = ioctl(m_cam_fd, VIDIOC_QBUF, &buf);
+
if (ret != 0) {
std::cerr << "ioctl(VIDIOC_QBUF) failed: " << errno << " ("
<< strerror(errno) << ")" << std::endl;
@@ -631,18 +588,7 @@ bool VeyeIMX287m::initCam()
fflush(stdout);
fflush(stderr);
- // std::cout << "test return false" << std::endl;
- // return false;
-
- // int buffer_type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
- // ret = ioctl(m_cam_fd, VIDIOC_STREAMON, &buffer_type);
- // if (ret != 0)
- // {
- // DBG("ioctl(VIDIOC_STREAMON) failed %d(%s)", errno, strerror(errno));
- // return false;
- // }
-
- DBG("cam init done.");
+ std::cout << "imx287 cam initialized" << std::endl;
return true;
}
@@ -693,8 +639,6 @@ void VeyeIMX287m::calcFrameLoop(std::stop_token stopToken)
}
}
-// Image &VeyeIMX287m::dequeueImageBuffer()
-// bool VeyeIMX287m::dequeueImageBuffer(Image &image)
bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
// TODO: get Image from video_buffer_ptr
{
@@ -754,7 +698,6 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex)
buf.index = requestIdx++ % BUFFER_COUNT;
{
- // m_bufferMutexes[buffer.index].lock();
{
std::lock_guard<std::mutex> lock(m_camMtx);
QElapsedTimer t;