[Win] Extend AVFoundationCF Media Implementation
[WebKit-https.git] / Source / WebCore / platform / graphics / avfoundation / cf / MediaPlayerPrivateAVFoundationCF.h
1 /*
2  * Copyright (C) 2011, 2013-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 MediaPlayerPrivateAVFoundationCF_h
27 #define MediaPlayerPrivateAVFoundationCF_h
28
29 #if PLATFORM(WIN) && ENABLE(VIDEO) && USE(AVFOUNDATION)
30
31 #include "MediaPlayerPrivateAVFoundation.h"
32
33 #if HAVE(AVFOUNDATION_LOADER_DELEGATE) || HAVE(ENCRYPTED_MEDIA_V2)
34 typedef struct OpaqueAVCFAssetResourceLoadingRequest* AVCFAssetResourceLoadingRequestRef;
35 #endif
36
37 namespace WebCore {
38
39 class AVFWrapper;
40 class WebCoreAVCFResourceLoader;
41
42 class MediaPlayerPrivateAVFoundationCF : public MediaPlayerPrivateAVFoundation {
43 public:
44     virtual ~MediaPlayerPrivateAVFoundationCF();
45
46     virtual void tracksChanged() override;
47
48 #if HAVE(AVFOUNDATION_LOADER_DELEGATE)
49     bool shouldWaitForLoadingOfResource(AVCFAssetResourceLoadingRequestRef);
50     void didCancelLoadingRequest(AVCFAssetResourceLoadingRequestRef);
51     void didStopLoadingRequest(AVCFAssetResourceLoadingRequestRef);
52 #endif
53
54 #if ENABLE(ENCRYPTED_MEDIA_V2)
55     RetainPtr<AVCFAssetResourceLoadingRequestRef> takeRequestForKeyURI(const String&);
56 #endif
57
58     static void registerMediaEngine(MediaEngineRegistrar);
59
60 private:
61     MediaPlayerPrivateAVFoundationCF(MediaPlayer*);
62
63     // Engine support
64     static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
65     static void getSupportedTypes(HashSet<String>& types);
66     static MediaPlayer::SupportsType supportsType(const MediaEngineSupportParameters&);
67     static bool supportsKeySystem(const String& keySystem, const String& mimeType);
68     static bool isAvailable();
69
70     virtual void cancelLoad();
71
72     virtual PlatformMedia platformMedia() const;
73
74     virtual void platformSetVisible(bool);
75     virtual void platformPlay();
76     virtual void platformPause();
77     virtual MediaTime currentMediaTime() const override;
78     virtual void setVolume(float);
79     virtual void setClosedCaptionsVisible(bool);
80     virtual void paint(GraphicsContext*, const IntRect&);
81     virtual void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
82     virtual PlatformLayer* platformLayer() const;
83     virtual bool supportsAcceleratedRendering() const { return true; }
84     virtual MediaTime mediaTimeForTimeValue(const MediaTime&) const;
85
86     virtual void createAVPlayer();
87     virtual void createAVPlayerItem();
88     virtual void createAVAssetForURL(const String& url);
89     virtual MediaPlayerPrivateAVFoundation::ItemStatus playerItemStatus() const;
90     virtual MediaPlayerPrivateAVFoundation::AssetStatus assetStatus() const;
91
92     virtual void checkPlayability();
93     virtual void updateRate();
94     virtual float rate() const;
95     virtual void seekToTime(const MediaTime&, const MediaTime& negativeTolerance, const MediaTime& positiveTolerance);
96     virtual unsigned long long totalBytes() const;
97     virtual std::unique_ptr<PlatformTimeRanges> platformBufferedTimeRanges() const;
98     virtual MediaTime platformMinTimeSeekable() const;
99     virtual MediaTime platformMaxTimeSeekable() const;
100     virtual MediaTime platformDuration() const;
101     virtual MediaTime platformMaxTimeLoaded() const;
102     virtual void beginLoadingMetadata();
103     virtual void sizeChanged();
104     virtual bool requiresImmediateCompositing() const override;
105
106     virtual bool hasAvailableVideoFrame() const;
107
108     virtual void createContextVideoRenderer();
109     virtual void destroyContextVideoRenderer();
110
111     virtual void createVideoLayer();
112     virtual void destroyVideoLayer();
113
114     virtual bool hasContextRenderer() const;
115     virtual bool hasLayerRenderer() const;
116
117     virtual void updateVideoLayerGravity() override;
118
119     virtual void contentsNeedsDisplay();
120
121 #if ENABLE(ENCRYPTED_MEDIA_V2)
122     virtual std::unique_ptr<CDMSession> createSession(const String&) override;
123 #endif
124
125     virtual String languageOfPrimaryAudioTrack() const override;
126
127 #if HAVE(AVFOUNDATION_MEDIA_SELECTION_GROUP)
128     void processMediaSelectionOptions();
129 #endif
130
131     virtual void setCurrentTextTrack(InbandTextTrackPrivateAVF*) override;
132     virtual InbandTextTrackPrivateAVF* currentTextTrack() const override;
133
134 #if !HAVE(AVFOUNDATION_LEGIBLE_OUTPUT_SUPPORT)
135     void processLegacyClosedCaptionsTracks();
136 #endif
137
138     friend class AVFWrapper;
139     AVFWrapper* m_avfWrapper;
140
141     mutable String m_languageOfPrimaryAudioTrack;
142
143 #if HAVE(AVFOUNDATION_LOADER_DELEGATE)
144     friend class WebCoreAVCFResourceLoader;
145     HashMap<RetainPtr<AVCFAssetResourceLoadingRequestRef>, RefPtr<WebCoreAVCFResourceLoader>> m_resourceLoaderMap;
146 #endif
147
148     bool m_videoFrameHasDrawn;
149 };
150
151 }
152
153 #endif // PLATFORM(WIN) && ENABLE(VIDEO) && USE(AVFOUNDATION)
154 #endif // MediaPlayerPrivateAVFoundationCF_h