1d8a4f51663c02897df23f6c89cdae2d1f500b67
[WebKit-https.git] / Source / WebCore / platform / graphics / qt / MediaPlayerPrivatePhonon.h
1 /*
2     Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
3     Copyright (C) 2009 Apple Inc. All rights reserved.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef MediaPlayerPrivatePhonon_h
22 #define MediaPlayerPrivatePhonon_h
23
24 #include "MediaPlayerPrivate.h"
25
26 #include <QObject>
27 #include <phononnamespace.h>
28
29 QT_BEGIN_NAMESPACE
30 class QWidget;
31 class QUrl;
32
33 namespace Phonon {
34     class MediaObject;
35     class VideoWidget;
36     class AudioOutput;
37     class MediaSource;
38 }
39 QT_END_NAMESPACE
40
41 namespace WebCore {
42
43     class MediaPlayerPrivatePhonon : public QObject, public MediaPlayerPrivateInterface {
44
45         Q_OBJECT
46
47     public:
48         static void registerMediaEngine(MediaEngineRegistrar);
49         ~MediaPlayerPrivatePhonon();
50
51         // These enums are used for debugging
52         Q_ENUMS(ReadyState NetworkState PhononState)
53
54         enum ReadyState {
55             HaveNothing, 
56             HaveMetadata, 
57             HaveCurrentData, 
58             HaveFutureData, 
59             HaveEnoughData
60         };
61
62         enum NetworkState {
63             Empty, 
64             Idle, 
65             Loading, 
66             Loaded, 
67             FormatError, 
68             NetworkError, 
69             DecodeError
70         };
71
72         enum PhononState {
73             LoadingState,
74             StoppedState,
75             PlayingState,
76             BufferingState,
77             PausedState,
78             ErrorState
79         };
80
81         IntSize naturalSize() const;
82         bool hasVideo() const;
83         bool hasAudio() const;
84
85         void load(const String &url);
86         void cancelLoad();
87
88         void play();
89         void pause();
90
91         bool paused() const;
92         bool seeking() const;
93
94         float duration() const;
95         float currentTime() const;
96         void seek(float);
97
98         void setRate(float);
99         void setVolume(float);
100         void setMuted(bool);
101
102         MediaPlayer::NetworkState networkState() const;
103         MediaPlayer::ReadyState readyState() const;
104
105         PassRefPtr<TimeRanges> buffered() const;
106         float maxTimeSeekable() const;
107         unsigned bytesLoaded() const;
108         unsigned totalBytes() const;
109
110         void setVisible(bool);
111         void setSize(const IntSize&);
112
113         void paint(GraphicsContext*, const IntRect&);
114
115     protected:
116         bool eventFilter(QObject*, QEvent*);
117
118     private slots:
119         void stateChanged(Phonon::State, Phonon::State);
120         void metaDataChanged();
121         void seekableChanged(bool);
122         void hasVideoChanged(bool);
123         void bufferStatus(int);
124         void finished();
125         void currentSourceChanged(const Phonon::MediaSource&);
126         void aboutToFinish();
127         void totalTimeChanged(qint64);
128
129     private:
130         MediaPlayerPrivatePhonon(MediaPlayer*);
131         static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
132
133         static void getSupportedTypes(HashSet<String>&);
134         static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs);
135         static HashSet<String>& supportedTypesCache();
136         static bool isAvailable() { return true; }
137
138         void updateStates();
139
140         MediaPlayer* m_player;
141
142         MediaPlayer::NetworkState m_networkState;
143         MediaPlayer::ReadyState m_readyState;
144
145         Phonon::MediaObject* m_mediaObject;
146         Phonon::VideoWidget* m_videoWidget;
147         Phonon::AudioOutput* m_audioOutput;
148
149         bool m_isVisible;
150     };
151 }
152
153 #endif // MediaPlayerPrivatePhonon_h