summaryrefslogtreecommitdiff
path: root/src/camera/veyeimx287m.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/camera/veyeimx287m.cpp')
-rw-r--r--src/camera/veyeimx287m.cpp29
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;
}