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.
This commit is contained in:
Matthew Hoops 2013-08-06 22:26:15 -04:00
parent d041177e2f
commit 6e9390feb8
2 changed files with 25 additions and 7 deletions

View File

@ -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;
}

View File

@ -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;