diff options
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
| -rw-r--r-- | src/camera/veyeimx287m.cpp | 83 |
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; |
