/* 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 . */ #ifndef PHONON_MMF_ABSTRACTMEDIAPLAYER_H #define PHONON_MMF_ABSTRACTMEDIAPLAYER_H #include #include #include #include "abstractplayer.h" class RFile; QT_BEGIN_NAMESPACE namespace Phonon { namespace MMF { class AudioOutput; class MediaObject; /** * Interface via which MMF client APIs for both audio and video can be * accessed. */ class AbstractMediaPlayer : public AbstractPlayer { Q_OBJECT protected: AbstractMediaPlayer(MediaObject *parent, const AbstractPlayer *player); public: virtual void open(const Phonon::MediaSource&, RFile&); // MediaObjectInterface virtual void play(); virtual void pause(); virtual void stop(); virtual void seek(qint64 milliseconds); virtual bool isSeekable() const; virtual void volumeChanged(qreal volume); protected: // AbstractPlayer virtual void doSetTickInterval(qint32 interval); virtual void doPlay() = 0; virtual void doPause() = 0; virtual void doStop() = 0; virtual void doSeek(qint64 pos) = 0; virtual int setDeviceVolume(int mmfVolume) = 0; virtual int openFile(RFile& file) = 0; virtual int openUrl(const QString& url) = 0; virtual int bufferStatus() const = 0; virtual void close() = 0; virtual void changeState(PrivateState newState); void updateMetaData(); virtual int numberOfMetaDataEntries() const = 0; virtual QPair metaDataEntry(int index) const = 0; protected: void bufferingStarted(); void bufferingComplete(); void maxVolumeChanged(int maxVolume); void playbackComplete(int error); static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &); private: void startPositionTimer(); void stopPositionTimer(); void startBufferStatusTimer(); void stopBufferStatusTimer(); void stopTimers(); void doVolumeChanged(); void emitMarksIfReached(qint64 position); void resetMarksIfRewound(); private Q_SLOTS: void positionTick(); void bufferStatusTick(); private: MediaObject *const m_parent; /** * This flag is set to true if play is called when the object is * in a Loading state. Once loading is complete, playback will * be started. */ bool m_playPending; QScopedPointer m_positionTimer; QScopedPointer m_bufferStatusTimer; PrivateState m_stateBeforeBuffering; int m_mmfMaxVolume; bool m_prefinishMarkSent; bool m_aboutToFinishSent; QMultiMap m_metaData; }; } } QT_END_NAMESPACE #endif