Reviewed and partially fixed by Tim Hatcher.
[WebKit-https.git] / WebCore / platform / graphics / MediaPlayer.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 MediaPlayer_h
27 #define MediaPlayer_h
28
29 #if ENABLE(VIDEO)
30
31 #include "IntRect.h"
32 #include "StringHash.h"
33 #include <wtf/HashSet.h>
34 #include <wtf/Noncopyable.h>
35
36 namespace WebCore {
37
38 class GraphicsContext;
39 class IntSize;
40 class MediaPlayer;
41 class MediaPlayerPrivate;
42 class String;
43 class Widget;
44
45 class MediaPlayerClient
46 {
47 public:
48     virtual ~MediaPlayerClient() { }
49     virtual void mediaPlayerNetworkStateChanged(MediaPlayer*) { }
50     virtual void mediaPlayerReadyStateChanged(MediaPlayer*) { }
51     virtual void mediaPlayerVolumeChanged(MediaPlayer*) { }
52     virtual void mediaPlayerTimeChanged(MediaPlayer*) { }
53     virtual void mediaPlayerCuePointReached(MediaPlayer*, float cueTime) { }
54     virtual void mediaPlayerRepaint(MediaPlayer*) { }
55 };
56
57 class MediaPlayer : Noncopyable {
58 public:
59     MediaPlayer(MediaPlayerClient*);
60     virtual ~MediaPlayer();
61     
62     static void getSupportedTypes(HashSet<String>&);
63     
64     IntSize naturalSize();
65     bool hasVideo();
66     
67     Widget* parentWidget() const { return m_parentWidget; }
68     void setParentWidget(Widget* parent) { m_parentWidget = parent; }
69     
70     IntRect rect() const { return m_rect; }
71     void setRect(const IntRect& r);
72     
73     void load(String url);
74     void cancelLoad();
75     
76     bool visible() const;
77     void setVisible(bool);
78     
79     void play();
80     void pause();    
81     
82     bool paused() const;
83     bool seeking() const;
84     
85     float duration() const;
86     float currentTime() const;
87     void seek(float time);
88     
89     void setEndTime(float time);
90     
91     void addCuePoint(float time);
92     void removeCuePoint(float time);
93     void clearCuePoints();
94     
95     float rate() const;
96     void setRate(float);
97     
98     float maxTimeBuffered();
99     float maxTimeSeekable();
100     
101     unsigned bytesLoaded();
102     bool totalBytesKnown();
103     unsigned totalBytes();
104     
105     float volume() const;
106     void setVolume(float);
107     bool muted() const;
108     void setMuted(bool);
109     
110     int dataRate() const;
111     
112     void paint(GraphicsContext*, const IntRect&);
113     
114     enum NetworkState { Empty, LoadFailed, Loading, LoadedMetaData, LoadedFirstFrame, Loaded };
115     NetworkState networkState();
116
117     enum ReadyState  { DataUnavailable, CanShowCurrentFrame, CanPlay, CanPlayThrough };
118     ReadyState readyState();
119     
120     void networkStateChanged();
121     void readyStateChanged();
122     void volumeChanged();
123     void timeChanged();
124     void cuePointReached(float cueTime);
125
126     void repaint();
127     
128 private:
129         
130     friend class MediaPlayerPrivate;
131     
132     MediaPlayerClient* m_mediaPlayerClient;
133     MediaPlayerPrivate* m_private;
134     Widget* m_parentWidget;
135     IntRect m_rect;
136     bool m_visible;
137     float m_rate;
138     float m_volume;
139     bool m_muted;
140     HashSet<float> m_cuePoints;
141 };
142
143 }
144
145 #endif
146 #endif