コード例 #1
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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;
      }
    }
  }
}
コード例 #2
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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));
    }
  }
}
コード例 #3
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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 ? "|>" : "||");
}
コード例 #4
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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;
    }
  }

}
コード例 #5
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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();
}
コード例 #6
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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();
}
コード例 #7
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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;
}
コード例 #8
0
ファイル: ladybugwidget.cpp プロジェクト: detlevn/qgismapper
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;
      }
  }
}
コード例 #9
0
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()));
}