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