void LadybugWidget::mousePressEvent(QMouseEvent* e) { if (NAVIGATION_RECT.contains(e->pos())) { // handle navigation navigationMousePress(e); } else { // handle images from cameras // we're interested only to right click - reset zoom if (e->button() != Qt::RightButton) return; for (int i = 0; i < CAMERAS; i++) { if (cameraRect(i).contains(e->pos())) { setCameraZoom(i, 1); if (mPaused) updateVideo(getSingleFrame(mCurrentFrame)); break; } } } }
void LadybugWidget::navigationMousePress(QMouseEvent* e) { QRect arrowRect = QRect(QPoint(-5, 0), QPoint(5, -10)); QPoint centerPt = NAVIGATION_RECT.center(); QMatrix m; m.translate(centerPt.x(), centerPt.y()); for (int i = 0; i < 5; i++) { QMatrix m2 = m; m2.rotate(i*360/5); m2.translate(0,-16); QPoint resPt = m2.inverted().map(e->pos()); if (arrowRect.contains(resPt)) { // invert camera on/off setting setCameraState(i, !cameraState(i)); if (mPaused) updateVideo(getSingleFrame(mCurrentFrame)); } } }
void LadybugWidget::pause() { mPaused = !mPaused; if (mPaused) { mTimer.stop(); mPlaybackStartTime = QTime(); // terminate thread stopPlayerThread(); // make sure we're where we paused the video updateVideo(getSingleFrame(mCurrentFrame)); } else { // create thread, pass the stream mThread = new LadybugPlayerThread(mStream); mThread->setCameras(cameraMask()); mThread->start(); // in update routine: show frame + get next frame + run timer updateVideoPlayback(); } if (mPauseButton) mPauseButton->setText(mPaused ? "|>" : "||"); }
void LadybugWidget::wheelEvent(QWheelEvent* e) { for (int cam = 0; cam < CAMERAS; cam++) { QRect r = cameraRect(cam); if (r.contains(e->pos())) { QPointF oldOffset; double oldZoom = cameraZoom(cam, &oldOffset); // negative = zoom in const double FACTOR = 1.25; double zoom = oldZoom * (e->delta() > 0 ? 1/FACTOR : FACTOR); if (zoom < 1) zoom = 1; if (zoom > 4) zoom = 4; if (zoom == oldZoom) return; QPointF pos = (e->pos()-r.topLeft())/oldZoom; QPointF newPos = pos * oldZoom/zoom; QPointF offset = oldOffset + pos - newPos; printf("delta %d | pos %.1f,%.1f | new_pos %.1f,%.1f | zoom %.2f | offset %.1f,%.1f\n", e->delta(), pos.x(),pos.y(), newPos.x(), newPos.y(), zoom, offset.x(), offset.y()); setCameraZoom(cam, zoom, offset); if (mPaused) updateVideo(getSingleFrame(mCurrentFrame)); break; } } }
void LadybugWidget::seekToTime(uint msecs) { mStream.seekToTime(msecs); int frameId = mStream.currentFrame(); printf("frame id: %d\n", frameId); if (mPaused) { updateVideo(getSingleFrame(frameId)); } else { //mThread->seekToFrame(frameId); pause(); updateVideo(getSingleFrame(frameId)); pause(); } update(); }
void LadybugWidget::seekToFrame(int frameId) { if (frameId < 0) frameId = 0; if (frameId == mCurrentFrame) return; printf("SEEK! %d\n", frameId); if (mPaused) { updateVideo(getSingleFrame(frameId)); } else { //mThread->seekToFrame(frameId); pause(); updateVideo(getSingleFrame(frameId)); pause(); } update(); }
bool LadybugWidget::openStream(QString baseName) { bool res = mStream.openForReading(baseName); if (!res) return false; if (mSlider) mSlider->setRange(0, mStream.framesCount()-1); // show first frame LadybugPlayerFrame f = getSingleFrame(0); mStartTime = f.time; updateVideo(f); return true; }
void LadybugWidget::keyPressEvent(QKeyEvent* e) { if (e->key() >= Qt::Key_1 && e->key() <= Qt::Key_5) { int i = e->key()-Qt::Key_1; // invert camera on/off setting setCameraState(i, !cameraState(i)); if (mPaused) updateVideo(getSingleFrame(mCurrentFrame)); } switch (e->key()) { case Qt::Key_Space: pause(); break; case Qt::Key_Left: seekToFrame(mCurrentFrame-1); break; case Qt::Key_Right: seekToFrame(mCurrentFrame+1); break; case Qt::Key_Home: seekToFrame(0); break; case Qt::Key_End: seekToFrame(mStream.framesCount()-1); break; case Qt::Key_PageUp: seekToFrame(mCurrentFrame-25); break; case Qt::Key_PageDown: seekToFrame(mCurrentFrame+25); break; // %%% seek to random position (for testing) case Qt::Key_S: { uint msecs = rand() % (mStream.framesCount() / 15 * 1000); printf("RANDOM TIME SEEK! %d ms\n", msecs); seekToTime(msecs); break; } } }
TpReceiveTransaction::TpReceiveTransaction(Can *can,/*int transmitDescriptor, int acknowlegmentDescriptor, */QObject *parent) : QObject(parent), movingFrames (can, parent), state (INIT), timer() { blockSize = 0; consIndex = blockSize; QObject::connect(&movingFrames, SIGNAL(receiveSingleFrame(SingleFrame)), this, SLOT(getSingleFrame(SingleFrame))); QObject::connect(&movingFrames, SIGNAL(receiveFirstFrame(FirstFrame)), this, SLOT(getFirstFrame(FirstFrame))); QObject::connect(&movingFrames, SIGNAL(receiveConsecutiveFrame(ConsecutiveFrame)), this, SLOT(getConsecutiveFrame(ConsecutiveFrame))); QObject::connect(this, SIGNAL(sendFlowControl(FlowControlFrame)), &movingFrames, SLOT(transmitFlowControlFrame(FlowControlFrame))); QObject::connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); }