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 // There is a chicken-and-egg problem between WMPI waiting until we have | |
86 // enough data to send a playback_rate > 0, and for HLS files to trigger a | |
tguilbert
2016/10/06 02:11:39
I will re-word this comment.
tguilbert
2016/10/11 18:54:33
Done.
| |
87 // call to OnBufferingUpdate. Always return BUFFERING_HAVE_ENOUGH here, since | |
88 // MediaPlayer manages its own buffering and will pause internally if ever it | |
89 // runs out of data. | |
90 // TODO(tguilbert): Investigate the effect of this call on UMAs. | |
91 renderer_client_->OnBufferingStateChange(media::BUFFERING_HAVE_ENOUGH); | |
84 } | 92 } |
85 | 93 |
86 void MediaPlayerRenderer::SetPlaybackRate(double playback_rate) { | 94 void MediaPlayerRenderer::SetPlaybackRate(double playback_rate) { |
87 if (has_error_) | 95 if (has_error_) |
88 return; | 96 return; |
89 | 97 |
90 if (playback_rate == 0) { | 98 if (playback_rate == 0) { |
91 media_player_->Pause(true); | 99 media_player_->Pause(true); |
92 } else { | 100 } else { |
93 // MediaPlayerBridge's Start() is idempotent. | 101 // MediaPlayerBridge's Start() is idempotent. |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
175 renderer_client_->OnDurationChange(duration); | 183 renderer_client_->OnDurationChange(duration); |
176 } | 184 } |
177 } | 185 } |
178 | 186 |
179 void MediaPlayerRenderer::OnPlaybackComplete(int player_id) { | 187 void MediaPlayerRenderer::OnPlaybackComplete(int player_id) { |
180 renderer_client_->OnEnded(); | 188 renderer_client_->OnEnded(); |
181 } | 189 } |
182 | 190 |
183 void MediaPlayerRenderer::OnMediaInterrupted(int player_id) {} | 191 void MediaPlayerRenderer::OnMediaInterrupted(int player_id) {} |
184 | 192 |
185 void MediaPlayerRenderer::OnBufferingUpdate(int player_id, int percentage) { | 193 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 | 194 |
195 void MediaPlayerRenderer::OnSeekComplete(int player_id, | 195 void MediaPlayerRenderer::OnSeekComplete(int player_id, |
196 const base::TimeDelta& current_time) {} | 196 const base::TimeDelta& current_time) {} |
197 | 197 |
198 void MediaPlayerRenderer::OnError(int player_id, int error) { | 198 void MediaPlayerRenderer::OnError(int player_id, int error) { |
199 // Some errors are forwarded to the MediaPlayerListener, but are of no | 199 // 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 | 200 // importance to us. Ignore these errors, which are reported as error 0 by |
201 // MediaPlayerListener. | 201 // MediaPlayerListener. |
202 if (!error) | 202 if (!error) |
203 return; | 203 return; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
243 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { | 243 void MediaPlayerRenderer::CancelScopedSurfaceRequest() { |
244 if (!surface_request_token_) | 244 if (!surface_request_token_) |
245 return; | 245 return; |
246 | 246 |
247 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( | 247 ScopedSurfaceRequestManager::GetInstance()->UnregisterScopedSurfaceRequest( |
248 surface_request_token_); | 248 surface_request_token_); |
249 surface_request_token_ = base::UnguessableToken(); | 249 surface_request_token_ = base::UnguessableToken(); |
250 } | 250 } |
251 | 251 |
252 } // namespace content | 252 } // namespace content |
OLD | NEW |