annotate 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
rev   line source
Chris@148 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@148 2
Chris@148 3 /*
Chris@148 4 Sonic Visualiser
Chris@148 5 An audio file viewer and annotation editor.
Chris@148 6 Centre for Digital Music, Queen Mary, University of London.
Chris@148 7 This file copyright 2006 Chris Cannam.
Chris@148 8
Chris@148 9 This program is free software; you can redistribute it and/or
Chris@148 10 modify it under the terms of the GNU General Public License as
Chris@148 11 published by the Free Software Foundation; either version 2 of the
Chris@148 12 License, or (at your option) any later version. See the file
Chris@148 13 COPYING included with this distribution for more information.
Chris@148 14 */
Chris@148 15
Chris@148 16 #ifndef _OGG_VORBIS_FILE_READER_H_
Chris@148 17 #define _OGG_VORBIS_FILE_READER_H_
Chris@148 18
Chris@148 19 #ifdef HAVE_OGGZ
Chris@148 20 #ifdef HAVE_FISHSOUND
Chris@148 21
Chris@148 22 #include "CodedAudioFileReader.h"
Chris@148 23
Chris@263 24 #include "base/Thread.h"
Chris@148 25 #include <oggz/oggz.h>
Chris@148 26 #include <fishsound/fishsound.h>
Chris@148 27
Chris@157 28 #include <set>
Chris@157 29
Chris@148 30 class QProgressDialog;
Chris@148 31
Chris@148 32 class OggVorbisFileReader : public CodedAudioFileReader
Chris@148 33 {
Chris@148 34 public:
Chris@263 35 enum DecodeMode {
Chris@263 36 DecodeAtOnce, // decode the file on construction, with progress dialog
Chris@263 37 DecodeThreaded // decode in a background thread after construction
Chris@263 38 };
Chris@263 39
Chris@263 40 OggVorbisFileReader(QString path, DecodeMode decodeMode,
Chris@263 41 CacheMode cacheMode);
Chris@148 42 virtual ~OggVorbisFileReader();
Chris@148 43
Chris@148 44 virtual QString getError() const { return m_error; }
Chris@148 45
Chris@157 46 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@157 47
Chris@263 48 virtual bool isUpdating() const {
Chris@263 49 return m_decodeThread && m_decodeThread->isRunning();
Chris@263 50 }
Chris@263 51
Chris@148 52 protected:
Chris@148 53 QString m_path;
Chris@148 54 QString m_error;
Chris@148 55
Chris@263 56 OGGZ *m_oggz;
Chris@148 57 FishSound *m_fishSound;
Chris@148 58 QProgressDialog *m_progress;
Chris@148 59 size_t m_fileSize;
Chris@148 60 size_t m_bytesRead;
Chris@148 61 bool m_cancelled;
Chris@148 62
Chris@148 63 static int readPacket(OGGZ *, ogg_packet *, long, void *);
Chris@148 64 static int acceptFrames(FishSound *, float **, long, void *);
Chris@263 65
Chris@263 66 class DecodeThread : public Thread
Chris@263 67 {
Chris@263 68 public:
Chris@263 69 DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { }
Chris@263 70 virtual void run();
Chris@263 71
Chris@263 72 protected:
Chris@263 73 OggVorbisFileReader *m_reader;
Chris@263 74 };
Chris@263 75
Chris@263 76 DecodeThread *m_decodeThread;
Chris@148 77 };
Chris@148 78
Chris@148 79 #endif
Chris@148 80 #endif
Chris@148 81
Chris@148 82 #endif