Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: webkit/media/android/webmediaplayer_android.h

Issue 14247018: Implement WebRTC in Chrome for TV (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed some comments Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ 5 #ifndef WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
6 #define WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ 6 #define WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
7 7
8 #include <jni.h> 8 #include <jni.h>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #if defined(GOOGLE_TV)
16 #include "media/base/demuxer_stream.h"
17 #endif
18 #include "cc/layers/video_frame_provider.h" 15 #include "cc/layers/video_frame_provider.h"
16 #include "media/base/android/media_player_bridge.h"
19 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h" 17 #include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3 D.h"
20 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" 18 #include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
21 #include "third_party/WebKit/Source/Platform/chromium/public/WebURL.h" 19 #include "third_party/WebKit/Source/Platform/chromium/public/WebURL.h"
22 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h" 20 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayer.h"
23 #include "ui/gfx/rect_f.h" 21 #include "ui/gfx/rect_f.h"
24 #include "webkit/media/android/stream_texture_factory_android.h" 22 #include "webkit/media/android/stream_texture_factory_android.h"
25 23
26 namespace media { 24 namespace media {
27 class MediaLog; 25 class MediaLog;
28 } 26 }
29 27
30 namespace WebKit { 28 namespace WebKit {
31 class WebFrame; 29 class WebFrame;
32 } 30 }
33 31
34 namespace webkit { 32 namespace webkit {
35 class WebLayerImpl; 33 class WebLayerImpl;
36 } 34 }
37 35
38 namespace webkit_media { 36 namespace webkit_media {
39 37
40 #if defined(GOOGLE_TV)
41 class MediaSourceDelegate;
42 #endif
43 class WebMediaPlayerManagerAndroid; 38 class WebMediaPlayerManagerAndroid;
44 class WebMediaPlayerProxyAndroid; 39 class WebMediaPlayerProxyAndroid;
45 40
46 // This class implements WebKit::WebMediaPlayer by keeping the android 41 // This class implements WebKit::WebMediaPlayer by keeping the android
47 // media player in the browser process. It listens to all the status changes 42 // media player in the browser process. It listens to all the status changes
48 // sent from the browser process and sends playback controls to the media 43 // sent from the browser process and sends playback controls to the media
49 // player. 44 // player.
50 class WebMediaPlayerAndroid 45 class WebMediaPlayerAndroid
51 : public WebKit::WebMediaPlayer, 46 : public WebKit::WebMediaPlayer,
52 public cc::VideoFrameProvider, 47 public cc::VideoFrameProvider,
53 public base::MessageLoop::DestructionObserver { 48 public base::MessageLoop::DestructionObserver {
54 public: 49 public:
55 // Construct a WebMediaPlayerAndroid object. This class communicates 50 // Construct a WebMediaPlayerAndroid object. This class communicates
56 // with the MediaPlayerBridge object in the browser process through 51 // with the MediaPlayerBridge object in the browser process through
57 // |proxy|. 52 // |proxy|.
58 // TODO(qinmin): |frame| argument is used to determine whether the current 53 // TODO(qinmin): |frame| argument is used to determine whether the current
59 // player can enter fullscreen. This logic should probably be moved into 54 // player can enter fullscreen. This logic should probably be moved into
60 // blink, so that enterFullscreen() will not be called if another video is 55 // blink, so that enterFullscreen() will not be called if another video is
61 // already in fullscreen. 56 // already in fullscreen.
62 WebMediaPlayerAndroid(WebKit::WebFrame* frame, 57 WebMediaPlayerAndroid(WebKit::WebFrame* frame,
63 WebKit::WebMediaPlayerClient* client, 58 WebKit::WebMediaPlayerClient* client,
64 WebMediaPlayerManagerAndroid* manager, 59 WebMediaPlayerManagerAndroid* manager,
65 WebMediaPlayerProxyAndroid* proxy, 60 WebMediaPlayerProxyAndroid* proxy,
66 StreamTextureFactory* factory, 61 StreamTextureFactory* factory);
67 media::MediaLog* media_log);
68 virtual ~WebMediaPlayerAndroid(); 62 virtual ~WebMediaPlayerAndroid();
69 63
70 // WebKit::WebMediaPlayer implementation. 64 // WebKit::WebMediaPlayer implementation.
71 virtual void enterFullscreen(); 65 virtual void enterFullscreen();
72 virtual void exitFullscreen(); 66 virtual void exitFullscreen();
73 virtual bool canEnterFullscreen() const; 67 virtual bool canEnterFullscreen() const;
74 68
75 // Resource loading. 69 // Resource loading.
76 virtual void load(const WebKit::WebURL& url, CORSMode cors_mode); 70 virtual void load(const WebKit::WebURL& url, CORSMode cors_mode);
77 virtual void load(const WebKit::WebURL& url, 71 virtual void load(const WebKit::WebURL& url,
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 virtual void WillDestroyCurrentMessageLoop() OVERRIDE; 173 virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
180 174
181 // Detach the player from its manager. 175 // Detach the player from its manager.
182 void Detach(); 176 void Detach();
183 177
184 #if defined(GOOGLE_TV) 178 #if defined(GOOGLE_TV)
185 // Retrieve geometry of the media player (i.e. location and size of the video 179 // Retrieve geometry of the media player (i.e. location and size of the video
186 // frame) if changed. Returns true only if the geometry has been changed since 180 // frame) if changed. Returns true only if the geometry has been changed since
187 // the last call. 181 // the last call.
188 bool RetrieveGeometryChange(gfx::RectF* rect); 182 bool RetrieveGeometryChange(gfx::RectF* rect);
189
190 virtual MediaKeyException generateKeyRequest(
191 const WebKit::WebString& key_system,
192 const unsigned char* init_data,
193 unsigned init_data_length) OVERRIDE;
194 virtual MediaKeyException addKey(
195 const WebKit::WebString& key_system,
196 const unsigned char* key,
197 unsigned key_length,
198 const unsigned char* init_data,
199 unsigned init_data_length,
200 const WebKit::WebString& session_id) OVERRIDE;
201 virtual MediaKeyException cancelKeyRequest(
202 const WebKit::WebString& key_system,
203 const WebKit::WebString& session_id) OVERRIDE;
204
205 // Called when DemuxerStreamPlayer needs to read data from ChunkDemuxer.
206 void OnReadFromDemuxer(media::DemuxerStream::Type type, bool seek_done);
207 #endif 183 #endif
208 184
209 protected: 185 protected:
210 // Helper method to update the playing state. 186 // Helper method to update the playing state.
211 void UpdatePlayingState(bool is_playing_); 187 void UpdatePlayingState(bool is_playing_);
212 188
213 // Helper methods for posting task for setting states and update WebKit. 189 // Helper methods for posting task for setting states and update WebKit.
214 void UpdateNetworkState(WebKit::WebMediaPlayer::NetworkState state); 190 void UpdateNetworkState(WebKit::WebMediaPlayer::NetworkState state);
215 void UpdateReadyState(WebKit::WebMediaPlayer::ReadyState state); 191 void UpdateReadyState(WebKit::WebMediaPlayer::ReadyState state);
216 192
217 // Helper method to reestablish the surface texture peer for android 193 // Helper method to reestablish the surface texture peer for android
218 // media player. 194 // media player.
219 void EstablishSurfaceTexturePeer(); 195 void EstablishSurfaceTexturePeer();
220 196
221 // Requesting whether the surface texture peer needs to be reestablished. 197 // Requesting whether the surface texture peer needs to be reestablished.
222 void SetNeedsEstablishPeer(bool needs_establish_peer); 198 void SetNeedsEstablishPeer(bool needs_establish_peer);
223 199
224 #if defined(GOOGLE_TV) 200 void InitializeMediaPlayer(const WebKit::WebURL& url,
225 // Request external surface for out-of-band composition. 201 media::MediaPlayerBridge::MediaType media_type);
226 void RequestExternalSurface(); 202
227 #endif 203 bool NeedsExternalSurface();
204 void SetNeedsExternalSurface(bool needs_external_surface);
205
206 WebMediaPlayerProxyAndroid* proxy() { return proxy_; }
207 WebKit::WebFrame* frame() { return frame_; }
208 WebKit::WebMediaPlayerClient* client() { return client_; }
209 int player_id() { return player_id_; }
228 210
229 private: 211 private:
230 void ReallocateVideoFrame(); 212 void ReallocateVideoFrame();
231 213
232 WebKit::WebFrame* const frame_; 214 WebKit::WebFrame* const frame_;
233 215
234 WebKit::WebMediaPlayerClient* const client_; 216 WebKit::WebMediaPlayerClient* const client_;
235 217
236 // Save the list of buffered time ranges. 218 // Save the list of buffered time ranges.
237 WebKit::WebTimeRanges buffered_; 219 WebKit::WebTimeRanges buffered_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 // A pointer back to the compositor to inform it about state changes. This is 280 // A pointer back to the compositor to inform it about state changes. This is
299 // not NULL while the compositor is actively using this webmediaplayer. 281 // not NULL while the compositor is actively using this webmediaplayer.
300 cc::VideoFrameProvider::Client* video_frame_provider_client_; 282 cc::VideoFrameProvider::Client* video_frame_provider_client_;
301 283
302 scoped_ptr<webkit::WebLayerImpl> video_weblayer_; 284 scoped_ptr<webkit::WebLayerImpl> video_weblayer_;
303 285
304 #if defined(GOOGLE_TV) 286 #if defined(GOOGLE_TV)
305 // A rectangle represents the geometry of video frame, when computed last 287 // A rectangle represents the geometry of video frame, when computed last
306 // time. 288 // time.
307 gfx::RectF last_computed_rect_; 289 gfx::RectF last_computed_rect_;
308
309 scoped_ptr<MediaSourceDelegate> media_source_delegate_;
310 #endif 290 #endif
311 291
312 // Proxy object that delegates method calls on Render Thread. 292 // Proxy object that delegates method calls on Render Thread.
313 // This object is created on the Render Thread and is only called in the 293 // This object is created on the Render Thread and is only called in the
314 // destructor. 294 // destructor.
315 WebMediaPlayerProxyAndroid* proxy_; 295 WebMediaPlayerProxyAndroid* proxy_;
316 296
317 // The current playing time. Because the media player is in the browser 297 // The current playing time. Because the media player is in the browser
318 // process, it will regularly update the |current_time_| by calling 298 // process, it will regularly update the |current_time_| by calling
319 // OnTimeUpdate(). 299 // OnTimeUpdate().
320 float current_time_; 300 float current_time_;
321 301
322 media::MediaLog* media_log_; 302 media::MediaLog* media_log_;
323 303
324 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid); 304 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid);
325 }; 305 };
326 306
327 } // namespace webkit_media 307 } // namespace webkit_media
328 308
329 #endif // WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ 309 #endif // WEBKIT_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698