Remove "virtual" from all lines that have both "virtual" and "override".
[WebKit-https.git] / Source / WebCore / platform / graphics / avfoundation / objc / MediaPlayerPrivateMediaSourceAVFObjC.h
1 /*
2  * Copyright (C) 2013 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 MediaPlayerPrivateMediaSourceAVFObjC_h
27 #define MediaPlayerPrivateMediaSourceAVFObjC_h
28
29 #if ENABLE(MEDIA_SOURCE) && USE(AVFOUNDATION)
30
31 #include "MediaPlayerPrivate.h"
32 #include "SourceBufferPrivateClient.h"
33 #include <wtf/MediaTime.h>
34 #include <wtf/Vector.h>
35 #include <wtf/WeakPtr.h>
36
37 OBJC_CLASS AVAsset;
38 OBJC_CLASS AVSampleBufferAudioRenderer;
39 OBJC_CLASS AVSampleBufferDisplayLayer;
40 OBJC_CLASS AVSampleBufferRenderSynchronizer;
41 OBJC_CLASS AVStreamSession;
42
43 typedef struct OpaqueCMTimebase* CMTimebaseRef;
44
45 namespace WebCore {
46
47 class CDMSessionMediaSourceAVFObjC;
48 class PlatformClockCM;
49 class MediaSourcePrivateAVFObjC;
50
51 #if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
52 class VideoFullscreenLayerManager;
53 #endif
54
55 class MediaPlayerPrivateMediaSourceAVFObjC : public MediaPlayerPrivateInterface {
56 public:
57     explicit MediaPlayerPrivateMediaSourceAVFObjC(MediaPlayer*);
58     virtual ~MediaPlayerPrivateMediaSourceAVFObjC();
59
60     static void registerMediaEngine(MediaEngineRegistrar);
61
62     // MediaPlayer Factory Methods
63     static bool isAvailable();
64     static void getSupportedTypes(HashSet<String, ASCIICaseInsensitiveHash>& types);
65     static MediaPlayer::SupportsType supportsType(const MediaEngineSupportParameters&);
66
67     void addDisplayLayer(AVSampleBufferDisplayLayer*);
68     void removeDisplayLayer(AVSampleBufferDisplayLayer*);
69
70     void addAudioRenderer(AVSampleBufferAudioRenderer*);
71     void removeAudioRenderer(AVSampleBufferAudioRenderer*);
72
73     MediaPlayer::NetworkState networkState() const override;
74     MediaPlayer::ReadyState readyState() const override;
75     void setReadyState(MediaPlayer::ReadyState);
76     void setNetworkState(MediaPlayer::NetworkState);
77
78     void seekInternal();
79     void waitForSeekCompleted();
80     void seekCompleted();
81     void setLoadingProgresssed(bool flag) { m_loadingProgressed = flag; }
82     void setHasAvailableVideoFrame(bool flag) { m_hasAvailableVideoFrame = flag; }
83     void durationChanged();
84
85     void effectiveRateChanged();
86     void sizeChanged();
87     void characteristicsChanged();
88
89 #if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
90     void setVideoFullscreenLayer(PlatformLayer*) override;
91     void setVideoFullscreenFrame(FloatRect) override;
92 #endif
93
94 #if ENABLE(ENCRYPTED_MEDIA_V2)
95     bool hasStreamSession() { return m_streamSession; }
96     AVStreamSession *streamSession();
97     void setCDMSession(CDMSession*) override;
98     CDMSessionMediaSourceAVFObjC* cdmSession() const { return m_session; }
99     void keyNeeded(Uint8Array*);
100 #endif
101
102     WeakPtr<MediaPlayerPrivateMediaSourceAVFObjC> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
103
104 private:
105     // MediaPlayerPrivateInterface
106     void load(const String& url) override;
107     void load(const String& url, MediaSourcePrivateClient*) override;
108 #if ENABLE(MEDIA_STREAM)
109     void load(MediaStreamPrivate&) override;
110 #endif
111     void cancelLoad() override;
112
113     void prepareToPlay() override;
114     PlatformMedia platformMedia() const override;
115     PlatformLayer* platformLayer() const override;
116
117     bool supportsFullscreen() const override { return true; }
118
119     void play() override;
120     void playInternal();
121
122     void pause() override;
123     void pauseInternal();
124
125     bool paused() const override;
126
127     void setVolume(float volume) override;
128     bool supportsMuting() const override { return true; }
129     void setMuted(bool) override;
130
131     bool supportsScanning() const override;
132
133     FloatSize naturalSize() const override;
134
135     bool hasVideo() const override;
136     bool hasAudio() const override;
137
138     void setVisible(bool) override;
139
140     MediaTime durationMediaTime() const override;
141     MediaTime currentMediaTime() const override;
142     MediaTime startTime() const override;
143     MediaTime initialTime() const override;
144
145     void seekWithTolerance(const MediaTime&, const MediaTime& negativeThreshold, const MediaTime& positiveThreshold) override;
146     bool seeking() const override;
147     void setRateDouble(double) override;
148
149     void setPreservesPitch(bool) override;
150
151     std::unique_ptr<PlatformTimeRanges> seekable() const override;
152     MediaTime maxMediaTimeSeekable() const override;
153     MediaTime minMediaTimeSeekable() const override;
154     std::unique_ptr<PlatformTimeRanges> buffered() const override;
155
156     bool didLoadingProgress() const override;
157
158     void setSize(const IntSize&) override;
159
160     void paint(GraphicsContext&, const FloatRect&) override;
161     void paintCurrentFrameInContext(GraphicsContext&, const FloatRect&) override;
162
163     bool hasAvailableVideoFrame() const override;
164
165     bool supportsAcceleratedRendering() const override;
166     // called when the rendering system flips the into or out of accelerated rendering mode.
167     void acceleratedRenderingStateChanged() override;
168
169     MediaPlayer::MovieLoadType movieLoadType() const override;
170
171     void prepareForRendering() override;
172
173     String engineDescription() const override;
174
175     String languageOfPrimaryAudioTrack() const override;
176
177     size_t extraMemoryCost() const override;
178
179     unsigned long totalVideoFrames() override;
180     unsigned long droppedVideoFrames() override;
181     unsigned long corruptedVideoFrames() override;
182     MediaTime totalFrameDelay() override;
183
184 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
185     bool isCurrentPlaybackTargetWireless() const override;
186     void setWirelessPlaybackTarget(Ref<MediaPlaybackTarget>&&) override;
187     void setShouldPlayToPlaybackTarget(bool) override;
188     bool wirelessVideoPlaybackDisabled() const override { return false; }
189 #endif
190
191     void ensureLayer();
192     void destroyLayer();
193     bool shouldBePlaying() const;
194
195     friend class MediaSourcePrivateAVFObjC;
196
197     struct PendingSeek {
198         PendingSeek(const MediaTime& targetTime, const MediaTime& negativeThreshold, const MediaTime& positiveThreshold)
199             : targetTime(targetTime)
200             , negativeThreshold(negativeThreshold)
201             , positiveThreshold(positiveThreshold)
202         {
203         }
204         MediaTime targetTime;
205         MediaTime negativeThreshold;
206         MediaTime positiveThreshold;
207     };
208     std::unique_ptr<PendingSeek> m_pendingSeek;
209
210     MediaPlayer* m_player;
211     WeakPtrFactory<MediaPlayerPrivateMediaSourceAVFObjC> m_weakPtrFactory;
212     RefPtr<MediaSourcePrivateAVFObjC> m_mediaSourcePrivate;
213     RetainPtr<AVAsset> m_asset;
214     RetainPtr<AVSampleBufferDisplayLayer> m_sampleBufferDisplayLayer;
215     Vector<RetainPtr<AVSampleBufferAudioRenderer>> m_sampleBufferAudioRenderers;
216     RetainPtr<AVSampleBufferRenderSynchronizer> m_synchronizer;
217     RetainPtr<id> m_timeJumpedObserver;
218     RetainPtr<id> m_durationObserver;
219     RetainPtr<AVStreamSession> m_streamSession;
220     Timer m_seekTimer;
221     CDMSessionMediaSourceAVFObjC* m_session;
222     MediaPlayer::NetworkState m_networkState;
223     MediaPlayer::ReadyState m_readyState;
224     MediaTime m_lastSeekTime;
225     double m_rate;
226     bool m_playing;
227     bool m_seeking;
228     bool m_seekCompleted;
229     mutable bool m_loadingProgressed;
230     bool m_hasAvailableVideoFrame;
231 #if ENABLE(WIRELESS_PLAYBACK_TARGET)
232     RefPtr<MediaPlaybackTarget> m_playbackTarget;
233     bool m_shouldPlayToTarget { false };
234 #endif
235 #if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
236     std::unique_ptr<VideoFullscreenLayerManager> m_videoFullscreenLayerManager;
237 #endif
238 };
239
240 }
241
242 #endif // ENABLE(MEDIA_SOURCE) && USE(AVFOUNDATION)
243
244 #endif // MediaPlayerPrivateMediaSourceAVFObjC_h
245