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 "media/blink/webmediaplayer_impl.h" | 5 #include "media/blink/webmediaplayer_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 #include <string> | 10 #include <string> |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 } | 197 } |
198 | 198 |
199 // TODO(xhwang): When we use an external Renderer, many methods won't work, | 199 // TODO(xhwang): When we use an external Renderer, many methods won't work, |
200 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 | 200 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 |
201 | 201 |
202 // Use the null sink if no sink was provided. | 202 // Use the null sink if no sink was provided. |
203 audio_source_provider_ = new WebAudioSourceProviderImpl( | 203 audio_source_provider_ = new WebAudioSourceProviderImpl( |
204 params.audio_renderer_sink().get() | 204 params.audio_renderer_sink().get() |
205 ? params.audio_renderer_sink() | 205 ? params.audio_renderer_sink() |
206 : new NullAudioSink(media_task_runner_)); | 206 : new NullAudioSink(media_task_runner_)); |
| 207 #if defined(OS_ANDROID) |
| 208 audio_source_provider_->enable_audio_focus(); |
| 209 #endif |
207 } | 210 } |
208 | 211 |
209 WebMediaPlayerImpl::~WebMediaPlayerImpl() { | 212 WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
210 client_->setWebLayer(NULL); | 213 client_->setWebLayer(NULL); |
211 | 214 |
212 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 215 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
213 | 216 |
214 if (delegate_) { | 217 if (delegate_) |
215 delegate_->RemoveObserver(this); | |
216 delegate_->PlayerGone(this); | 218 delegate_->PlayerGone(this); |
217 } | |
218 | 219 |
219 // Abort any pending IO so stopping the pipeline doesn't get blocked. | 220 // Abort any pending IO so stopping the pipeline doesn't get blocked. |
220 if (data_source_) | 221 if (data_source_) |
221 data_source_->Abort(); | 222 data_source_->Abort(); |
222 if (chunk_demuxer_) { | 223 if (chunk_demuxer_) { |
223 chunk_demuxer_->Shutdown(); | 224 chunk_demuxer_->Shutdown(); |
224 chunk_demuxer_ = NULL; | 225 chunk_demuxer_ = NULL; |
225 } | 226 } |
226 | 227 |
227 renderer_factory_.reset(); | 228 renderer_factory_.reset(); |
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1027 | 1028 |
1028 scoped_ptr<WebInbandTextTrackImpl> web_inband_text_track( | 1029 scoped_ptr<WebInbandTextTrackImpl> web_inband_text_track( |
1029 new WebInbandTextTrackImpl(web_kind, web_label, web_language, web_id)); | 1030 new WebInbandTextTrackImpl(web_kind, web_label, web_language, web_id)); |
1030 | 1031 |
1031 scoped_ptr<TextTrack> text_track(new TextTrackImpl( | 1032 scoped_ptr<TextTrack> text_track(new TextTrackImpl( |
1032 main_task_runner_, client_, std::move(web_inband_text_track))); | 1033 main_task_runner_, client_, std::move(web_inband_text_track))); |
1033 | 1034 |
1034 done_cb.Run(std::move(text_track)); | 1035 done_cb.Run(std::move(text_track)); |
1035 } | 1036 } |
1036 | 1037 |
| 1038 blink::WebMediaPlayer* WebMediaPlayerImpl::GetPlayer() { |
| 1039 return this; |
| 1040 } |
| 1041 |
1037 void WebMediaPlayerImpl::OnHidden() { | 1042 void WebMediaPlayerImpl::OnHidden() { |
1038 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1043 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1039 | 1044 |
1040 #if !defined(OS_ANDROID) | 1045 #if !defined(OS_ANDROID) |
1041 // Suspend/Resume is enabled by default on Android. | 1046 // Suspend/Resume is enabled by default on Android. |
1042 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | 1047 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
1043 switches::kEnableMediaSuspend)) { | 1048 switches::kEnableMediaSuspend)) { |
1044 return; | 1049 return; |
1045 } | 1050 } |
1046 #endif // !defined(OS_ANDROID) | 1051 #endif // !defined(OS_ANDROID) |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1105 } | 1110 } |
1106 | 1111 |
1107 // We may not be suspended if we were not yet subscribed or the pipeline was | 1112 // We may not be suspended if we were not yet subscribed or the pipeline was |
1108 // not yet started when OnHidden() fired. | 1113 // not yet started when OnHidden() fired. |
1109 if (!suspended_) | 1114 if (!suspended_) |
1110 return; | 1115 return; |
1111 | 1116 |
1112 Resume(); | 1117 Resume(); |
1113 } | 1118 } |
1114 | 1119 |
| 1120 void WebMediaPlayerImpl::OnPlay() { |
| 1121 // TODO(dalecurtis): All clients use the same code for OnPlay/OnPause... which |
| 1122 // suggests there's some cleanup worth doing. |
| 1123 play(); |
| 1124 client_->playbackStateChanged(); |
| 1125 } |
| 1126 |
| 1127 void WebMediaPlayerImpl::OnPause() { |
| 1128 pause(); |
| 1129 client_->playbackStateChanged(); |
| 1130 } |
| 1131 |
1115 void WebMediaPlayerImpl::Resume() { | 1132 void WebMediaPlayerImpl::Resume() { |
1116 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1133 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1117 CHECK(suspended_); | 1134 CHECK(suspended_); |
1118 CHECK(!resuming_); | 1135 CHECK(!resuming_); |
1119 | 1136 |
1120 // If there was a time change pending when we suspended (which can happen when | 1137 // If there was a time change pending when we suspended (which can happen when |
1121 // we suspend immediately after a seek), surface it after resuming. | 1138 // we suspend immediately after a seek), surface it after resuming. |
1122 bool time_changed = pending_time_change_; | 1139 bool time_changed = pending_time_change_; |
1123 pending_time_change_ = false; | 1140 pending_time_change_ = false; |
1124 | 1141 |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1373 << ", Video: " << stats.video_memory_usage << ", DataSource: " | 1390 << ", Video: " << stats.video_memory_usage << ", DataSource: " |
1374 << (data_source_ ? data_source_->GetMemoryUsage() : 0) | 1391 << (data_source_ ? data_source_->GetMemoryUsage() : 0) |
1375 << ", Demuxer: " << demuxer_memory_usage; | 1392 << ", Demuxer: " << demuxer_memory_usage; |
1376 | 1393 |
1377 const int64_t delta = current_memory_usage - last_reported_memory_usage_; | 1394 const int64_t delta = current_memory_usage - last_reported_memory_usage_; |
1378 last_reported_memory_usage_ = current_memory_usage; | 1395 last_reported_memory_usage_ = current_memory_usage; |
1379 adjust_allocated_memory_cb_.Run(delta); | 1396 adjust_allocated_memory_cb_.Run(delta); |
1380 } | 1397 } |
1381 | 1398 |
1382 } // namespace media | 1399 } // namespace media |
OLD | NEW |