From 6e9390feb8166d5f9d6c6fdfe00a336b4f71de4c Mon Sep 17 00:00:00 2001 From: Matthew Hoops Date: Tue, 6 Aug 2013 22:26:15 -0400 Subject: [PATCH] VIDEO: Don't allow VideoDecoder::seek() to be overridden A new seekIntern() that performs the actual seeking is to be overriden instead. Having the caller override seek() and then call VideoDecoder::seek() kind of defeated the purpose of stopping/starting the audio. --- video/video_decoder.cpp | 14 +++++++++++--- 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 5df811008c6..a512a49facf 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 d0a6e08005e..7811734dd5c 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;