diff options
Diffstat (limited to 'video')
-rw-r--r-- | video/video_decoder.cpp | 14 | ||||
-rw-r--r-- | video/video_decoder.h | 18 |
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; |