aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--video/video_decoder.cpp14
-rw-r--r--video/video_decoder.h18
2 files changed, 25 insertions, 7 deletions
diff --git a/video/video_decoder.cpp b/video/video_decoder.cpp
index 5df811008c..a512a49fac 100644
--- a/video/video_decoder.cpp
+++ b/video/video_decoder.cpp
@@ -336,9 +336,9 @@ bool VideoDecoder::seek(const Audio::Timestamp &time) {
if (isPlaying())
stopAudio();
- for (TrackList::iterator it = _tracks.begin(); it != _tracks.end(); it++)
- if (!(*it)->seek(time))
- return false;
+ // Do the actual seeking
+ if (!seekIntern(time))
+ return false;
_lastTimeChange = time;
@@ -471,6 +471,14 @@ Audio::Timestamp VideoDecoder::getDuration() const {
return maxDuration;
}
+bool VideoDecoder::seekIntern(const Audio::Timestamp &time) {
+ for (TrackList::iterator it = _tracks.begin(); it != _tracks.end(); it++)
+ if (!(*it)->seek(time))
+ return false;
+
+ return true;
+}
+
VideoDecoder::Track::Track() {
_paused = false;
}
diff --git a/video/video_decoder.h b/video/video_decoder.h
index d0a6e08005..7811734dd5 100644
--- a/video/video_decoder.h
+++ b/video/video_decoder.h
@@ -168,14 +168,15 @@ public:
/**
* Seek to a given time in the video.
*
- * If the video is playing, it will continue to play. The default
- * implementation will seek each track and must still be called
- * from any other implementation.
+ * If the video is playing, it will continue to play. This calls
+ * seekIntern(), which can be overriden. By default, seekIntern()
+ * will call Track::seek() on all tracks with the time passed to
+ * this function.
*
* @param time The time to seek to
* @return true on success, false otherwise
*/
- virtual bool seek(const Audio::Timestamp &time);
+ bool seek(const Audio::Timestamp &time);
/**
* Seek to a given frame.
@@ -820,6 +821,15 @@ protected:
*/
TrackListIterator getTrackListEnd() { return _tracks.end(); }
+ /**
+ * The internal seek function that does the actual seeking.
+ *
+ * @see seek()
+ *
+ * @return true on success, false otherwise
+ */
+ virtual bool seekIntern(const Audio::Timestamp &time);
+
private:
// Tracks owned by this VideoDecoder
TrackList _tracks;