annotate data/fileio/ResamplingWavFileReader.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@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@297 16 #ifndef _RESAMPLING_WAV_FILE_READER_H_
Chris@297 17 #define _RESAMPLING_WAV_FILE_READER_H_
Chris@297 18
Chris@297 19 #include "CodedAudioFileReader.h"
Chris@297 20
Chris@297 21 #include "base/Thread.h"
Chris@297 22
Chris@297 23 #include <set>
Chris@297 24
Chris@297 25 class WavFileReader;
Chris@297 26 class QProgressDialog;
Chris@297 27
Chris@297 28 class ResamplingWavFileReader : public CodedAudioFileReader
Chris@297 29 {
Chris@297 30 public:
Chris@297 31 enum ResampleMode {
Chris@297 32 ResampleAtOnce, // resample the file on construction, with progress dialog
Chris@297 33 ResampleThreaded // resample in a background thread after construction
Chris@297 34 };
Chris@297 35
Chris@317 36 ResamplingWavFileReader(FileSource source,
Chris@297 37 ResampleMode resampleMode,
Chris@297 38 CacheMode cacheMode,
Chris@297 39 size_t targetRate = 0);
Chris@297 40 virtual ~ResamplingWavFileReader();
Chris@297 41
Chris@297 42 virtual QString getError() const { return m_error; }
Chris@345 43 virtual QString getLocation() const { return m_source.getLocation(); }
Chris@297 44 static void getSupportedExtensions(std::set<QString> &extensions);
Chris@316 45 static bool supportsExtension(QString ext);
Chris@316 46 static bool supportsContentType(QString type);
Chris@317 47 static bool supports(FileSource &source);
Chris@297 48
Chris@297 49 virtual int getDecodeCompletion() const { return m_completion; }
Chris@297 50
Chris@297 51 virtual bool isUpdating() const {
Chris@297 52 return m_decodeThread && m_decodeThread->isRunning();
Chris@297 53 }
Chris@297 54
Chris@297 55 protected:
Chris@317 56 FileSource m_source;
Chris@297 57 QString m_path;
Chris@297 58 QString m_error;
Chris@297 59 bool m_cancelled;
Chris@297 60 size_t m_processed;
Chris@297 61 int m_completion;
Chris@297 62
Chris@297 63 WavFileReader *m_original;
Chris@297 64 QProgressDialog *m_progress;
Chris@297 65
Chris@297 66 void addBlock(const SampleBlock &frames);
Chris@297 67
Chris@297 68 class DecodeThread : public Thread
Chris@297 69 {
Chris@297 70 public:
Chris@297 71 DecodeThread(ResamplingWavFileReader *reader) : m_reader(reader) { }
Chris@297 72 virtual void run();
Chris@297 73
Chris@297 74 protected:
Chris@297 75 ResamplingWavFileReader *m_reader;
Chris@297 76 };
Chris@297 77
Chris@297 78 DecodeThread *m_decodeThread;
Chris@297 79 };
Chris@297 80
Chris@297 81 #endif
Chris@297 82