diff options
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
| -rw-r--r-- | src/camera/veyeimx287m.cpp | 53 |
1 files changed, 23 insertions, 30 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp index 2e4a4aa..6491d9d 100644 --- a/src/camera/veyeimx287m.cpp +++ b/src/camera/veyeimx287m.cpp @@ -212,8 +212,8 @@ VeyeIMX287m::~VeyeIMX287m() } #ifdef RADXA_ZERO_3E - for (const auto buffer : buffers) { - if (munmap(buffer.mem[0], radxa_raw_img_size) < 0) { + for (const auto buffer : m_buffers) { + if (munmap(buffer.mem, radxa_raw_img_size) < 0) { DBG("Munmap failed!!."); } } @@ -500,17 +500,13 @@ bool VeyeIMX287m::initCam() return false; } - std::cout << "buffers requested" << std::endl; - if (rb.count < BUFFER_COUNT) { fprintf(stderr, "cannot set cam request buffers\n"); return false; } - std::cout << "buffers count is ok: " << rb.count << std::endl; - - buffers.resize(rb.count); + m_buffers.resize(rb.count); std::cout << "query buffers" << std::endl; @@ -529,7 +525,6 @@ bool VeyeIMX287m::initCam() buf.length = VIDEO_MAX_PLANES; buf.m.planes = planes; - std::cout << "run ioctl(VIDIOC_QUERYBUF) for buf #" << i << std::endl; ret = ioctl(m_cam_fd, VIDIOC_QUERYBUF, &buf); if (ret < 0) { @@ -539,23 +534,15 @@ bool VeyeIMX287m::initCam() return false; } - std::cout << "ioctl(VIDIOC_QUERYBUF) is ok: " << std::endl; - std::cout << "buffer.length: " << buf.length << std::endl; std::cout << "buffer.m.offset: " << buf.m.offset << std::endl; - - buffers[i].idx = i; + std::cout << "buffer.index: " << buf.index << " " << i << std::endl; const auto length = buf.m.planes[0].length; const auto offset = buf.m.planes[0].m.mem_offset; - buffers[i].mem[0] = mmap(0, - length, - PROT_READ | PROT_WRITE, - MAP_SHARED, - m_cam_fd, - offset); + m_buffers[i].mem = mmap(0, length, PROT_READ | PROT_WRITE, MAP_SHARED, m_cam_fd, offset); - if (buffers[i].mem[0] == MAP_FAILED) { + if (m_buffers[i].mem == MAP_FAILED) { std::cerr << "mmap() failed: " << errno << " (" << strerror(errno) << ")" << std::endl; std::cerr << "length: " << length << std::endl; @@ -564,15 +551,17 @@ bool VeyeIMX287m::initCam() return false; } - m_videoBuffers[i] = (uint8_t *) buffers[i].mem[0]; + m_videoBuffers[i] = (uint8_t *) m_buffers[i].mem; - buffers[i].size[i] = length; - buffers[i].padding[i] = 0; + auto p1 = (Image::radxa_data_t *) m_videoBuffers[i]; + auto p2 = (Image::radxa_data_t *) m_buffers[i].mem; + if (p1 != p2) { + std::cout << "AAAAAAA: " << (void *) p1 << ' ' << (void *) p2 << std::endl; + } + m_buffers[i].size[i] = length; + m_buffers[i].padding[i] = 0; - printf("Buffer %u/%u mapped at address %p.\n", - buffers[i].idx, - i, - buffers[i].mem[0]); + printf("Buffer mapped at address %p.\n", m_buffers[i].mem); ret = ioctl(m_cam_fd, VIDIOC_QBUF, &buf); @@ -581,15 +570,11 @@ bool VeyeIMX287m::initCam() << strerror(errno) << ")" << std::endl; return false; } - - std::cout << "ioctl(VIDIOC_QBUF) is OK" << std::endl; } fflush(stdout); fflush(stderr); - std::cout << "imx287 cam initialized" << std::endl; - return true; } @@ -628,7 +613,15 @@ void VeyeIMX287m::calcFrameLoop(std::stop_token stopToken) { t.start(); + auto p1 = (void *) m_videoBuffers[bufferIdx]; + auto p2 = (void *) m_buffers[bufferIdx].mem; + + // if (p1 != p2) { + // std::cout << (void *) p1 << ' ' << (void *) p2 << std::endl; + // } + auto &src = *(Image::radxa_data_t *) m_videoBuffers[bufferIdx]; + // auto &src = *(Image::radxa_data_t *) buffers[bufferIdx].mem[0]; auto &dst = image.data; Image::copy(dst, src); |
