00001
00002
00003
00004
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;
00174 };
00175
00176 #endif // DECODER_H