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 <QVariant>
14 #include <QIODevice>
15 #include "qmmp.h"
16 #include "audioparameters.h"
17 #include "channelmap.h"
18 
19 class QmmpPluginCache;
20 class DecoderFactory;
21 
26 class QMMP_EXPORT Decoder
27 {
28 public:
33  Decoder(QIODevice *input = nullptr);
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  const 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  void setProperty(Qmmp::TrackProperty key, const QVariant &value);
119  void setProperties(const QMap<Qmmp::TrackProperty, QString> &properties);
123  const QMap<Qmmp::TrackProperty, QString> &properties() const;
129  static DecoderFactory *findByFilePath(const QString &path, bool useContent = false);
133  static DecoderFactory *findByMime(const QString &mime);
138  static DecoderFactory *findByContent(QIODevice *input);
142  static DecoderFactory *findByProtocol(const QString &p);
147  static QList<DecoderFactory *> findByFileExtension(const QString &path);
151  static QList<DecoderFactory*> factories();
155  static QList<DecoderFactory*> enabledFactories();
159  static QStringList nameFilters();
163  static QStringList contentTypes();
168  static QString file(const DecoderFactory *factory);
173  static QStringList protocols();
179  static void setEnabled(DecoderFactory *factory, bool enable = true);
184  static bool isEnabled(const DecoderFactory* factory);
185 
186 protected:
193  void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f = Qmmp::PCM_S16LE);
200  void configure(quint32 srate, int channels, Qmmp::AudioFormat f = Qmmp::PCM_S16LE);
205  void configure(const AudioParameters &p);
206 
207 private:
208  static void loadPlugins();
209  static QList<QmmpPluginCache*> *m_cache;
210  static QStringList m_disabledNames;
211  AudioParameters m_parameters;
212  QMap<Qmmp::TrackProperty, QString> m_properties;
213  QIODevice *m_input;
214  bool m_hasMetaData = false;
215  QMap<Qmmp::MetaData, QString> m_metaData;
216  QMap <Qmmp::ReplayGainKey, double> m_rg; //replay gain information
217 };
218 
219 #endif // DECODER_H
The AudioParameters class keeps information about audio settings.
Definition: audioparameters.h:32
This class represents audio channel mapping.
Definition: channelmap.h:31
Input plugin interface (decoder factory).
Definition: decoderfactory.h:54
The Decoder class provides the base interface class of audio decoders.
Definition: decoder.h:27
void setProperties(const QMap< Qmmp::TrackProperty, QString > &properties)
static QStringList nameFilters()
static QList< DecoderFactory * > factories()
static DecoderFactory * findByMime(const QString &mime)
static QStringList protocols()
static QStringList contentTypes()
const QMap< Qmmp::ReplayGainKey, double > & replayGainInfo() const
void setProperty(Qmmp::TrackProperty key, const QVariant &value)
virtual ~Decoder()
virtual bool initialize()=0
QIODevice * input()
static DecoderFactory * findByProtocol(const QString &p)
void addMetaData(const QMap< Qmmp::MetaData, QString > &metaData)
void configure(const AudioParameters &p)
static DecoderFactory * findByContent(QIODevice *input)
virtual int bitrate() const =0
virtual void next()
bool hasMetaData() const
virtual qint64 read(unsigned char *data, qint64 maxSize)=0
Decoder(QIODevice *input=nullptr)
void configure(quint32 srate, const ChannelMap &map, Qmmp::AudioFormat f=Qmmp::PCM_S16LE)
static QList< DecoderFactory * > findByFileExtension(const QString &path)
void configure(quint32 srate, int channels, Qmmp::AudioFormat f=Qmmp::PCM_S16LE)
virtual const QString nextURL() const
static QString file(const DecoderFactory *factory)
static void setEnabled(DecoderFactory *factory, bool enable=true)
const AudioParameters & audioParameters() const
static bool isEnabled(const DecoderFactory *factory)
static QList< DecoderFactory * > enabledFactories()
const QMap< Qmmp::TrackProperty, QString > & properties() const
virtual void seek(qint64 time)=0
QMap< Qmmp::MetaData, QString > takeMetaData()
static DecoderFactory * findByFilePath(const QString &path, bool useContent=false)
virtual qint64 totalTime() const =0
void setReplayGainInfo(const QMap< Qmmp::ReplayGainKey, double > &rg)
TrackProperty
Definition: qmmp.h:82
AudioFormat
Definition: qmmp.h:106
@ PCM_S16LE
Definition: qmmp.h:110