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 <QStringList> 00011 #include <QList> 00012 #include <QMap> 00013 #include <QIODevice> 00014 #include "fileinfo.h" 00015 #include "qmmp.h" 00016 #include "audioparameters.h" 00017 #include "decoderfactory.h" 00018 00019 class QmmpPluginCache; 00020 00025 class Decoder 00026 { 00027 public: 00032 Decoder(QIODevice *input = 0); 00036 virtual ~Decoder(); 00041 virtual bool initialize() = 0; 00046 virtual qint64 totalTime() = 0; 00051 virtual void seek(qint64 time) = 0; 00057 virtual qint64 read(char *data, qint64 maxSize) = 0; 00067 virtual qint64 read(float *data, qint64 samples); 00072 virtual int bitrate() = 0; 00079 virtual void next(); 00085 virtual const QString nextURL(); 00089 AudioParameters audioParameters() const; 00093 QMap<Qmmp::ReplayGainKey, double> replayGainInfo() const; 00100 void setReplayGainInfo(const QMap<Qmmp::ReplayGainKey,double> &rg, bool headroom = false); 00104 QIODevice *input(); 00110 void addMetaData(const QMap<Qmmp::MetaData, QString> &metaData); 00114 bool hasMetaData() const; 00118 bool hasHeadroom() const; 00123 QMap<Qmmp::MetaData, QString> takeMetaData(); 00129 static DecoderFactory *findByPath(const QString &path, bool useContent = false); 00133 static DecoderFactory *findByMime(const QString &mime); 00138 static DecoderFactory *findByContent(QIODevice *input); 00142 static DecoderFactory *findByProtocol(const QString &p); 00146 static QList<DecoderFactory*> factories(); 00150 static QList<DecoderFactory*> enabledFactories(); 00155 static QString file(DecoderFactory *factory); 00160 static QStringList protocols(); 00166 static void setEnabled(DecoderFactory* factory, bool enable = true); 00171 static bool isEnabled(DecoderFactory* factory); 00172 00173 protected: 00180 void configure(quint32 srate = 44100, int chan = 2, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); 00181 00182 private: 00183 static void loadPlugins(); 00184 static DecoderFactory *m_lastFactory; 00185 static QList<QmmpPluginCache*> *m_cache; 00186 static QStringList m_disabledNames; 00187 AudioParameters m_parameters; 00188 QIODevice *m_input; 00189 bool m_hasMetaData; 00190 bool m_hasHeadroom; 00191 QMap<Qmmp::MetaData, QString> m_metaData; 00192 QMap <Qmmp::ReplayGainKey, double> m_rg; //replay gain information 00193 }; 00194 00195 #endif // DECODER_H