diff options
-rw-r--r-- | video/video_decoder.cpp | 15 | ||||
-rw-r--r-- | video/video_decoder.h | 21 |
2 files changed, 36 insertions, 0 deletions
diff --git a/video/video_decoder.cpp b/video/video_decoder.cpp index 3cce2dea02..4ac914927e 100644 --- a/video/video_decoder.cpp +++ b/video/video_decoder.cpp @@ -486,6 +486,21 @@ bool AdvancedVideoDecoder::SeekableAudioTrack::seek(const Audio::Timestamp &time return stream->seek(time); } +AdvancedVideoDecoder::StreamFileAudioTrack::StreamFileAudioTrack() { + _stream = 0; +} + +AdvancedVideoDecoder::StreamFileAudioTrack::~StreamFileAudioTrack() { + delete _stream; +} + +bool AdvancedVideoDecoder::StreamFileAudioTrack::loadFromFile(const Common::String &baseName) { + // TODO: Make sure the stream isn't being played + delete _stream; + _stream = Audio::SeekableAudioStream::openStreamFile(baseName); + return _stream != 0; +} + void AdvancedVideoDecoder::addTrack(Track *track) { _tracks.push_back(track); diff --git a/video/video_decoder.h b/video/video_decoder.h index 9496148de6..3e991ade66 100644 --- a/video/video_decoder.h +++ b/video/video_decoder.h @@ -610,6 +610,27 @@ protected: }; /** + * A SeekableAudioTrack that constructs its SeekableAudioStream using + * SeekableAudioStream::openStreamFile() + */ + class StreamFileAudioTrack : public SeekableAudioTrack { + public: + StreamFileAudioTrack(); + ~StreamFileAudioTrack(); + + /** + * Load the track from a file with the given base name. + * + * @return true on success, false otherwise + */ + bool loadFromFile(const Common::String &baseName); + + protected: + Audio::SeekableAudioStream *_stream; + Audio::SeekableAudioStream *getSeekableAudioStream() const { return _stream; } + }; + + /** * Decode enough data for the next frame and enough audio to last that long. * * This function is used by the default decodeNextFrame() function. A subclass |