/* 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" #ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD # include "download.h" #endif 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(); virtual void close(); // MediaObjectInterface virtual void play(); virtual void pause(); virtual void stop(); virtual void seek(qint64 milliseconds); virtual bool isSeekable() const; virtual qint64 currentTime() const; virtual void volumeChanged(qreal volume); protected: // AbstractPlayer virtual void doSetTickInterval(qint32 interval); virtual Phonon::State phononState(PrivateState state) const; virtual void changeState(PrivateState newState); 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(const QString &fileName) = 0; virtual int openFile(RFile& file) = 0; virtual int openUrl(const QString& url, int iap) = 0; virtual int openDescriptor(const TDesC8 &des) = 0; virtual int bufferStatus() const = 0; virtual void doClose() = 0; void updateMetaData(); virtual qint64 getCurrentTime() const = 0; virtual int numberOfMetaDataEntries() const = 0; virtual QPair metaDataEntry(int index) const = 0; protected: void bufferingStarted(); void bufferingComplete(); void maxVolumeChanged(int maxVolume); void loadingComplete(int error); void playbackComplete(int error); static qint64 toMilliSeconds(const TTimeIntervalMicroSeconds &); bool isProgressiveDownload() const; bool progressiveDownloadStalled() const; private: void startPositionTimer(); void stopPositionTimer(); void startBufferStatusTimer(); void stopBufferStatusTimer(); void stopTimers(); void doVolumeChanged(); void emitMarksIfReached(qint64 position); void resetMarksIfRewound(); void startPlayback(); void setProgressiveDownloadStalled(); enum Pending { NothingPending, PausePending, PlayPending }; void setPending(Pending pending); private Q_SLOTS: void positionTick(); void bufferStatusTick(); #ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD void downloadLengthChanged(qint64); void downloadStateChanged(Download::State); #endif private: MediaObject *const m_parent; Pending m_pending; QScopedPointer m_positionTimer; qint64 m_position; QScopedPointer m_bufferStatusTimer; PrivateState m_stateBeforeBuffering; int m_mmfMaxVolume; bool m_prefinishMarkSent; bool m_aboutToFinishSent; // Used for playback of resource files TPtrC8 m_buffer; #ifdef PHONON_MMF_PROGRESSIVE_DOWNLOAD Download *m_download; bool m_downloadStalled; #endif QMultiMap m_metaData; }; } } QT_END_NAMESPACE #endif