Add url to supportsType
[WebKit-https.git] / Source / WebCore / platform / graphics / mac / MediaPlayerPrivateQTKit.h
1 /*
2  * Copyright (C) 2007, 2008, 2009, 2010, 2011 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 #ifndef MediaPlayerPrivateQTKit_h
27 #define MediaPlayerPrivateQTKit_h
28
29 #if ENABLE(VIDEO)
30
31 #include "MediaPlayerPrivate.h"
32 #include "Timer.h"
33 #include "FloatSize.h"
34 #include <wtf/RetainPtr.h>
35
36 #ifdef __OBJC__
37 #import <QTKit/QTTime.h>
38 #else
39 class QTTime;
40 #endif
41
42 OBJC_CLASS NSDictionary;
43 OBJC_CLASS NSMutableDictionary;
44 OBJC_CLASS QTMovie;
45 OBJC_CLASS QTMovieView;
46 OBJC_CLASS QTMovieLayer;
47 OBJC_CLASS QTVideoRendererWebKitOnly;
48 OBJC_CLASS WebCoreMovieObserver;
49
50 #ifndef DRAW_FRAME_RATE
51 #define DRAW_FRAME_RATE 0
52 #endif
53
54 namespace WebCore {
55     
56 class MediaPlayerPrivateQTKit : public MediaPlayerPrivateInterface {
57 public:
58     ~MediaPlayerPrivateQTKit();
59     static void registerMediaEngine(MediaEngineRegistrar);
60
61     void repaint();
62     void loadStateChanged();
63     void loadedRangesChanged();
64     void rateChanged();
65     void sizeChanged();
66     void timeChanged();
67     void didEnd();
68 #if USE(ACCELERATED_COMPOSITING)
69     void layerHostChanged(PlatformLayer* rootLayer);
70 #endif
71
72 private:
73     MediaPlayerPrivateQTKit(MediaPlayer*);
74
75     // engine support
76     static PassOwnPtr<MediaPlayerPrivateInterface> create(MediaPlayer*);
77     static void getSupportedTypes(HashSet<String>& types);
78     static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs, const KURL&);
79     static void getSitesInMediaCache(Vector<String>&);
80     static void clearMediaCache();
81     static void clearMediaCacheForSite(const String&);
82     static bool isAvailable();
83
84     PlatformMedia platformMedia() const;
85 #if USE(ACCELERATED_COMPOSITING) && !(PLATFORM(QT) && USE(QTKIT))
86     PlatformLayer* platformLayer() const;
87 #endif
88
89     IntSize naturalSize() const;
90     bool hasVideo() const;
91     bool hasAudio() const;
92     bool supportsFullscreen() const;
93     virtual bool supportsScanning() const { return true; }
94     
95     void load(const String& url);
96     void cancelLoad();
97     void loadInternal(const String& url);
98     void resumeLoad();
99     
100     void play();
101     void pause();    
102     void prepareToPlay();
103     
104     bool paused() const;
105     bool seeking() const;
106     
107     float duration() const;
108     float currentTime() const;
109     void seek(float time);
110     
111     void setRate(float);
112     void setVolume(float);
113     void setPreservesPitch(bool);
114
115     bool hasClosedCaptions() const;
116     void setClosedCaptionsVisible(bool);
117
118     void setPreload(MediaPlayer::Preload);
119
120     MediaPlayer::NetworkState networkState() const { return m_networkState; }
121     MediaPlayer::ReadyState readyState() const { return m_readyState; }
122     
123     PassRefPtr<TimeRanges> buffered() const;
124     float maxTimeSeekable() const;
125     bool didLoadingProgress() const;
126     unsigned totalBytes() const;
127     
128     void setVisible(bool);
129     void setSize(const IntSize&);
130     
131     virtual bool hasAvailableVideoFrame() const;
132
133     void paint(GraphicsContext*, const IntRect&);
134     void paintCurrentFrameInContext(GraphicsContext*, const IntRect&);
135     virtual void prepareForRendering();
136
137
138 #if USE(ACCELERATED_COMPOSITING) && !(PLATFORM(QT) && USE(QTKIT))
139     bool supportsAcceleratedRendering() const;
140     void acceleratedRenderingStateChanged();
141 #endif
142
143     bool hasSingleSecurityOrigin() const;
144     MediaPlayer::MovieLoadType movieLoadType() const;
145
146     void createQTMovie(const String& url);
147     void createQTMovie(NSURL *, NSDictionary *movieAttributes);
148
149     enum MediaRenderingMode { MediaRenderingNone, MediaRenderingMovieView, MediaRenderingSoftwareRenderer, MediaRenderingMovieLayer };
150     MediaRenderingMode currentRenderingMode() const;
151     MediaRenderingMode preferredRenderingMode() const;
152     
153     void setUpVideoRendering();
154     void tearDownVideoRendering();
155     bool hasSetUpVideoRendering() const;
156     
157     void createQTMovieView();
158     void detachQTMovieView();
159     
160     enum QTVideoRendererMode { QTVideoRendererModeDefault, QTVideoRendererModeListensForNewImages };
161     void createQTVideoRenderer(QTVideoRendererMode rendererMode);
162     void destroyQTVideoRenderer();
163     
164     void createQTMovieLayer();
165     void destroyQTMovieLayer();
166
167     QTTime createQTTime(float time) const;
168     
169     void updateStates();
170     void doSeek();
171     void cancelSeek();
172     void seekTimerFired(Timer<MediaPlayerPrivateQTKit>*);
173     float maxTimeLoaded() const;
174     void disableUnsupportedTracks();
175     
176     void sawUnsupportedTracks();
177     void cacheMovieScale();
178     bool metaDataAvailable() const { return m_qtMovie && m_readyState >= MediaPlayer::HaveMetadata; }
179
180     bool isReadyForVideoSetup() const;
181     
182     virtual float mediaTimeForTimeValue(float) const;
183
184     virtual double maximumDurationToCacheMediaTime() const { return 5; }
185
186     virtual void setPrivateBrowsingMode(bool);
187     
188     NSMutableDictionary* commonMovieAttributes();
189
190     MediaPlayer* m_player;
191     RetainPtr<QTMovie> m_qtMovie;
192     RetainPtr<QTMovieView> m_qtMovieView;
193     RetainPtr<QTVideoRendererWebKitOnly> m_qtVideoRenderer;
194     RetainPtr<WebCoreMovieObserver> m_objcObserver;
195     String m_movieURL;
196     float m_seekTo;
197     Timer<MediaPlayerPrivateQTKit> m_seekTimer;
198     MediaPlayer::NetworkState m_networkState;
199     MediaPlayer::ReadyState m_readyState;
200     IntRect m_rect;
201     FloatSize m_scaleFactor;
202     unsigned m_enabledTrackCount;
203     unsigned m_totalTrackCount;
204     float m_reportedDuration;
205     float m_cachedDuration;
206     float m_timeToRestore;
207     RetainPtr<QTMovieLayer> m_qtVideoLayer;
208     MediaPlayer::Preload m_preload;
209     bool m_startedPlaying;
210     bool m_isStreaming;
211     bool m_visible;
212     bool m_hasUnsupportedTracks;
213     bool m_videoFrameHasDrawn;
214     bool m_isAllowedToRender;
215     bool m_privateBrowsing;
216     mutable float m_maxTimeLoadedAtLastDidLoadingProgress;
217 #if DRAW_FRAME_RATE
218     int  m_frameCountWhilePlaying;
219     double m_timeStartedPlaying;
220     double m_timeStoppedPlaying;
221 #endif
222     mutable FloatSize m_cachedNaturalSize;
223 };
224
225 }
226
227 #endif
228 #endif