diff options
Diffstat (limited to 'src/3rdparty/phonon/qt7/mediaobject.h')
-rw-r--r-- | src/3rdparty/phonon/qt7/mediaobject.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/src/3rdparty/phonon/qt7/mediaobject.h b/src/3rdparty/phonon/qt7/mediaobject.h new file mode 100644 index 0000000..27949ec --- /dev/null +++ b/src/3rdparty/phonon/qt7/mediaobject.h @@ -0,0 +1,171 @@ +/* This file is part of the KDE project. + + Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + + This library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 2.1 or 3 of the License. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this library. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef Phonon_QT7_MEDIAOBJECT_H +#define Phonon_QT7_MEDIAOBJECT_H + +#include <QtCore/QStringList> +#include <QtCore/QTime> +#include <phonon/mediaobjectinterface.h> +#include <phonon/addoninterface.h> + +#include "medianode.h" + +QT_BEGIN_NAMESPACE + +namespace Phonon +{ +namespace QT7 +{ + class QuickTimeVideoPlayer; + class QuickTimeAudioPlayer; + class QuickTimeMetaData; + class AudioGraph; + class MediaObjectAudioNode; + + class MediaObject : public MediaNode, + public Phonon::MediaObjectInterface, public Phonon::AddonInterface + { + Q_OBJECT + Q_INTERFACES(Phonon::MediaObjectInterface Phonon::AddonInterface) + + public: + MediaObject(QObject *parent); + ~MediaObject(); + + QStringList availableAudioStreams() const; + QStringList availableVideoStreams() const; + QStringList availableSubtitleStreams() const; + QString currentAudioStream(const QObject *audioPath) const; + QString currentVideoStream(const QObject *videoPath) const; + QString currentSubtitleStream(const QObject *videoPath) const; + + void setCurrentAudioStream(const QString &streamName,const QObject *audioPath); + void setCurrentVideoStream(const QString &streamName,const QObject *videoPath); + void setCurrentSubtitleStream(const QString &streamName,const QObject *videoPath); + + void play(); + void pause(); + void stop(); + void seek(qint64 milliseconds); + + qint32 tickInterval() const; + void setTickInterval(qint32 interval); + bool hasVideo() const; + bool isSeekable() const; + qint64 currentTime() const; + Phonon::State state() const; + + QString errorString() const; + Phonon::ErrorType errorType() const; + + qint64 totalTime() const; + MediaSource source() const; + void setSource(const MediaSource &); + void setNextSource(const MediaSource &source); + qint32 prefinishMark() const; + void setPrefinishMark(qint32); + qint32 transitionTime() const; + void setTransitionTime(qint32); + bool hasInterface(Interface interface) const; + QVariant interfaceCall(Interface interface, int command, const QList<QVariant> &arguments = QList<QVariant>()); + + QuickTimeVideoPlayer* videoPlayer() const; + QuickTimeAudioPlayer* audioPlayer() const; + + void setVolumeOnMovie(float volume); + bool setAudioDeviceOnMovie(int id); + + int videoOutputCount(); + + signals: + void stateChanged(Phonon::State,Phonon::State); + void tick(qint64); + void seekableChanged(bool); + void hasVideoChanged(bool); + void bufferStatus(int); + void finished(); + void aboutToFinish(); + void prefinishMarkReached(qint32); + void totalTimeChanged(qint64); + void metaDataChanged(QMultiMap<QString,QString>); + void currentSourceChanged(const MediaSource &newSource); + + protected: + void mediaNodeEvent(const MediaNodeEvent *event); + bool event(QEvent *event); + + private: + enum AudioSystem {AS_Unset, AS_Video, AS_Graph, AS_Silent} m_audioSystem; + Phonon::State m_state; + + QuickTimeVideoPlayer *m_videoPlayer; + QuickTimeAudioPlayer *m_audioPlayer; + QuickTimeVideoPlayer *m_nextVideoPlayer; + QuickTimeAudioPlayer *m_nextAudioPlayer; + MediaObjectAudioNode *m_mediaObjectAudioNode; + QuickTimeMetaData *m_metaData; + + qint32 m_tickInterval; + qint32 m_transitionTime; + quint32 m_prefinishMark; + quint32 m_currentTime; + float m_percentageLoaded; + + int m_tickTimer; + int m_bufferTimer; + int m_rapidTimer; + + bool m_waitNextSwap; + int m_swapTimeLeft; + QTime m_swapTime; + + void synchAudioVideo(); + void updateCurrentTime(); + void swapCurrentWithNext(qint32 transitionTime); + bool setState(Phonon::State state); + void pause_internal(); + void play_internal(); + void setupAudioSystem(); + void updateTimer(int &timer, int interval); + void bufferAudioVideo(); + void updateRapidly(); + void updateCrossFade(); + void updateAudioBuffers(); + void updateLipSynch(int allowedOffset); + void updateVideoFrames(); + void updateBufferStatus(); + void setMute(bool mute); + void inspectAudioGraphRecursive(AudioConnection *connection, int &effectCount, int &outputCount); + void inspectVideoGraphRecursive(MediaNode *node, int &effectCount, int &outputCount); + void inspectGraph(); + bool isCrossFading(); + + QString m_errorString; + Phonon::ErrorType m_errorType; + bool checkForError(); + + int m_audioEffectCount; + int m_audioOutputCount; + int m_videoEffectCount; + int m_videoOutputCount; + }; + +}} //namespace Phonon::QT7 + +QT_END_NAMESPACE +#endif // Phonon_QT7_MEDIAOBJECT_H |