OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/browser/media/android/media_player_renderer.h" | 5 #include "content/browser/media/android/media_player_renderer.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "content/browser/android/scoped_surface_request_manager.h" | 9 #include "content/browser/android/scoped_surface_request_manager.h" |
10 #include "content/browser/media/android/media_resource_getter_impl.h" | 10 #include "content/browser/media/android/media_resource_getter_impl.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 } | 74 } |
75 | 75 |
76 void MediaPlayerRenderer::StartPlayingFrom(base::TimeDelta time) { | 76 void MediaPlayerRenderer::StartPlayingFrom(base::TimeDelta time) { |
77 // MediaPlayerBridge's Start() is idempotent, except when it has encountered | 77 // MediaPlayerBridge's Start() is idempotent, except when it has encountered |
78 // an error (in which case, calling Start() again is logged as a new error). | 78 // an error (in which case, calling Start() again is logged as a new error). |
79 if (has_error_) | 79 if (has_error_) |
80 return; | 80 return; |
81 | 81 |
82 media_player_->Start(); | 82 media_player_->Start(); |
83 media_player_->SeekTo(time); | 83 media_player_->SeekTo(time); |
| 84 |
| 85 // WMPI needs to receive a BUFFERING_HAVE_ENOUGH data before sending a |
| 86 // playback_rate > 0. The MediaPlayer manages its own buffering and will pause |
| 87 // internally if ever it runs out of data. Sending BUFFERING_HAVE_ENOUGH here |
| 88 // is always safe. |
| 89 // |
| 90 // NOTE: OnBufferingUpdate is triggered whenever the media has buffered or |
| 91 // played up to a % value between 1-100, and it's not a reliable indicator of |
| 92 // the buffering state. |
| 93 // |
| 94 // TODO(tguilbert): Investigate the effect of this call on UMAs. |
| 95 renderer_client_->OnBufferingStateChange(media::BUFFERING_HAVE_ENOUGH); |
84 } | 96 } |
85 | 97 |
86 void MediaPlayerRenderer::SetPlaybackRate(double playback_rate) { | 98 void MediaPlayerRenderer::SetPlaybackRate(double playback_rate) { |
87 if (has_error_) | 99 if (has_error_) |
88 return; | 100 return; |
89 | 101 |
90 if (playback_rate == 0) { | 102 if (playback_rate == 0) { |
91 media_player_->Pause(true); | 103 media_player_->Pause(true); |
92 } else { | 104 } else { |
93 // MediaPlayerBridge's Start() is idempotent. | 105 // MediaPlayerBridge's Start() is idempotent. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
175 renderer_client_->OnDurationChange(duration); | 187 renderer_client_->OnDurationChange(duration); |
176 } | 188 } |
177 } | 189 } |
178 | 190 |
179 void MediaPlayerRenderer::OnPlaybackComplete(int player_id) { | 191 void MediaPlayerRenderer::OnPlaybackComplete(int player_id) { |
180 renderer_client_->OnEnded(); | 192 renderer_client_->OnEnded(); |
181 } | 193 } |
182 | 194 |
183 void MediaPlayerRenderer::OnMediaInterrupted(int player_id) {} | 195 void MediaPlayerRenderer::OnMediaInterrupted(int player_id) {} |
184 | 196 |
185 void MediaPlayerRenderer::OnBufferingUpdate(int player_id, int percentage) { | 197 void MediaPlayerRenderer::OnBufferingUpdate(int player_id, int percentage) {} |
186 // As per Android documentation, |percentage| actually indicates "percentage | |
187 // buffered or played". E.g. if we are at 50% playback and have 1% | |
188 // buffered, |percentage| will be equal to 51. | |
189 // | |
190 // MediaPlayer manages its own buffering and will pause internally if ever it | |
191 // runs out of data. Therefore, we can always return BUFFERING_HAVE_ENOUGH. | |
192 renderer_client_->OnBufferingStateChange(media::BUFFERING_HAVE_ENOUGH); | |
193 } | |
194 | 198 |
195 void MediaPlayerRenderer::OnSeekComplete(int player_id, | 199 void MediaPlayerRenderer::OnSeekComplete(int player_id, |
196 const base::TimeDelta& current_time) {} | 200 const base::TimeDelta& current_time) {} |
197 | 201 |
198 void MediaPlayerRenderer::OnError(int player_id, int error) { | 202 void MediaPlayerRenderer::OnError(int player_id, int error) { |
199 // Some errors are forwarded to the MediaPlayerListener, but are of no | 203 // Some errors are forwarded to the MediaPlayerListener, but are of no |
200 // importance to us. Ignore these errors, which are reported as error 0 by | 204 // importance to us. Ignore these errors, which are reported as error 0 by |
201 // MediaPlayerListener. | 205 // MediaPlayerListener. |
202 if (!error) | 206 if (!error) |
203 return; | 207 return; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { | 247 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { |
244 if (!surface_request_token_) | 248 if (!surface_request_token_) |
245 return; | 249 return; |
246 | 250 |
247 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( | 251 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( |
248 surface_request_token_); | 252 surface_request_token_); |
249 surface_request_token_ = base::UnguessableToken(); | 253 surface_request_token_ = base::UnguessableToken(); |
250 } | 254 } |
251 | 255 |
252 } // namespace content | 256 } // namespace content |
OLD | NEW |