Reviewed by Oliver.
[WebKit-https.git] / WebCore / platform / graphics / mac / MediaPlayerPrivateQTKit.h
1 /*
2  * Copyright (C) 2007 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 "MediaPlayer.h"
32 #include "Timer.h"
33 #include "wtf/RetainPtr.h"
34 #include "wtf/Noncopyable.h"
35
36 #ifdef __OBJC__
37 #import "QTKit/QTTime.h"
38 @class QTMovie;
39 @class QTMovieView;
40 @class WebCoreMovieObserver;
41 #else
42 class QTMovie;
43 class QTMovieView;
44 class QTTime;
45 class WebCoreMovieObserver;
46 #endif
47
48 namespace WebCore {
49
50 class GraphicsContext;
51 class IntSize;
52 class IntRect;
53 class String;
54
55 class MediaPlayerPrivate : Noncopyable
56 {
57 public:
58     MediaPlayerPrivate(MediaPlayer*);
59     ~MediaPlayerPrivate();
60     
61     IntSize naturalSize();
62     bool hasVideo();
63     
64     void load(String url);
65     void cancelLoad();
66     
67     void play();
68     void pause();    
69     
70     bool paused() const;
71     bool seeking() const;
72     
73     float duration() const;
74     float currentTime() const;
75     void seek(float time);
76     void setEndTime(float time);
77     
78     void addCuePoint(float time);
79     void removeCuePoint(float time);
80     void clearCuePoints();
81     
82     void setRate(float);
83     void setVolume(float);
84     void setMuted(bool);
85     
86     int dataRate() const;
87     
88     MediaPlayer::NetworkState networkState();
89     MediaPlayer::ReadyState readyState();
90     
91     float maxTimeBuffered();
92     float maxTimeSeekable();
93     unsigned bytesLoaded();
94     bool totalBytesKnown();
95     unsigned totalBytes();
96     
97     void setVisible(bool);
98     void setRect(const IntRect& r);
99     
100     void loadStateChanged();
101     void rateChanged();
102     void sizeChanged();
103     void timeChanged();
104     void volumeChanged();
105     void didEnd();
106     
107     void paint(GraphicsContext* p, const IntRect& r);
108     
109     void createQTMovie(String url);
110     void createQTMovieView();
111     QTTime createQTTime(float time);
112     
113     static void getSupportedTypes(HashSet<String>& types);
114     
115 private:
116     void updateStates();
117     void doSeek();
118     void cancelSeek();
119     void seekTimerFired(Timer<MediaPlayerPrivate>*);
120     void cuePointTimerFired(Timer<MediaPlayerPrivate>*);
121     float maxTimeLoaded();
122     void startCuePointTimerIfNeeded();
123     
124 private:    
125     MediaPlayer* m_player;
126     RetainPtr<QTMovie> m_qtMovie;
127     RetainPtr<QTMovieView> m_qtMovieView;
128     RetainPtr<WebCoreMovieObserver> m_objcObserver;
129     float m_seekTo;
130     float m_endTime;
131     Timer<MediaPlayerPrivate> m_seekTimer;
132     Timer<MediaPlayerPrivate> m_cuePointTimer;
133     float m_previousTimeCueTimerFired;
134     MediaPlayer::NetworkState m_networkState;
135     MediaPlayer::ReadyState m_readyState;
136     bool m_startedPlaying;
137     bool m_isStreaming;
138 };
139
140 }
141
142 #endif
143 #endif