#ifndef PHONON_DUMMY_MEDIAOBJECT_H #define PHONON_DUMMY_MEDIAOBJECT_H #include "backend.h" #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QTimer; typedef QMultiMap TagMap; namespace Phonon { namespace Dummy { class VideoWidget; class AudioPath; class VideoPath; class AudioOutput; class MediaObject : public QObject, public MediaObjectInterface { friend class Stream; Q_OBJECT Q_INTERFACES(Phonon::MediaObjectInterface ) public: MediaObject(Backend *backend, QObject *parent); ~MediaObject(); Phonon::State state() const; bool hasVideo() const; bool isSeekable() const; qint64 currentTime() const; qint32 tickInterval() const; void setTickInterval(qint32 newTickInterval); void play(); void pause(); void stop(); void seek(qint64 time); QString errorString() const; Phonon::ErrorType errorType() const; QUrl url() const; qint64 totalTime() const; qint32 prefinishMark() const; void setPrefinishMark(qint32 newPrefinishMark); qint32 transitionTime() const; void setTransitionTime(qint32); qint64 remainingTime() const; void setSource(const MediaSource &source); void setNextSource(const MediaSource &source); MediaSource source() const; void saveState(); void resumeState(); public Q_SLOTS: void setState(State); Q_SIGNALS: void currentSourceChanged(const MediaSource &newSource); void stateChanged(Phonon::State newstate, Phonon::State oldstate); void tick(qint64 time); void metaDataChanged(QMultiMap); void seekableChanged(bool); void hasVideoChanged(bool); void finished(); void prefinishMarkReached(qint32); void aboutToFinish(); void totalTimeChanged(qint64 length); void bufferStatus(int percentFilled); QMultiMap metaData(); void setMetaData(QMultiMap newData); private Q_SLOTS: void emitTick(); private: bool m_resumeState; State m_oldState; quint64 m_oldPos; quint64 currentPos; bool m_hasVideo; qint32 m_tickInterval; QTimer *m_tickTimer; Phonon::ErrorType m_error; QString m_errorString; qint64 m_totalTime; qint32 m_prefinishMark; qint32 m_transitionTime; MediaSource m_source; MediaSource m_nextSource; bool m_prefinishMarkReachedNotEmitted; bool m_aboutToFinishEmitted; int m_previousTickTime; State m_state; State m_pendingState; struct chunk { char id[4]; quint32 size; }; struct RIFFHeader { chunk descriptor; char type[4]; }; struct WAVEHeader { chunk descriptor; quint16 audioFormat; // PCM = 1 quint16 numChannels; quint32 sampleRate; quint32 byteRate; quint16 blockAlign; quint16 bitsPerSample; quint32 xFreq1; chunk fact; quint32 xfact; chunk data; }; struct DATAHeader { chunk descriptor; quint8 data[]; }; struct CombinedHeader { RIFFHeader riff; WAVEHeader wave; DATAHeader data; }; CombinedHeader header; }; } } //namespace Phonon::Dummy QT_END_NAMESPACE #endif // PHONON_DUMMY_MEDIAOBJECT_H