Qmmp
|
00001 // Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> 00002 // 00003 // Use, modification and distribution is allowed without limitation, 00004 // warranty, or liability of any kind. 00005 // 00006 00007 #ifndef DECODER_H 00008 #define DECODER_H 00009 00010 #include <QList> 00011 #include <QStringList> 00012 #include <QUrl> 00013 #include <QList> 00014 #include <QPixmap> 00015 #include <QMap> 00016 #include "fileinfo.h" 00017 #include "qmmp.h" 00018 #include "audioparameters.h" 00019 00020 class Decoder; 00021 class DecoderFactory; 00022 class QIODevice; 00023 00028 class Decoder 00029 { 00030 public: 00035 Decoder(QIODevice *input = 0); 00039 virtual ~Decoder(); 00044 virtual bool initialize() = 0; 00049 virtual qint64 totalTime() = 0; 00053 virtual void seek(qint64 time) = 0; 00059 virtual qint64 read(char *data, qint64 maxSize) = 0; 00064 virtual int bitrate() = 0; 00071 virtual void next(); 00077 virtual const QString nextURL(); 00081 AudioParameters audioParameters() const; 00085 QMap<Qmmp::ReplayGainKey, double> replayGainInfo() const; 00089 void setReplayGainInfo(const QMap<Qmmp::ReplayGainKey,double> &rg); 00093 QIODevice *input(); 00099 void addMetaData(const QMap<Qmmp::MetaData, QString> &metaData); 00103 bool hasMetaData() const; 00108 QMap<Qmmp::MetaData, QString> takeMetaData(); 00114 static DecoderFactory *findByPath(const QString &path, bool useContent = false); 00118 static DecoderFactory *findByMime(const QString &mime); 00123 static DecoderFactory *findByContent(QIODevice *input); 00127 static DecoderFactory *findByProtocol(const QString &p); 00131 static QList<DecoderFactory*> *factories(); 00136 static QString file(DecoderFactory *factory); 00141 static QStringList protocols(); 00147 static void setEnabled(DecoderFactory* factory, bool enable = true); 00152 static bool isEnabled(DecoderFactory* factory); 00153 00154 protected: 00161 void configure(quint32 srate = 44100, int chan = 2, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); 00162 00163 private: 00164 static void checkFactories(); 00165 static QList<DecoderFactory*> *m_factories; 00166 static QList<DecoderFactory*> *m_disabledFactories; 00167 static DecoderFactory *m_lastFactory; 00168 static QHash <DecoderFactory*, QString> *m_files; 00169 AudioParameters m_parameters; 00170 QIODevice *m_input; 00171 bool m_hasMetaData; 00172 QMap<Qmmp::MetaData, QString> m_metaData; 00173 QMap <Qmmp::ReplayGainKey, double> m_rg; //replay gain information 00174 }; 00175 00176 #endif // DECODER_H