lbajardsilogic@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@0: lbajardsilogic@0: /* lbajardsilogic@0: Sonic Visualiser lbajardsilogic@0: An audio file viewer and annotation editor. lbajardsilogic@0: Centre for Digital Music, Queen Mary, University of London. lbajardsilogic@0: This file copyright 2006 Chris Cannam. lbajardsilogic@0: lbajardsilogic@0: This program is free software; you can redistribute it and/or lbajardsilogic@0: modify it under the terms of the GNU General Public License as lbajardsilogic@0: published by the Free Software Foundation; either version 2 of the lbajardsilogic@0: License, or (at your option) any later version. See the file lbajardsilogic@0: COPYING included with this distribution for more information. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #ifndef _MP3_FILE_READER_H_ lbajardsilogic@0: #define _MP3_FILE_READER_H_ lbajardsilogic@0: lbajardsilogic@0: #ifdef HAVE_MAD lbajardsilogic@0: lbajardsilogic@0: #include "CodedAudioFileReader.h" lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: #include lbajardsilogic@0: lbajardsilogic@0: class QProgressDialog; lbajardsilogic@0: lbajardsilogic@0: class MP3FileReader : public CodedAudioFileReader lbajardsilogic@0: { lbajardsilogic@0: public: lbajardsilogic@0: MP3FileReader(QString path, bool showProgress, CacheMode cacheMode); lbajardsilogic@0: virtual ~MP3FileReader(); lbajardsilogic@0: lbajardsilogic@0: virtual QString getError() const { return m_error; } lbajardsilogic@0: lbajardsilogic@0: static void getSupportedExtensions(std::set &extensions); lbajardsilogic@0: lbajardsilogic@0: protected: lbajardsilogic@0: QString m_path; lbajardsilogic@0: QString m_error; lbajardsilogic@0: size_t m_fileSize; lbajardsilogic@0: double m_bitrateNum; lbajardsilogic@0: size_t m_bitrateDenom; lbajardsilogic@0: lbajardsilogic@0: QProgressDialog *m_progress; lbajardsilogic@0: bool m_cancelled; lbajardsilogic@0: lbajardsilogic@0: struct DecoderData lbajardsilogic@0: { lbajardsilogic@0: unsigned char const *start; lbajardsilogic@0: unsigned long length; lbajardsilogic@0: MP3FileReader *reader; lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: bool decode(void *mm, size_t sz); lbajardsilogic@0: enum mad_flow accept(struct mad_header const *, struct mad_pcm *); lbajardsilogic@0: lbajardsilogic@0: static enum mad_flow input(void *, struct mad_stream *); lbajardsilogic@0: static enum mad_flow output(void *, struct mad_header const *, struct mad_pcm *); lbajardsilogic@0: static enum mad_flow error(void *, struct mad_stream *, struct mad_frame *); lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: #endif