Qmmp
decoder.h
1 // Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com>
2 //
3 // Use, modification and distribution is allowed without limitation,
4 // warranty, or liability of any kind.
5 //
6 
7 #ifndef DECODER_H
8 #define DECODER_H
9 
10 #include <QStringList>
11 #include <QList>
12 #include <QMap>
13 #include <QIODevice>
14 #include "fileinfo.h"
15 #include "qmmp.h"
16 #include "audioparameters.h"
17 #include "channelmap.h"
18 #include "decoderfactory.h"
19 
20 class QmmpPluginCache;
21 
26 class Decoder
27 {
28 public:
33  Decoder(QIODevice *input = 0);
37  virtual ~Decoder();
42  virtual bool initialize() = 0;
47  virtual qint64 totalTime() const = 0;
52  virtual void seek(qint64 time) = 0;
58  virtual qint64 read(unsigned char *data, qint64 maxSize) = 0;
63  virtual int bitrate() const = 0;
70  virtual void next();
76  virtual const QString nextURL() const;
84  QMap<Qmmp::ReplayGainKey, double> replayGainInfo() const;
89  void setReplayGainInfo(const QMap<Qmmp::ReplayGainKey,double> &rg);
93  QIODevice *input();
99  void addMetaData(const QMap<Qmmp::MetaData, QString> &metaData);
103  bool hasMetaData() const;
108  QMap<Qmmp::MetaData, QString> takeMetaData();
114  static DecoderFactory *findByFilePath(const QString &path, bool useContent = false);
118  static DecoderFactory *findByMime(const QString &mime);
123  static DecoderFactory *findByContent(QIODevice *input);
127  static DecoderFactory *findByProtocol(const QString &p);
132  static QList<DecoderFactory *> findByFileExtension(const QString &path);
136  static QList<DecoderFactory*> factories();
140  static QList<DecoderFactory*> enabledFactories();
145  static QString file(DecoderFactory *factory);
150  static QStringList protocols();
156  static void setEnabled(DecoderFactory* factory, bool enable = true);
161  static bool isEnabled(DecoderFactory* factory);
162 
163 protected:
170  void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f = Qmmp::PCM_S16LE);
177  void configure(quint32 srate, int channels, Qmmp::AudioFormat f = Qmmp::PCM_S16LE);
182  void configure(const AudioParameters &p);
183 
184 private:
185  static void loadPlugins();
186  static QList<QmmpPluginCache*> *m_cache;
187  static QStringList m_disabledNames;
188  AudioParameters m_parameters;
189  QIODevice *m_input;
190  bool m_hasMetaData;
191  QMap<Qmmp::MetaData, QString> m_metaData;
192  QMap <Qmmp::ReplayGainKey, double> m_rg; //replay gain information
193 };
194 
195 #endif // DECODER_H
static DecoderFactory * findByMime(const QString &mime)
Definition: qmmp.h:96
static DecoderFactory * findByFilePath(const QString &path, bool useContent=false)
static QList< DecoderFactory * > factories()
virtual ~Decoder()
virtual const QString nextURL() const
The AudioParameters class keeps information about audio settings.
Definition: audioparameters.h:31
virtual bool initialize()=0
virtual qint64 totalTime() const =0
bool hasMetaData() const
virtual void next()
virtual qint64 read(unsigned char *data, qint64 maxSize)=0
static bool isEnabled(DecoderFactory *factory)
QMap< Qmmp::ReplayGainKey, double > replayGainInfo() const
Decoder(QIODevice *input=0)
static QString file(DecoderFactory *factory)
Input plugin interface (decoder factory).
Definition: decoderfactory.h:67
static QList< DecoderFactory * > findByFileExtension(const QString &path)
The Decoder class provides the base interface class of audio decoders.
Definition: decoder.h:26
static QList< DecoderFactory * > enabledFactories()
static DecoderFactory * findByProtocol(const QString &p)
void addMetaData(const QMap< Qmmp::MetaData, QString > &metaData)
QIODevice * input()
void setReplayGainInfo(const QMap< Qmmp::ReplayGainKey, double > &rg)
AudioParameters audioParameters() const
static void setEnabled(DecoderFactory *factory, bool enable=true)
virtual int bitrate() const =0
virtual void seek(qint64 time)=0
void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f=Qmmp::PCM_S16LE)
static QStringList protocols()
QMap< Qmmp::MetaData, QString > takeMetaData()
AudioFormat
Definition: qmmp.h:91
static DecoderFactory * findByContent(QIODevice *input)