annotate data/fileio/OggVorbisFileReader.h @ 295:a2dc34ce146a

* Window should be centred on its nominal time. I'm not sure what the reasoning was behind the previous formulations of these two lines.
author Chris Cannam
date Thu, 06 Sep 2007 15:14:47 +0000
parents 92e8dbde73cd
children c022976d18e8
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@290 40 OggVorbisFileReader(QString path, DecodeMode decodeMode,
Chris@263 41 CacheMode cacheMode);
Chris@148 42 virtual ~OggVorbisFileReader();
Chris@148 43
Chris@290 44 virtual QString getError() const { return m_error; }
Chris@290 45
Chris@290 46 virtual QString getTitle() const { return m_title; }
Chris@271 47
Chris@290 48 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@157 49
Chris@265 50 virtual int getDecodeCompletion() const { return m_completion; }
Chris@265 51
Chris@263 52 virtual bool isUpdating() const {
Chris@263 53 return m_decodeThread && m_decodeThread->isRunning();
Chris@263 54 }
Chris@263 55
Chris@148 56 protected:
Chris@290 57 QString m_path;
Chris@290 58 QString m_error;
Chris@290 59 QString m_title;
Chris@148 60
Chris@263 61 OGGZ *m_oggz;
Chris@148 62 FishSound *m_fishSound;
Chris@148 63 QProgressDialog *m_progress;
Chris@148 64 size_t m_fileSize;
Chris@148 65 size_t m_bytesRead;
Chris@271 66 bool m_commentsRead;
Chris@148 67 bool m_cancelled;
Chris@265 68 int m_completion;
Chris@148 69
Chris@148 70 static int readPacket(OGGZ *, ogg_packet *, long, void *);
Chris@148 71 static int acceptFrames(FishSound *, float **, long, void *);
Chris@263 72
Chris@263 73 class DecodeThread : public Thread
Chris@263 74 {
Chris@263 75 public:
Chris@263 76 DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { }
Chris@263 77 virtual void run();
Chris@263 78
Chris@263 79 protected:
Chris@263 80 OggVorbisFileReader *m_reader;
Chris@263 81 };
Chris@263 82
Chris@263 83 DecodeThread *m_decodeThread;
Chris@148 84 };
Chris@148 85
Chris@148 86 #endif
Chris@148 87 #endif
Chris@148 88
Chris@148 89 #endif