diff options
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
| -rw-r--r-- | src/camera/veyeimx287m.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/camera/veyeimx287m.cpp b/src/camera/veyeimx287m.cpp index 1d64395..0bb0724 100644 --- a/src/camera/veyeimx287m.cpp +++ b/src/camera/veyeimx287m.cpp @@ -242,6 +242,7 @@ VeyeIMX287m::~VeyeIMX287m() void VeyeIMX287m::onMoveFinished() { + qDebug() << "================================================"; qDebug() << __func__; m_isMoving = false; } @@ -647,6 +648,7 @@ void VeyeIMX287m::getFrameLoop(std::stop_token stopToken) const auto image = std::make_shared<Image>(); auto &dst = image->data; Image::copy(dst, src); + image->counters.measurementCounter = m_rawBuffers[bufferIdx].sequence; // image->rotate(); // const auto pixels = image->sharedPixels(); @@ -677,7 +679,7 @@ void VeyeIMX287m::rotateFrameLoop(std::stop_token stopToken) void VeyeIMX287m::calcPixelsLoop(std::stop_token stopToken) { - uint8_t collectedInPos{0}; + constexpr uint32_t neededCount{8}; while (!stopToken.stop_requested()) { // const auto idx = m_sync.rotSemQueue.dequeue(); @@ -695,23 +697,24 @@ void VeyeIMX287m::calcPixelsLoop(std::stop_token stopToken) continue; } else { pixels->counters.encoderPosition = m_stand->posSteps(); - constexpr uint8_t neededCount{8}; - if (collectedInPos < neededCount) { - m_calibrationPixels.push_back(pixels); - ++collectedInPos; + if (m_calibrationPixels[pixels->counters.encoderPosition].size() < neededCount) { + m_calibrationPixels[pixels->counters.encoderPosition].push_back(pixels); + qDebug() << "\tenc:" << pixels->counters.encoderPosition << "in pos:" + << m_calibrationPixels[pixels->counters.encoderPosition].size() + % neededCount; } else { // if (m_stand->posMm() < m_zRangeMm) { if (m_stand->posMm() < debugZRange) { // TODO: dump pixels // dumpCalibrationPixels(m_calibrationPixels); qDebug() << "moveMm:" << m_zRangeMm << ::discretesInRage - << "currPos:" << m_stand->posMm() << "zRange:" << m_zRangeMm + << "\tcurrPos:" << m_stand->posMm() << "zRange:" << m_zRangeMm << m_zRangeMm / ::discretesInRage - << "pos steps:" << pixels->counters.encoderPosition; + << "\tpos steps:" << pixels->counters.encoderPosition + << "\tcollected:" << m_calibrationPixels.size(); m_isMoving = true; - collectedInPos = 0; emit moveMm(m_zRangeMm / ::discretesInRage); // m_stand->moveMm(m_zRangeMm / ::discretesInRage); } else { @@ -723,7 +726,12 @@ void VeyeIMX287m::calcPixelsLoop(std::stop_token stopToken) // m_stand->moveMm(-m_zRangeMm); m_isCalibrating = false; // m_stand.reset(); - const auto tmp = m_calibrationPixels; + // const auto tmp = m_calibrationPixels; + std::vector<std::shared_ptr<Pixels>> tmp; + + for (const auto &[e, p] : m_calibrationPixels) { + tmp.insert(tmp.begin(), p.cbegin(), p.cend()); + } // dumpCalibrationPixels(m_calibrationPixels); dumpCalibrationPixels(tmp, DumpFormat::Binary); m_calibrationPixels.clear(); @@ -809,11 +817,13 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex) if (buf.index < 0 || buf.index >= BUFFER_COUNT) { std::cerr << "invalid buffer index: " << buf.index << std::endl; + m_rawBuffers[imageIndex].sequence = std::numeric_limits<buffer::sequence_t>::max(); return false; } } imageIndex = buf.index; + m_rawBuffers[imageIndex].sequence = buf.sequence; // const auto &image = m_rawBuffers[buf.index].image; // image->height = img_height; @@ -835,6 +845,7 @@ bool VeyeIMX287m::dequeueImageBuffer(size_t &imageIndex) if (ret != 0) { std::cerr << "ioctl(VIDIOC_QBUF) failed: " << errno << " (" << strerror(errno) << ")" << std::endl; + m_rawBuffers[imageIndex].sequence = std::numeric_limits<buffer::sequence_t>::max(); return false; } |
