Reviewed and partially fixed by Tim Hatcher.
[WebKit-https.git] / WebCore / platform / graphics / MediaPlayer.cpp
1 /*
2  * Copyright (C) 2007 Apple Inc.  All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #include "config.h"
27
28 #if ENABLE(VIDEO)
29 #include "MediaPlayer.h"
30
31 #include "IntRect.h"
32 #include "MIMETypeRegistry.h"
33
34 #if PLATFORM(MAC)
35 #include "MediaPlayerPrivateQTKit.h"
36 #elif PLATFORM(GTK)
37 #include "MediaPlayerPrivateGStreamer.h"
38 #endif
39
40 namespace WebCore {
41     
42     MediaPlayer::MediaPlayer(MediaPlayerClient* client)
43     : m_mediaPlayerClient(client)
44     , m_private(new MediaPlayerPrivate(this))
45     , m_parentWidget(0)
46     , m_visible(false)
47     , m_rate(1.0f)
48     , m_volume(0.5f)
49     , m_muted(false)
50 {
51 }
52
53 MediaPlayer::~MediaPlayer()
54 {
55     delete m_private;
56 }
57
58 void MediaPlayer::load(String url)
59 {
60     m_private->load(url);
61 }    
62
63 void MediaPlayer::cancelLoad()
64 {
65     m_private->cancelLoad();
66 }    
67
68 void MediaPlayer::play()
69 {
70     m_private->play();
71 }
72
73 void MediaPlayer::pause()
74 {
75     m_private->pause();
76 }
77
78 float MediaPlayer::duration() const
79 {
80     return m_private->duration();
81 }
82
83 float MediaPlayer::currentTime() const
84 {
85     return m_private->currentTime();  
86 }
87
88 void MediaPlayer::seek(float time)
89 {
90     m_private->seek(time);
91 }
92
93 bool MediaPlayer::paused() const
94 {
95     return m_private->paused();
96 }
97
98 bool MediaPlayer::seeking() const
99 {
100     return m_private->seeking();
101 }
102
103 IntSize MediaPlayer::naturalSize()
104 {
105     return m_private->naturalSize();
106 }
107
108 bool MediaPlayer::hasVideo()
109 {
110     return m_private->hasVideo();
111 }
112
113 MediaPlayer::NetworkState MediaPlayer::networkState()
114 {
115     return m_private->networkState();
116 }
117
118 MediaPlayer::ReadyState MediaPlayer::readyState()
119 {
120     return m_private->readyState();
121 }
122
123 float MediaPlayer::volume() const
124 {
125     return m_volume;
126 }
127
128 void MediaPlayer::setVolume(float volume)
129 {
130     if (volume != m_volume) {
131         m_volume = volume;
132         m_private->setVolume(volume);   
133     }
134 }
135
136 float MediaPlayer::rate() const
137 {
138     return m_rate;
139 }
140
141 void MediaPlayer::setRate(float rate)
142 {
143     if (rate == m_rate) 
144         return;
145     m_rate = rate;
146     m_private->setRate(rate);   
147 }
148
149 bool MediaPlayer::muted() const
150 {
151     return m_muted;
152 }
153
154 void MediaPlayer::setMuted(bool muted)
155 {
156     if (muted == m_muted) 
157         return;
158     m_muted = muted;
159     m_private->setMuted(muted);
160 }
161
162 int MediaPlayer::dataRate() const
163 {
164     return m_private->dataRate();
165 }
166
167 void MediaPlayer::setEndTime(float time)
168 {
169     m_private->setEndTime(time);
170 }
171
172 void MediaPlayer::addCuePoint(float time)
173 {
174     if (m_cuePoints.contains(time))
175         return;
176     m_cuePoints.add(time);
177     m_private->addCuePoint(time);
178 }
179
180 void MediaPlayer::removeCuePoint(float time)
181 {
182     if (!m_cuePoints.contains(time))
183         return;
184     m_cuePoints.remove(time);
185     m_private->removeCuePoint(time);
186 }
187
188 void MediaPlayer::clearCuePoints()
189 {
190     m_cuePoints.clear();
191     m_private->clearCuePoints();
192 }
193
194 float MediaPlayer::maxTimeBuffered()
195 {
196     return m_private->maxTimeBuffered();
197 }
198
199 float MediaPlayer::maxTimeSeekable()
200 {
201     return m_private->maxTimeSeekable();
202 }
203
204 unsigned MediaPlayer::bytesLoaded()
205 {
206     return m_private->bytesLoaded();
207 }
208
209 bool MediaPlayer::totalBytesKnown()
210 {
211     return m_private->totalBytesKnown();
212 }
213
214 unsigned MediaPlayer::totalBytes()
215 {
216     return m_private->totalBytes();
217 }
218
219 void MediaPlayer::setRect(const IntRect& r) 
220
221     if (m_rect == r)
222         return;
223     m_rect = r;
224     m_private->setRect(r);
225 }
226
227 bool MediaPlayer::visible() const
228 {
229     return m_visible;
230 }
231
232 void MediaPlayer::setVisible(bool b)
233 {
234     if (m_visible == b)
235         return;
236     m_visible = b;
237     m_private->setVisible(b);
238 }
239
240 void MediaPlayer::paint(GraphicsContext* p, const IntRect& r)
241 {
242     m_private->paint(p, r);
243 }
244
245 void MediaPlayer::getSupportedTypes(HashSet<String>& types)
246 {
247     MediaPlayerPrivate::getSupportedTypes(types);
248
249
250 void MediaPlayer::networkStateChanged()
251 {
252     if (m_mediaPlayerClient)
253         m_mediaPlayerClient->mediaPlayerNetworkStateChanged(this);
254 }
255
256 void MediaPlayer::readyStateChanged()
257 {
258     if (m_mediaPlayerClient)
259         m_mediaPlayerClient->mediaPlayerReadyStateChanged(this);
260 }
261
262 void MediaPlayer::volumeChanged()
263 {
264     if (m_mediaPlayerClient)
265         m_mediaPlayerClient->mediaPlayerVolumeChanged(this);
266 }
267
268 void MediaPlayer::timeChanged()
269 {
270     if (m_mediaPlayerClient)
271         m_mediaPlayerClient->mediaPlayerTimeChanged(this);
272 }
273
274 void MediaPlayer::cuePointReached(float cueTime)
275 {
276     if (m_mediaPlayerClient)
277         m_mediaPlayerClient->mediaPlayerCuePointReached(this, cueTime);
278 }
279
280 void MediaPlayer::repaint()
281 {
282     if (m_mediaPlayerClient)
283         m_mediaPlayerClient->mediaPlayerRepaint(this);
284 }
285
286 }
287 #endif