annotate data/fileio/OggVorbisFileReader.h @ 360:ac300d385ab2

* Various fixes to object lifetime management, particularly in the spectrum layer and for notification of main model deletion. The main purpose of this is to improve the behaviour of the spectrum, but I think it may also help with #1840922 Various crashes in Layer Summary window.
author Chris Cannam
date Wed, 23 Jan 2008 15:43:27 +0000
parents 700cd3350391
children 183ee2a55fc7
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@317 40 OggVorbisFileReader(FileSource source,
Chris@297 41 DecodeMode decodeMode,
Chris@297 42 CacheMode cacheMode,
Chris@297 43 size_t targetRate = 0);
Chris@148 44 virtual ~OggVorbisFileReader();
Chris@148 45
Chris@290 46 virtual QString getError() const { return m_error; }
Chris@290 47
Chris@345 48 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@290 49 virtual QString getTitle() const { return m_title; }
Chris@333 50 virtual QString getMaker() const { return m_maker; }
Chris@271 51
Chris@290 52 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 53 static bool supportsExtension(QString ext);
Chris@316 54 static bool supportsContentType(QString type);
Chris@317 55 static bool supports(FileSource &source);
Chris@157 56
Chris@265 57 virtual int getDecodeCompletion() const { return m_completion; }
Chris@265 58
Chris@263 59 virtual bool isUpdating() const {
Chris@263 60 return m_decodeThread && m_decodeThread->isRunning();
Chris@263 61 }
Chris@263 62
Chris@148 63 protected:
Chris@317 64 FileSource m_source;
Chris@290 65 QString m_path;
Chris@290 66 QString m_error;
Chris@290 67 QString m_title;
Chris@333 68 QString m_maker;
Chris@148 69
Chris@263 70 OGGZ *m_oggz;
Chris@148 71 FishSound *m_fishSound;
Chris@148 72 QProgressDialog *m_progress;
Chris@148 73 size_t m_fileSize;
Chris@148 74 size_t m_bytesRead;
Chris@271 75 bool m_commentsRead;
Chris@148 76 bool m_cancelled;
Chris@265 77 int m_completion;
Chris@148 78
Chris@148 79 static int readPacket(OGGZ *, ogg_packet *, long, void *);
Chris@148 80 static int acceptFrames(FishSound *, float **, long, void *);
Chris@263 81
Chris@263 82 class DecodeThread : public Thread
Chris@263 83 {
Chris@263 84 public:
Chris@263 85 DecodeThread(OggVorbisFileReader *reader) : m_reader(reader) { }
Chris@263 86 virtual void run();
Chris@263 87
Chris@263 88 protected:
Chris@263 89 OggVorbisFileReader *m_reader;
Chris@263 90 };
Chris@263 91
Chris@263 92 DecodeThread *m_decodeThread;
Chris@148 93 };
Chris@148 94
Chris@148 95 #endif
Chris@148 96 #endif
Chris@148 97
Chris@148 98 #endif