Browse Source

Allow time adjust while playing

QGC4.4
Don Gagne 6 years ago
parent
commit
afe394364f
  1. 19
      src/comm/LogReplayLink.cc
  2. 1
      src/comm/LogReplayLink.h
  3. 2
      src/ui/QGCMAVLinkLogPlayer.cc
  4. 2
      src/ui/QGCMAVLinkLogPlayer.ui

19
src/comm/LogReplayLink.cc

@ -14,6 +14,7 @@ @@ -14,6 +14,7 @@
#include <QFileInfo>
#include <QtEndian>
#include <QSignalSpy>
const char* LogReplayLinkConfiguration::_logFilenameKey = "logFilename";
@ -368,7 +369,7 @@ void LogReplayLink::_readNextLogEntry(void) @@ -368,7 +369,7 @@ void LogReplayLink::_readNextLogEntry(void)
timeToNextExecutionMSecs = desiredPacedTimeMSecs - currentTimeMSecs;
}
emit currentLogTimeSecs((_logCurrentTimeUSecs - _logStartTimeUSecs) / 1000000);
_signalCurrentLogTimeSecs();
// And schedule the next execution of this function.
_readTickTimer.start(timeToNextExecutionMSecs);
@ -450,8 +451,12 @@ void LogReplayLink::_resetPlaybackToBeginning(void) @@ -450,8 +451,12 @@ void LogReplayLink::_resetPlaybackToBeginning(void)
void LogReplayLink::movePlayhead(int percentComplete)
{
if (isPlaying()) {
qWarning() << "Should not move playhead while playing, pause first";
return;
_pauseOnThread();
QSignalSpy waitForPause(this, SIGNAL(playbackPaused));
waitForPause.wait();
if (_readTickTimer.isActive()) {
return;
}
}
if (percentComplete < 0 || percentComplete > 100) {
@ -495,7 +500,8 @@ void LogReplayLink::movePlayhead(int percentComplete) @@ -495,7 +500,8 @@ void LogReplayLink::movePlayhead(int percentComplete)
// And scan until we reach the start of a MAVLink message. We make sure to record this timestamp for
// smooth jumping around the file.
_logCurrentTimeUSecs = _seekToNextMavlinkMessage(&dummy);
_signalCurrentLogTimeSecs();
// Now update the UI with our actual final position.
newRelativeTimeUSecs = (float)(_logCurrentTimeUSecs - _logStartTimeUSecs);
percentComplete = (newRelativeTimeUSecs / _logDurationUSecs) * 100;
@ -561,3 +567,8 @@ void LogReplayLink::_playbackError(void) @@ -561,3 +567,8 @@ void LogReplayLink::_playbackError(void)
_logFile.close();
emit playbackError();
}
void LogReplayLink::_signalCurrentLogTimeSecs(void)
{
emit currentLogTimeSecs((_logCurrentTimeUSecs - _logStartTimeUSecs) / 1000000);
}

1
src/comm/LogReplayLink.h

@ -120,6 +120,7 @@ private: @@ -120,6 +120,7 @@ private:
void _finishPlayback(void);
void _playbackError(void);
void _resetPlaybackToBeginning(void);
void _signalCurrentLogTimeSecs(void);
// Virtuals from LinkInterface
virtual bool _connect(void);

2
src/ui/QGCMAVLinkLogPlayer.cc

@ -142,7 +142,6 @@ void QGCMAVLinkLogPlayer::_playbackStarted(void) @@ -142,7 +142,6 @@ void QGCMAVLinkLogPlayer::_playbackStarted(void)
_enablePlaybackControls(true);
_ui->playButton->setChecked(true);
_ui->playButton->setIcon(QIcon(":/res/Pause"));
_ui->positionSlider->setEnabled(false);
}
/// Signalled from LogReplayLink when replay is paused
@ -150,7 +149,6 @@ void QGCMAVLinkLogPlayer::_playbackPaused(void) @@ -150,7 +149,6 @@ void QGCMAVLinkLogPlayer::_playbackPaused(void)
{
_ui->playButton->setIcon(QIcon(":/res/Play"));
_ui->playButton->setChecked(false);
_ui->positionSlider->setEnabled(true);
}
void QGCMAVLinkLogPlayer::_playbackPercentCompleteChanged(int percentComplete)

2
src/ui/QGCMAVLinkLogPlayer.ui

@ -75,7 +75,7 @@ @@ -75,7 +75,7 @@
<number>100</number>
</property>
<property name="tracking">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>

Loading…
Cancel
Save