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 "channelmap.h" 00018 #include "decoderfactory.h" 00019 00020 class QmmpPluginCache; 00021 00026 class Decoder 00027 { 00028 public: 00033 Decoder(QIODevice *input = 0); 00037 virtual ~Decoder(); 00042 virtual bool initialize() = 0; 00047 virtual qint64 totalTime() = 0; 00052 virtual void seek(qint64 time) = 0; 00058 virtual qint64 read(unsigned char *data, qint64 maxSize) = 0; 00063 virtual int bitrate() = 0; 00070 virtual void next(); 00076 virtual const QString nextURL() const; 00080 AudioParameters audioParameters() const; 00084 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(); 00135 static QList<DecoderFactory*> enabledFactories(); 00140 static QString file(DecoderFactory *factory); 00145 static QStringList protocols(); 00151 static void setEnabled(DecoderFactory* factory, bool enable = true); 00156 static bool isEnabled(DecoderFactory* factory); 00157 00158 protected: 00165 void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); 00172 void configure(quint32 srate, int channels, Qmmp::AudioFormat f = Qmmp::PCM_S16LE); 00173 00174 private: 00175 static void loadPlugins(); 00176 static DecoderFactory *m_lastFactory; 00177 static QList<QmmpPluginCache*> *m_cache; 00178 static QStringList m_disabledNames; 00179 AudioParameters m_parameters; 00180 QIODevice *m_input; 00181 bool m_hasMetaData; 00182 QMap<Qmmp::MetaData, QString> m_metaData; 00183 QMap <Qmmp::ReplayGainKey, double> m_rg; //replay gain information 00184 }; 00185 00186 #endif // DECODER_H