12166a3acc58a940904e3becd61376165508c1d8
[WebKit-https.git] / WebCore / platform / graphics / win / MediaPlayerPrivateQuickTimeVisualContext.h
1 /*
2  * Copyright (C) 2007, 2008, 2009, 2010 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 MediaPlayerPrivateQuickTimeVisualContext_h
27 #define MediaPlayerPrivateQuickTimeVisualContext_h
28
29 #if ENABLE(VIDEO)
30
31 #include "GraphicsLayer.h"
32 #include "MediaPlayerPrivate.h"
33 #include "Timer.h"
34 #include <wtf/OwnPtr.h>
35 #include <wtf/RetainPtr.h>
36
37 #ifndef DRAW_FRAME_RATE
38 #define DRAW_FRAME_RATE 0
39 #endif
40
41 typedef struct CGImage *CGImageRef;
42 class QTMovie;
43 class QTMovieVisualContext;
44 class WKCAImageQueue;
45
46 namespace WebCore {
47
48 class GraphicsContext;
49 class IntSize;
50 class IntRect;
51 class String;
52
53 class MediaPlayerPrivateQuickTimeVisualContext : public MediaPlayerPrivateInterface {
54 public:
55     static void registerMediaEngine(MediaEngineRegistrar);
56
57     ~MediaPlayerPrivateQuickTimeVisualContext();
58
59 private:
60     MediaPlayerPrivateQuickTimeVisualContext(MediaPlayer*);
61
62     virtual bool supportsFullscreen() const;
63     virtual PlatformMedia platformMedia() const;
64 #if USE(ACCELERATED_COMPOSITING)
65     PlatformLayer* platformLayer() const;
66 #endif
67     IntSize naturalSize() const;
68     bool hasVideo() const;
69     bool hasAudio() const;
70
71     void load(const String& url);
72     void cancelLoad();
73     
74     void play();
75     void pause();    
76     
77     bool paused() const;
78     bool seeking() const;
79     
80     float duration() const;
81     float currentTime() const;
82     void seek(float time);
83     
84     void setRate(float);
85     void setVolume(float);
86     void setPreservesPitch(bool);
87     
88     MediaPlayer::NetworkState networkState() const { return m_networkState; }
89     MediaPlayer::ReadyState readyState() const { return m_readyState; }
90     
91     PassRefPtr<TimeRanges> buffered() const;
92     float maxTimeSeekable() const;
93     unsigned bytesLoaded() const;
94     unsigned totalBytes() const;
95     
96     void setVisible(bool);
97     void setSize(const IntSize&);
98     
99     void loadStateChanged();
100     void didEnd();
101     
102     void paint(GraphicsContext*, const IntRect&);
103     void paintCompleted(GraphicsContext&, const IntRect&);
104
105     bool hasSingleSecurityOrigin() const;
106
107     bool hasClosedCaptions() const;
108     void setClosedCaptionsVisible(bool);
109
110     void updateStates();
111     void doSeek();
112     void cancelSeek();
113     void seekTimerFired(Timer<MediaPlayerPrivateQuickTimeVisualContext>*);
114     float maxTimeLoaded() const;
115     void sawUnsupportedTracks();
116
117     // engine support
118     static MediaPlayerPrivateInterface* create(MediaPlayer*);
119     static void getSupportedTypes(HashSet<String>& types);
120     static MediaPlayer::SupportsType supportsType(const String& type, const String& codecs);
121     static bool isAvailable();
122
123 #if USE(ACCELERATED_COMPOSITING)
124     virtual bool supportsAcceleratedRendering() const;
125     virtual void acceleratedRenderingStateChanged();
126 #endif
127
128     enum MediaRenderingMode { MediaRenderingNone, MediaRenderingSoftwareRenderer, MediaRenderingMovieLayer };
129     MediaRenderingMode currentRenderingMode() const;
130     MediaRenderingMode preferredRenderingMode() const;
131     bool isReadyForRendering() const;
132
133     void setUpVideoRendering();
134     void tearDownVideoRendering();
135     bool hasSetUpVideoRendering() const;
136
137     void createLayerForMovie();
138     void destroyLayerForMovie();
139
140     void setUpCookiesForQuickTime(const String& url);
141     String rfc2616DateStringFromTime(CFAbsoluteTime);
142
143     void visualContextTimerFired(Timer<MediaPlayerPrivateQuickTimeVisualContext>*);
144     void retrieveCurrentImage();
145
146     class MovieClient;
147     friend class MovieClient;
148     OwnPtr<MovieClient> m_movieClient;
149
150 #if USE(ACCELERATED_COMPOSITING)
151     class LayerClient;
152     friend class LayerClient;
153     OwnPtr<LayerClient> m_layerClient;
154 #endif
155
156     class VisualContextClient;
157     friend class VisualContextClient;
158     OwnPtr<VisualContextClient> m_visualContextClient;
159
160     MediaPlayer* m_player;
161     RefPtr<QTMovie> m_movie;
162 #if USE(ACCELERATED_COMPOSITING)
163     OwnPtr<GraphicsLayer> m_qtVideoLayer;
164 #endif
165     RefPtr<QTMovieVisualContext> m_visualContext;
166     float m_seekTo;
167     Timer<MediaPlayerPrivateQuickTimeVisualContext> m_seekTimer;
168     Timer<MediaPlayerPrivateQuickTimeVisualContext> m_visualContextTimer;
169     IntSize m_size;
170     MediaPlayer::NetworkState m_networkState;
171     MediaPlayer::ReadyState m_readyState;
172     unsigned m_enabledTrackCount;
173     unsigned m_totalTrackCount;
174     bool m_hasUnsupportedTracks;
175     bool m_startedPlaying;
176     bool m_isStreaming;
177     bool m_visible;
178     bool m_newFrameAvailable;
179 #if DRAW_FRAME_RATE
180     double m_frameCountWhilePlaying;
181     double m_timeStartedPlaying;
182     double m_timeStoppedPlaying;
183 #endif
184 };
185
186 }
187
188 #endif
189 #endif