Qmmp
|
00001 00002 // Copyright (c) 2000-2001 Brad Hughes <bhughes@trolltech.com> 00003 // 00004 // Use, modification and distribution is allowed without limitation, 00005 // warranty, or liability of any kind. 00006 // 00007 00008 #ifndef OUTPUT_H 00009 #define OUTPUT_H 00010 00011 #include <QList> 00012 #include <QIODevice> 00013 #include <QMap> 00014 #include "outputfactory.h" 00015 #include "audioparameters.h" 00016 #include "channelmap.h" 00017 00018 class QTimer; 00019 class QmmpSettings; 00020 class QmmpPluginCache; 00021 00026 class Output 00027 { 00028 public: 00032 Output(); 00036 virtual ~Output(); 00045 virtual bool initialize(quint32 freq, ChannelMap map, Qmmp::AudioFormat format) = 0; 00049 virtual qint64 latency() = 0; 00059 virtual qint64 writeAudio(unsigned char *data, qint64 maxSize) = 0; 00064 virtual void drain() = 0; 00069 virtual void reset() = 0; 00073 virtual void suspend(); 00077 virtual void resume(); 00083 virtual void setMetaData(const QMap<Qmmp::MetaData, QString> &metaData); 00087 AudioParameters audioParameters() const; 00091 quint32 sampleRate() const; 00095 int channels() const; 00099 const ChannelMap channelMap() const; 00103 Qmmp::AudioFormat format() const; 00107 int sampleSize() const; 00112 static Output *create(); 00116 static QList<OutputFactory*> factories(); 00121 static QString file(OutputFactory *factory); 00125 static void setCurrentFactory(OutputFactory* factory); 00129 static OutputFactory *currentFactory(); 00130 00131 protected: 00138 void configure(quint32 freq, ChannelMap map, Qmmp::AudioFormat format); 00139 00140 private: 00141 quint32 m_frequency; 00142 ChannelMap m_chan_map; 00143 Qmmp::AudioFormat m_format; 00144 int m_sample_size; 00145 static void loadPlugins(); 00146 static QList<QmmpPluginCache*> *m_cache; 00147 }; 00148 00149 00150 #endif // OUTPUT_H