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 #include "content/renderer/media/android/webmediaplayer_android.h" | 5 #include "content/renderer/media/android/webmediaplayer_android.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 pending_seek_(false), | 76 pending_seek_(false), |
77 seeking_(false), | 77 seeking_(false), |
78 did_loading_progress_(false), | 78 did_loading_progress_(false), |
79 manager_(manager), | 79 manager_(manager), |
80 network_state_(WebMediaPlayer::NetworkStateEmpty), | 80 network_state_(WebMediaPlayer::NetworkStateEmpty), |
81 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 81 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
82 texture_id_(0), | 82 texture_id_(0), |
83 texture_mailbox_sync_point_(0), | 83 texture_mailbox_sync_point_(0), |
84 stream_id_(0), | 84 stream_id_(0), |
85 is_playing_(false), | 85 is_playing_(false), |
| 86 playing_started_(false), |
86 needs_establish_peer_(true), | 87 needs_establish_peer_(true), |
87 stream_texture_proxy_initialized_(false), | 88 stream_texture_proxy_initialized_(false), |
88 has_size_info_(false), | 89 has_size_info_(false), |
89 has_media_metadata_(false), | 90 has_media_metadata_(false), |
90 has_media_info_(false), | 91 has_media_info_(false), |
91 stream_texture_factory_(factory), | 92 stream_texture_factory_(factory), |
92 needs_external_surface_(false), | 93 needs_external_surface_(false), |
93 video_frame_provider_client_(NULL), | 94 video_frame_provider_client_(NULL), |
94 #if defined(GOOGLE_TV) | 95 #if defined(GOOGLE_TV) |
95 external_surface_threshold_(-1), | 96 external_surface_threshold_(-1), |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 294 UpdateNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
294 return; | 295 return; |
295 } | 296 } |
296 | 297 |
297 has_media_info_ = true; | 298 has_media_info_ = true; |
298 if (has_media_metadata_ && | 299 if (has_media_metadata_ && |
299 ready_state_ != WebMediaPlayer::ReadyStateHaveEnoughData) { | 300 ready_state_ != WebMediaPlayer::ReadyStateHaveEnoughData) { |
300 UpdateReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 301 UpdateReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
301 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | 302 UpdateReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); |
302 } | 303 } |
| 304 // Android doesn't start fetching resources until an implementation-defined |
| 305 // event (e.g. playback request) occurs. Sets the network state to IDLE |
| 306 // if play is not requested yet. |
| 307 if (!playing_started_) |
| 308 UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); |
303 } | 309 } |
304 | 310 |
305 void WebMediaPlayerAndroid::play() { | 311 void WebMediaPlayerAndroid::play() { |
306 #if defined(GOOGLE_TV) | 312 #if defined(GOOGLE_TV) |
307 if (hasVideo() && needs_external_surface_ && | 313 if (hasVideo() && needs_external_surface_ && |
308 !manager_->IsInFullscreen(frame_)) { | 314 !manager_->IsInFullscreen(frame_)) { |
309 DCHECK(!needs_establish_peer_); | 315 DCHECK(!needs_establish_peer_); |
310 proxy_->RequestExternalSurface(player_id_, last_computed_rect_); | 316 proxy_->RequestExternalSurface(player_id_, last_computed_rect_); |
311 } | 317 } |
312 if (audio_renderer_ && paused()) | 318 if (audio_renderer_ && paused()) |
313 audio_renderer_->Play(); | 319 audio_renderer_->Play(); |
314 #endif | 320 #endif |
315 if (hasVideo() && needs_establish_peer_) | 321 if (hasVideo() && needs_establish_peer_) |
316 EstablishSurfaceTexturePeer(); | 322 EstablishSurfaceTexturePeer(); |
317 | 323 |
318 if (paused()) | 324 if (paused()) |
319 proxy_->Start(player_id_); | 325 proxy_->Start(player_id_); |
320 UpdatePlayingState(true); | 326 UpdatePlayingState(true); |
| 327 UpdateNetworkState(WebMediaPlayer::NetworkStateLoading); |
| 328 playing_started_ = true; |
321 } | 329 } |
322 | 330 |
323 void WebMediaPlayerAndroid::pause() { | 331 void WebMediaPlayerAndroid::pause() { |
324 pause(true); | 332 pause(true); |
325 } | 333 } |
326 | 334 |
327 void WebMediaPlayerAndroid::pause(bool is_media_related_action) { | 335 void WebMediaPlayerAndroid::pause(bool is_media_related_action) { |
328 #if defined(GOOGLE_TV) | 336 #if defined(GOOGLE_TV) |
329 if (audio_renderer_ && !paused()) | 337 if (audio_renderer_ && !paused()) |
330 audio_renderer_->Pause(); | 338 audio_renderer_->Pause(); |
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 | 1236 |
1229 void WebMediaPlayerAndroid::exitFullscreen() { | 1237 void WebMediaPlayerAndroid::exitFullscreen() { |
1230 proxy_->ExitFullscreen(player_id_); | 1238 proxy_->ExitFullscreen(player_id_); |
1231 } | 1239 } |
1232 | 1240 |
1233 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1241 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
1234 return manager_->CanEnterFullscreen(frame_); | 1242 return manager_->CanEnterFullscreen(frame_); |
1235 } | 1243 } |
1236 | 1244 |
1237 } // namespace content | 1245 } // namespace content |
OLD | NEW |