[iOS] cleanup AirPlay code
[WebKit-https.git] / Source / WebCore / platform / graphics / MediaPlayerPrivate.h
1 /*
2  * Copyright (C) 2009-2014 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 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 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 #ifndef MediaPlayerPrivate_h
27 #define MediaPlayerPrivate_h
28
29 #if ENABLE(VIDEO)
30
31 #include "MediaPlayer.h"
32 #include "PlatformTimeRanges.h"
33 #include <wtf/Forward.h>
34
35 namespace WebCore {
36
37 class IntRect;
38 class IntSize;
39 class PlatformTextTrack;
40
41 class MediaPlayerPrivateInterface {
42     WTF_MAKE_NONCOPYABLE(MediaPlayerPrivateInterface); WTF_MAKE_FAST_ALLOCATED;
43 public:
44     MediaPlayerPrivateInterface() { }
45     virtual ~MediaPlayerPrivateInterface() { }
46
47     virtual void load(const String& url) = 0;
48 #if ENABLE(MEDIA_SOURCE)
49     virtual void load(const String& url, MediaSourcePrivateClient*) = 0;
50 #endif
51     virtual void cancelLoad() = 0;
52     
53     virtual void prepareToPlay() { }
54     virtual PlatformMedia platformMedia() const { return NoPlatformMedia; }
55     virtual PlatformLayer* platformLayer() const { return 0; }
56 #if PLATFORM(IOS)
57     virtual void setVideoFullscreenLayer(PlatformLayer*) { }
58     virtual void setVideoFullscreenFrame(FloatRect) { }
59     virtual void setVideoFullscreenGravity(MediaPlayer::VideoGravity) { }
60
61     virtual NSArray *timedMetadata() const { return 0; }
62     virtual String accessLog() const { return emptyString(); }
63     virtual String errorLog() const { return emptyString(); }
64 #endif
65     virtual long platformErrorCode() const { return 0; }
66
67     virtual void play() = 0;
68     virtual void pause() = 0;    
69     virtual void setShouldBufferData(bool) { }
70
71     virtual bool supportsFullscreen() const { return false; }
72     virtual bool supportsScanning() const { return false; }
73     virtual bool requiresImmediateCompositing() const { return false; }
74
75     virtual bool canSaveMediaData() const { return false; }
76
77     virtual IntSize naturalSize() const = 0;
78
79     virtual bool hasVideo() const = 0;
80     virtual bool hasAudio() const = 0;
81
82     virtual void setVisible(bool) = 0;
83
84     virtual float duration() const { return 0; }
85     virtual double durationDouble() const { return duration(); }
86     virtual MediaTime durationMediaTime() const { return MediaTime::createWithDouble(durationDouble()); }
87
88     virtual float currentTime() const { return 0; }
89     virtual double currentTimeDouble() const { return currentTime(); }
90     virtual MediaTime currentMediaTime() const { return MediaTime::createWithDouble(currentTimeDouble()); }
91
92     virtual void seek(float) { }
93     virtual void seekDouble(double time) { seek(time); }
94     virtual void seek(const MediaTime& time) { seekDouble(time.toDouble()); }
95     virtual void seekWithTolerance(const MediaTime& time, const MediaTime&, const MediaTime&) { seek(time); }
96
97     virtual bool seeking() const = 0;
98
99     virtual MediaTime startTime() const { return MediaTime::zeroTime(); }
100     virtual MediaTime initialTime() const { return MediaTime::zeroTime(); }
101
102     virtual void setRate(float) { }
103     virtual void setRateDouble(double rate) { setRate(rate); }
104     virtual double rate() const { return 0; }
105
106     virtual void setPreservesPitch(bool) { }
107
108     virtual bool paused() const = 0;
109
110     virtual void setVolume(float) { }
111     virtual void setVolumeDouble(double volume) { return setVolume(volume); }
112 #if PLATFORM(IOS)
113     virtual float volume() const { return 1; }
114 #endif
115
116     virtual bool supportsMuting() const { return false; }
117     virtual void setMuted(bool) { }
118
119     virtual bool hasClosedCaptions() const { return false; }    
120     virtual void setClosedCaptionsVisible(bool) { }
121
122     virtual double maxFastForwardRate() const { return std::numeric_limits<double>::infinity(); }
123     virtual double minFastReverseRate() const { return -std::numeric_limits<double>::infinity(); }
124
125     virtual MediaPlayer::NetworkState networkState() const = 0;
126     virtual MediaPlayer::ReadyState readyState() const = 0;
127
128     virtual std::unique_ptr<PlatformTimeRanges> seekable() const { return maxMediaTimeSeekable() == MediaTime::zeroTime() ? PlatformTimeRanges::create() : PlatformTimeRanges::create(minMediaTimeSeekable(), maxMediaTimeSeekable()); }
129     virtual float maxTimeSeekable() const { return 0; }
130     virtual MediaTime maxMediaTimeSeekable() const { return MediaTime::createWithDouble(maxTimeSeekable()); }
131     virtual double minTimeSeekable() const { return 0; }
132     virtual MediaTime minMediaTimeSeekable() const { return MediaTime::createWithDouble(minTimeSeekable()); }
133     virtual std::unique_ptr<PlatformTimeRanges> buffered() const = 0;
134
135     virtual unsigned long long totalBytes() const { return 0; }
136     virtual bool didLoadingProgress() const = 0;
137
138     virtual void setSize(const IntSize&) = 0;
139
140     virtual void paint(GraphicsContext*, const IntRect&) = 0;
141
142     virtual void paintCurrentFrameInContext(GraphicsContext* c, const IntRect& r) { paint(c, r); }
143     virtual bool copyVideoTextureToPlatformTexture(GraphicsContext3D*, Platform3DObject, GC3Dint, GC3Denum, GC3Denum, bool, bool) { return false; }
144     virtual PassNativeImagePtr nativeImageForCurrentTime() { return nullptr; }
145
146     virtual void setPreload(MediaPlayer::Preload) { }
147
148     virtual bool hasAvailableVideoFrame() const { return readyState() >= MediaPlayer::HaveCurrentData; }
149
150     virtual bool canLoadPoster() const { return false; }
151     virtual void setPoster(const String&) { }
152
153 #if USE(NATIVE_FULLSCREEN_VIDEO)
154     virtual void enterFullscreen() { }
155     virtual void exitFullscreen() { }
156 #endif
157
158 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
159     virtual bool isCurrentPlaybackTargetWireless() const { return false; }
160
161     virtual String wirelessPlaybackTargetName() const { return emptyString(); }
162     virtual MediaPlayer::WirelessPlaybackTargetType wirelessPlaybackTargetType() const { return MediaPlayer::TargetTypeNone; }
163
164     virtual bool wirelessVideoPlaybackDisabled() const { return false; }
165     virtual void setWirelessVideoPlaybackDisabled(bool) { }
166 #endif
167
168 #if USE(NATIVE_FULLSCREEN_VIDEO)
169     virtual bool canEnterFullscreen() const { return false; }
170 #endif
171
172     // whether accelerated rendering is supported by the media engine for the current media.
173     virtual bool supportsAcceleratedRendering() const { return false; }
174     // called when the rendering system flips the into or out of accelerated rendering mode.
175     virtual void acceleratedRenderingStateChanged() { }
176
177     virtual bool shouldMaintainAspectRatio() const { return true; }
178     virtual void setShouldMaintainAspectRatio(bool) { }
179
180     virtual bool hasSingleSecurityOrigin() const { return false; }
181
182     virtual bool didPassCORSAccessCheck() const { return false; }
183
184     virtual MediaPlayer::MovieLoadType movieLoadType() const { return MediaPlayer::Unknown; }
185
186     virtual void prepareForRendering() { }
187
188     // Time value in the movie's time scale. It is only necessary to override this if the media
189     // engine uses rational numbers to represent media time.
190     virtual MediaTime mediaTimeForTimeValue(const MediaTime& timeValue) const { return timeValue; }
191
192     // Overide this if it is safe for HTMLMediaElement to cache movie time and report
193     // 'currentTime' as [cached time + elapsed wall time]. Returns the maximum wall time
194     // it is OK to calculate movie time before refreshing the cached time.
195     virtual double maximumDurationToCacheMediaTime() const { return 0; }
196
197     virtual unsigned decodedFrameCount() const { return 0; }
198     virtual unsigned droppedFrameCount() const { return 0; }
199     virtual unsigned audioDecodedByteCount() const { return 0; }
200     virtual unsigned videoDecodedByteCount() const { return 0; }
201
202     void getSitesInMediaCache(Vector<String>&) { }
203     void clearMediaCache() { }
204     void clearMediaCacheForSite(const String&) { }
205
206     virtual void setPrivateBrowsingMode(bool) { }
207
208     virtual String engineDescription() const { return emptyString(); }
209
210 #if ENABLE(WEB_AUDIO)
211     virtual AudioSourceProvider* audioSourceProvider() { return 0; }
212 #endif
213
214 #if ENABLE(ENCRYPTED_MEDIA)
215     virtual MediaPlayer::MediaKeyException addKey(const String&, const unsigned char*, unsigned, const unsigned char*, unsigned, const String&) { return MediaPlayer::KeySystemNotSupported; }
216     virtual MediaPlayer::MediaKeyException generateKeyRequest(const String&, const unsigned char*, unsigned) { return MediaPlayer::KeySystemNotSupported; }
217     virtual MediaPlayer::MediaKeyException cancelKeyRequest(const String&, const String&) { return MediaPlayer::KeySystemNotSupported; }
218 #endif
219
220 #if ENABLE(ENCRYPTED_MEDIA_V2)
221     virtual std::unique_ptr<CDMSession> createSession(const String&) { return nullptr; }
222     virtual void setCDMSession(CDMSession*) { }
223     virtual void keyAdded() { }
224 #endif
225
226 #if ENABLE(VIDEO_TRACK)
227     virtual bool requiresTextTrackRepresentation() const { return false; }
228     virtual void setTextTrackRepresentation(TextTrackRepresentation*) { }
229     virtual void syncTextTrackBounds() { };
230 #endif
231
232 #if USE(PLATFORM_TEXT_TRACK_MENU)
233     virtual bool implementsTextTrackControls() const { return false; }
234     virtual PassRefPtr<PlatformTextTrackMenuInterface> textTrackMenu() { return 0; }
235 #endif
236
237 #if USE(GSTREAMER)
238     virtual void simulateAudioInterruption() { }
239 #endif
240
241     virtual String languageOfPrimaryAudioTrack() const { return emptyString(); }
242
243     virtual size_t extraMemoryCost() const
244     {
245         MediaTime duration = this->durationMediaTime();
246         if (!duration)
247             return 0;
248
249         unsigned long long extra = totalBytes() * buffered()->totalDuration().toDouble() / duration.toDouble();
250         return static_cast<unsigned>(extra);
251     }
252
253     virtual unsigned long long fileSize() const { return 0; }
254
255 #if ENABLE(MEDIA_SOURCE)
256     virtual unsigned long totalVideoFrames() { return 0; }
257     virtual unsigned long droppedVideoFrames() { return 0; }
258     virtual unsigned long corruptedVideoFrames() { return 0; }
259     virtual MediaTime totalFrameDelay() { return MediaTime::zeroTime(); }
260 #endif
261
262 #if ENABLE(AVF_CAPTIONS)
263     virtual void notifyTrackModeChanged() { }
264 #endif
265 };
266
267 }
268
269 #endif
270 #endif