Qmmp
/usr/src/RPM/BUILD/qmmp-0.7-svn/src/qmmp/output.h
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 <QObject>
00012 #include <QThread>
00013 #include <QEvent>
00014 #include <QList>
00015 #include <QHash>
00016 #include <QIODevice>
00017 #include "visual.h"
00018 #include "outputfactory.h"
00019 #include "visualfactory.h"
00020 #include "statehandler.h"
00021 #include "audioparameters.h"
00022 #include "recycler.h"
00023 
00024 class QTimer;
00025 class QmmpSettings;
00026 
00031 class Output : public QThread
00032 {
00033     Q_OBJECT
00034 public:
00039     Output(QObject * parent = 0);
00043     ~Output();
00052     virtual bool initialize(quint32 freq, int chan, Qmmp::AudioFormat format) = 0;
00056     virtual qint64 latency() = 0;
00061     void pause();
00065     void stop();
00069     void finish();
00073     qint64 written();
00079     void seek(qint64 pos, bool reset = false);
00083     Recycler *recycler();
00087     QMutex *mutex();
00092     void setStateHandler(StateHandler *handler);
00096     AudioParameters audioParameters() const;
00100     quint32 sampleRate();
00104     int channels();
00108     Qmmp::AudioFormat format() const;
00112     int sampleSize() const;
00116     qint64 bufferSize() const;
00122     static Output *create(QObject *parent = 0);
00126     static QList<OutputFactory*> *factories();
00131     static QString file(OutputFactory *factory);
00135     static void setCurrentFactory(OutputFactory* factory);
00139     static OutputFactory *currentFactory();
00140 
00141 protected:
00147     virtual qint64 writeAudio(unsigned char *data, qint64 maxSize) = 0;
00152     virtual void drain() = 0;
00157     virtual void reset() = 0;
00161     virtual void suspend();
00165     virtual void resume();
00172     void configure(quint32 freq, int chan, Qmmp::AudioFormat format);
00173 
00174 private slots:
00175     void updateEqSettings();
00176 
00177 private:
00178     void run(); //thread run function
00179     void status();
00180     void dispatch(qint64 elapsed,
00181                   int bitrate,
00182                   int frequency,
00183                   int bits,
00184                   int channels);
00185     void dispatch(const Qmmp::State &state);
00186     void dispatchVisual(Buffer *buffer);
00187     void clearVisuals();
00188     bool m_skip;
00189     QMutex m_mutex;
00190     Recycler m_recycler;
00191     StateHandler *m_handler;
00192     quint32 m_frequency;
00193     int m_channels, m_kbps;
00194     Qmmp::AudioFormat m_format;
00195     qint64 m_bytesPerMillisecond;
00196     bool m_userStop, m_pause;
00197     bool m_prev_pause;
00198     bool m_finish;
00199     bool m_useEq, m_eqEnabled;
00200     qint64 m_totalWritten, m_currentMilliseconds;
00201     unsigned char *m_visBuffer;
00202     qint64 m_visBufferSize;
00203     QmmpSettings *m_settings;
00204     static void checkFactories();
00205     static QList<OutputFactory*> *m_factories;
00206     static QHash <OutputFactory*, QString> *m_files;
00207 };
00208 
00209 
00210 #endif // OUTPUT_H
 All Classes Functions Variables Enumerations Enumerator