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