Mercurial > hg > svcore
diff data/fileio/OggVorbisFileReader.h @ 263:71dfc6ab3b54
* Threaded mp3/ogg file reading. Not activated yet, as it doesn't work
in context (SV needs to know the duration of its main model at the outset)
author | Chris Cannam |
---|---|
date | Thu, 24 May 2007 16:20:22 +0000 |
parents | c03ec31005e1 |
children | e08f486e8d8c |
line wrap: on
line diff
--- a/data/fileio/OggVorbisFileReader.h Thu May 10 12:48:26 2007 +0000 +++ b/data/fileio/OggVorbisFileReader.h Thu May 24 16:20:22 2007 +0000 @@ -21,6 +21,7 @@ #include "CodedAudioFileReader.h" +#include "base/Thread.h" #include <oggz/oggz.h> #include <fishsound/fishsound.h> @@ -31,17 +32,28 @@ class OggVorbisFileReader : public CodedAudioFileReader { public: - OggVorbisFileReader(QString path, bool showProgress, CacheMode cacheMode); + enum DecodeMode { + DecodeAtOnce, // decode the file on construction, with progress dialog + DecodeThreaded // decode in a background thread after construction + }; + + OggVorbisFileReader(QString path, DecodeMode decodeMode, + CacheMode cacheMode); virtual ~OggVorbisFileReader(); virtual QString getError() const { return m_error; } static void getSupportedExtensions(std::set<QString> &extensions); + virtual bool isUpdating() const { + return m_decodeThread && m_decodeThread->isRunning(); + } + protected: QString m_path; QString m_error; + OGGZ *m_oggz; FishSound *m_fishSound; QProgressDialog *m_progress; size_t m_fileSize; @@ -50,6 +62,18 @@ static int readPacket(OGGZ *, ogg_packet *, long, void *); static int acceptFrames(FishSound *, float **, long, void *); + + class DecodeThread : public Thread + { + public: + DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { } + virtual void run(); + + protected: + OggVorbisFileReader *m_reader; + }; + + DecodeThread *m_decodeThread; }; #endif