00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef QMMPAUDIOENGINE_P_H
00022 #define QMMPAUDIOENGINE_P_H
00023
00024 #include <QQueue>
00025 #include <QHash>
00026 #include "abstractengine.h"
00027 #include "audioparameters.h"
00028
00029 class QIODevice;
00030 class Output;
00031 class Effect;
00032 class DecoderFactory;
00033 class StateHandler;
00034 class Decoder;
00035 class InputSource;
00036 class EffectFactory;
00037 class ReplayGain;
00038 class QmmpSettings;
00039
00043 class QmmpAudioEngine : public AbstractEngine
00044 {
00045 Q_OBJECT
00046 public:
00047 QmmpAudioEngine(QObject *parent);
00048 ~QmmpAudioEngine();
00049
00050 bool play();
00051 bool enqueue(InputSource *source);
00052 qint64 totalTime();
00053 void seek(qint64 time);
00054 void stop();
00055 void pause();
00056 void addEffect(EffectFactory *factory);
00057 void removeEffect(EffectFactory *factory);
00058
00059 static QmmpAudioEngine *instance();
00060
00061 private slots:
00062 void finish();
00063 void updateReplayGainSettings();
00064
00065 private:
00066 void run();
00067 void reset();
00068 void flush(bool = false);
00069 void addOffset();
00070 qint64 produceSound(char *data, qint64 size, quint32 brate);
00071 void sendMetaData();
00072 Output *createOutput();
00073 void prepareEffects(Decoder *d);
00074
00075 DecoderFactory *m_factory;
00076 QList <Effect*> m_effects;
00077 QList <Effect*> m_blockedEffects;
00078 Output *m_output;
00079
00080 bool m_done, m_finish, m_user_stop;
00081 uint m_bks;
00082 qint64 m_totalTime, m_seekTime;
00083 qint64 m_output_at, m_output_size;
00084 int m_bitrate, m_chan, m_bps;
00085 unsigned char *m_output_buf;
00086 Decoder *m_decoder;
00087 QQueue <Decoder*> m_decoders;
00088 QHash <Decoder*, InputSource*> m_inputs;
00089 AudioParameters m_ap;
00090 bool m_next;
00091 static QmmpAudioEngine *m_instance;
00092 ReplayGain *m_replayGain;
00093 QmmpSettings *m_settings;
00094 };
00095
00096 #endif // QMMPAUDIOENGINE_P_H