luisf@665: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ luisf@665: luisf@665: /* luisf@665: Sonic Visualiser luisf@665: An audio file viewer and annotation editor. luisf@665: Centre for Digital Music, Queen Mary, University of London. Chris@748: This file copyright 2006-2012 Chris Cannam and QMUL. luisf@665: luisf@665: This program is free software; you can redistribute it and/or luisf@665: modify it under the terms of the GNU General Public License as luisf@665: published by the Free Software Foundation; either version 2 of the luisf@665: License, or (at your option) any later version. See the file luisf@665: COPYING included with this distribution for more information. luisf@665: */ luisf@665: luisf@665: #ifndef _COREAUDIO_FILE_READER_H_ luisf@665: #define _COREAUDIO_FILE_READER_H_ luisf@665: luisf@665: #ifdef HAVE_COREAUDIO luisf@665: luisf@665: #include "CodedAudioFileReader.h" luisf@665: luisf@665: #include "base/Thread.h" luisf@665: luisf@665: #include luisf@665: luisf@665: class ProgressReporter; luisf@665: luisf@665: class CoreAudioFileReader : public CodedAudioFileReader luisf@665: { luisf@665: Q_OBJECT luisf@665: luisf@665: public: luisf@665: enum DecodeMode { luisf@665: DecodeAtOnce, // decode the file on construction, with progress luisf@665: DecodeThreaded // decode in a background thread after construction luisf@665: }; luisf@665: luisf@665: CoreAudioFileReader(FileSource source, luisf@665: DecodeMode decodeMode, luisf@665: CacheMode cacheMode, luisf@665: size_t targetRate = 0, Chris@920: bool normalised = false, luisf@665: ProgressReporter *reporter = 0); luisf@665: virtual ~CoreAudioFileReader(); luisf@665: luisf@665: virtual QString getError() const { return m_error; } luisf@665: virtual QString getLocation() const { return m_source.getLocation(); } luisf@665: virtual QString getTitle() const { return m_title; } luisf@665: luisf@665: static void getSupportedExtensions(std::set &extensions); luisf@665: static bool supportsExtension(QString ext); luisf@665: static bool supportsContentType(QString type); luisf@665: static bool supports(FileSource &source); luisf@665: luisf@665: virtual int getDecodeCompletion() const { return m_completion; } luisf@665: luisf@665: virtual bool isUpdating() const { luisf@665: return m_decodeThread && m_decodeThread->isRunning(); luisf@665: } luisf@665: luisf@665: public slots: luisf@665: void cancelled(); luisf@665: luisf@665: protected: luisf@665: FileSource m_source; luisf@665: QString m_path; luisf@665: QString m_error; luisf@665: QString m_title; luisf@665: luisf@665: class D; luisf@665: D *m_d; luisf@665: luisf@665: ProgressReporter *m_reporter; luisf@665: bool m_cancelled; luisf@665: int m_completion; luisf@665: luisf@665: class DecodeThread : public Thread luisf@665: { luisf@665: public: luisf@665: // DecodeThread(QuickTimeFileReader *reader) : m_reader(reader) { } luisf@665: virtual void run(); luisf@665: luisf@665: protected: luisf@665: // QuickTimeFileReader *m_reader; luisf@665: }; luisf@665: luisf@665: DecodeThread *m_decodeThread; luisf@665: }; luisf@665: luisf@665: #endif luisf@665: luisf@665: #endif