OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ | 5 #ifndef CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
6 #define CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ | 6 #define CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
7 | 7 |
8 #include <jni.h> | 8 #include <jni.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 class RendererCdmManager; | 63 class RendererCdmManager; |
64 class RendererMediaPlayerManager; | 64 class RendererMediaPlayerManager; |
65 class WebContentDecryptionModuleImpl; | 65 class WebContentDecryptionModuleImpl; |
66 | 66 |
67 // This class implements blink::WebMediaPlayer by keeping the android | 67 // This class implements blink::WebMediaPlayer by keeping the android |
68 // media player in the browser process. It listens to all the status changes | 68 // media player in the browser process. It listens to all the status changes |
69 // sent from the browser process and sends playback controls to the media | 69 // sent from the browser process and sends playback controls to the media |
70 // player. | 70 // player. |
71 class WebMediaPlayerAndroid : public blink::WebMediaPlayer, | 71 class WebMediaPlayerAndroid : public blink::WebMediaPlayer, |
72 public cc::VideoFrameProvider, | 72 public cc::VideoFrameProvider, |
73 public RenderFrameObserver { | 73 public RenderFrameObserver, |
| 74 public StreamTextureFactoryContextObserver { |
74 public: | 75 public: |
75 // Construct a WebMediaPlayerAndroid object. This class communicates with the | 76 // Construct a WebMediaPlayerAndroid object. This class communicates with the |
76 // MediaPlayerAndroid object in the browser process through |proxy|. | 77 // MediaPlayerAndroid object in the browser process through |proxy|. |
77 // TODO(qinmin): |frame| argument is used to determine whether the current | 78 // TODO(qinmin): |frame| argument is used to determine whether the current |
78 // player can enter fullscreen. This logic should probably be moved into | 79 // player can enter fullscreen. This logic should probably be moved into |
79 // blink, so that enterFullscreen() will not be called if another video is | 80 // blink, so that enterFullscreen() will not be called if another video is |
80 // already in fullscreen. | 81 // already in fullscreen. |
81 WebMediaPlayerAndroid( | 82 WebMediaPlayerAndroid( |
82 blink::WebFrame* frame, | 83 blink::WebFrame* frame, |
83 blink::WebMediaPlayerClient* client, | 84 blink::WebMediaPlayerClient* client, |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 | 190 |
190 // Functions called when media player status changes. | 191 // Functions called when media player status changes. |
191 void OnConnectedToRemoteDevice(const std::string& remote_playback_message); | 192 void OnConnectedToRemoteDevice(const std::string& remote_playback_message); |
192 void OnDisconnectedFromRemoteDevice(); | 193 void OnDisconnectedFromRemoteDevice(); |
193 void OnDidEnterFullscreen(); | 194 void OnDidEnterFullscreen(); |
194 void OnDidExitFullscreen(); | 195 void OnDidExitFullscreen(); |
195 void OnMediaPlayerPlay(); | 196 void OnMediaPlayerPlay(); |
196 void OnMediaPlayerPause(); | 197 void OnMediaPlayerPause(); |
197 void OnRequestFullscreen(); | 198 void OnRequestFullscreen(); |
198 | 199 |
| 200 // StreamTextureFactoryContextObserver implementation. |
| 201 virtual void ResetStreamTextureProxy() OVERRIDE; |
| 202 |
199 // Called when the player is released. | 203 // Called when the player is released. |
200 virtual void OnPlayerReleased(); | 204 virtual void OnPlayerReleased(); |
201 | 205 |
202 // This function is called by the RendererMediaPlayerManager to pause the | 206 // This function is called by the RendererMediaPlayerManager to pause the |
203 // video and release the media player and surface texture when we switch tabs. | 207 // video and release the media player and surface texture when we switch tabs. |
204 // However, the actual GlTexture is not released to keep the video screenshot. | 208 // However, the actual GlTexture is not released to keep the video screenshot. |
205 virtual void ReleaseMediaResources(); | 209 virtual void ReleaseMediaResources(); |
206 | 210 |
207 // RenderFrameObserver implementation. | 211 // RenderFrameObserver implementation. |
208 virtual void OnDestruct() OVERRIDE; | 212 virtual void OnDestruct() OVERRIDE; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 279 |
276 private: | 280 private: |
277 void InitializePlayer(const GURL& url, | 281 void InitializePlayer(const GURL& url, |
278 const GURL& first_party_for_cookies, | 282 const GURL& first_party_for_cookies, |
279 bool allowed_stored_credentials, | 283 bool allowed_stored_credentials, |
280 int demuxer_client_id); | 284 int demuxer_client_id); |
281 void Pause(bool is_media_related_action); | 285 void Pause(bool is_media_related_action); |
282 void DrawRemotePlaybackText(const std::string& remote_playback_message); | 286 void DrawRemotePlaybackText(const std::string& remote_playback_message); |
283 void ReallocateVideoFrame(); | 287 void ReallocateVideoFrame(); |
284 void SetCurrentFrameInternal(scoped_refptr<media::VideoFrame>& frame); | 288 void SetCurrentFrameInternal(scoped_refptr<media::VideoFrame>& frame); |
| 289 void UpdateFrameOnClientThread(); |
285 void DidLoadMediaInfo(MediaInfoLoader::Status status, | 290 void DidLoadMediaInfo(MediaInfoLoader::Status status, |
286 const GURL& redirected_url, | 291 const GURL& redirected_url, |
287 const GURL& first_party_for_cookies, | 292 const GURL& first_party_for_cookies, |
288 bool allow_stored_credentials); | 293 bool allow_stored_credentials); |
289 bool IsKeySystemSupported(const std::string& key_system); | 294 bool IsKeySystemSupported(const std::string& key_system); |
290 bool IsLocalResource(); | 295 bool IsLocalResource(); |
291 | 296 |
292 // Actually do the work for generateKeyRequest/addKey so they can easily | 297 // Actually do the work for generateKeyRequest/addKey so they can easily |
293 // report results to UMA. | 298 // report results to UMA. |
294 MediaKeyException GenerateKeyRequestInternal(const std::string& key_system, | 299 MediaKeyException GenerateKeyRequestInternal(const std::string& key_system, |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 blink::WebTimeRanges buffered_; | 342 blink::WebTimeRanges buffered_; |
338 | 343 |
339 // Size of the video. | 344 // Size of the video. |
340 blink::WebSize natural_size_; | 345 blink::WebSize natural_size_; |
341 | 346 |
342 // Size that has been sent to StreamTexture. | 347 // Size that has been sent to StreamTexture. |
343 blink::WebSize cached_stream_texture_size_; | 348 blink::WebSize cached_stream_texture_size_; |
344 | 349 |
345 // The video frame object used for rendering by the compositor. | 350 // The video frame object used for rendering by the compositor. |
346 scoped_refptr<media::VideoFrame> current_frame_; | 351 scoped_refptr<media::VideoFrame> current_frame_; |
347 base::Lock current_frame_lock_; | 352 // Whether |stream_texture_proxy_| is initialized. |
| 353 bool stream_texture_proxy_initialized_; |
| 354 scoped_refptr<base::MessageLoopProxy> client_bound_loop_; |
| 355 base::Lock current_frame_lock_; // TODO(boliu): Rename this var. |
348 | 356 |
349 base::ThreadChecker main_thread_checker_; | 357 base::ThreadChecker main_thread_checker_; |
350 | 358 |
351 // Message loop for media thread. | 359 // Message loop for media thread. |
352 const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; | 360 const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
353 | 361 |
354 // URL of the media file to be fetched. | 362 // URL of the media file to be fetched. |
355 GURL url_; | 363 GURL url_; |
356 | 364 |
357 // URL of the media file after |media_info_loader_| resolves all the | 365 // URL of the media file after |media_info_loader_| resolves all the |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 | 411 |
404 // Stream texture ID allocated to the video. | 412 // Stream texture ID allocated to the video. |
405 unsigned int stream_id_; | 413 unsigned int stream_id_; |
406 | 414 |
407 // Whether the mediaplayer is playing. | 415 // Whether the mediaplayer is playing. |
408 bool is_playing_; | 416 bool is_playing_; |
409 | 417 |
410 // Whether media player needs to re-establish the surface texture peer. | 418 // Whether media player needs to re-establish the surface texture peer. |
411 bool needs_establish_peer_; | 419 bool needs_establish_peer_; |
412 | 420 |
413 // Whether |stream_texture_proxy_| is initialized. | |
414 bool stream_texture_proxy_initialized_; | |
415 | |
416 // Whether the video size info is available. | 421 // Whether the video size info is available. |
417 bool has_size_info_; | 422 bool has_size_info_; |
418 | 423 |
419 // Object for allocating stream textures. | 424 // Object for allocating stream textures. |
420 scoped_refptr<StreamTextureFactory> stream_texture_factory_; | 425 scoped_refptr<StreamTextureFactory> stream_texture_factory_; |
421 | 426 |
422 // Object for calling back the compositor thread to repaint the video when a | 427 // Object for calling back the compositor thread to repaint the video when a |
423 // frame available. It should be initialized on the compositor thread. | 428 // frame available. It should be initialized on the compositor thread. |
424 ScopedStreamTextureProxy stream_texture_proxy_; | 429 ScopedStreamTextureProxy stream_texture_proxy_; |
425 | 430 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
495 | 500 |
496 // NOTE: Weak pointers must be invalidated before all other member variables. | 501 // NOTE: Weak pointers must be invalidated before all other member variables. |
497 base::WeakPtrFactory<WebMediaPlayerAndroid> weak_factory_; | 502 base::WeakPtrFactory<WebMediaPlayerAndroid> weak_factory_; |
498 | 503 |
499 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid); | 504 DISALLOW_COPY_AND_ASSIGN(WebMediaPlayerAndroid); |
500 }; | 505 }; |
501 | 506 |
502 } // namespace content | 507 } // namespace content |
503 | 508 |
504 #endif // CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ | 509 #endif // CONTENT_RENDERER_MEDIA_ANDROID_WEBMEDIAPLAYER_ANDROID_H_ |
OLD | NEW |