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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
170 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeUseCredentials, | 170 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeUseCredentials, |
171 UrlData::CORS_USE_CREDENTIALS); | 171 UrlData::CORS_USE_CREDENTIALS); |
172 | 172 |
173 WebMediaPlayerImpl::WebMediaPlayerImpl( | 173 WebMediaPlayerImpl::WebMediaPlayerImpl( |
174 blink::WebLocalFrame* frame, | 174 blink::WebLocalFrame* frame, |
175 blink::WebMediaPlayerClient* client, | 175 blink::WebMediaPlayerClient* client, |
176 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, | 176 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, |
177 WebMediaPlayerDelegate* delegate, | 177 WebMediaPlayerDelegate* delegate, |
178 std::unique_ptr<RendererFactory> renderer_factory, | 178 std::unique_ptr<RendererFactory> renderer_factory, |
179 linked_ptr<UrlIndex> url_index, | 179 linked_ptr<UrlIndex> url_index, |
180 const WebMediaPlayerParams& params) | 180 std::unique_ptr<WebMediaPlayerParams> params) |
181 : frame_(frame), | 181 : frame_(frame), |
182 delegate_state_(DelegateState::GONE), | 182 delegate_state_(DelegateState::GONE), |
183 delegate_has_audio_(false), | 183 delegate_has_audio_(false), |
184 network_state_(WebMediaPlayer::kNetworkStateEmpty), | 184 network_state_(WebMediaPlayer::kNetworkStateEmpty), |
185 ready_state_(WebMediaPlayer::kReadyStateHaveNothing), | 185 ready_state_(WebMediaPlayer::kReadyStateHaveNothing), |
186 highest_ready_state_(WebMediaPlayer::kReadyStateHaveNothing), | 186 highest_ready_state_(WebMediaPlayer::kReadyStateHaveNothing), |
187 preload_(MultibufferDataSource::AUTO), | 187 preload_(MultibufferDataSource::AUTO), |
188 main_task_runner_(frame->LoadingTaskRunner()), | 188 main_task_runner_(frame->LoadingTaskRunner()), |
189 media_task_runner_(params.media_task_runner()), | 189 media_task_runner_(params->media_task_runner()), |
190 worker_task_runner_(params.worker_task_runner()), | 190 worker_task_runner_(params->worker_task_runner()), |
191 media_log_(params.media_log()), | 191 media_log_(params->take_media_log()), |
192 pipeline_controller_( | 192 pipeline_controller_( |
193 base::MakeUnique<PipelineImpl>(media_task_runner_, media_log_.get()), | 193 base::MakeUnique<PipelineImpl>(media_task_runner_, media_log_.get()), |
194 base::Bind(&WebMediaPlayerImpl::CreateRenderer, | 194 base::Bind(&WebMediaPlayerImpl::CreateRenderer, |
195 base::Unretained(this)), | 195 base::Unretained(this)), |
196 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), | 196 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), |
197 base::Bind(&WebMediaPlayerImpl::OnPipelineSuspended, AsWeakPtr()), | 197 base::Bind(&WebMediaPlayerImpl::OnPipelineSuspended, AsWeakPtr()), |
198 base::Bind(&WebMediaPlayerImpl::OnBeforePipelineResume, AsWeakPtr()), | 198 base::Bind(&WebMediaPlayerImpl::OnBeforePipelineResume, AsWeakPtr()), |
199 base::Bind(&WebMediaPlayerImpl::OnPipelineResumed, AsWeakPtr()), | 199 base::Bind(&WebMediaPlayerImpl::OnPipelineResumed, AsWeakPtr()), |
200 base::Bind(&WebMediaPlayerImpl::OnError, AsWeakPtr())), | 200 base::Bind(&WebMediaPlayerImpl::OnError, AsWeakPtr())), |
201 load_type_(kLoadTypeURL), | 201 load_type_(kLoadTypeURL), |
202 opaque_(false), | 202 opaque_(false), |
203 playback_rate_(0.0), | 203 playback_rate_(0.0), |
204 paused_(true), | 204 paused_(true), |
205 paused_when_hidden_(false), | 205 paused_when_hidden_(false), |
206 seeking_(false), | 206 seeking_(false), |
207 pending_suspend_resume_cycle_(false), | 207 pending_suspend_resume_cycle_(false), |
208 ended_(false), | 208 ended_(false), |
209 should_notify_time_changed_(false), | 209 should_notify_time_changed_(false), |
210 overlay_enabled_(false), | 210 overlay_enabled_(false), |
211 decoder_requires_restart_for_overlay_(false), | 211 decoder_requires_restart_for_overlay_(false), |
212 client_(client), | 212 client_(client), |
213 encrypted_client_(encrypted_client), | 213 encrypted_client_(encrypted_client), |
214 delegate_(delegate), | 214 delegate_(delegate), |
215 delegate_id_(0), | 215 delegate_id_(0), |
216 defer_load_cb_(params.defer_load_cb()), | 216 defer_load_cb_(params->defer_load_cb()), |
217 context_3d_cb_(params.context_3d_cb()), | 217 context_3d_cb_(params->context_3d_cb()), |
218 adjust_allocated_memory_cb_(params.adjust_allocated_memory_cb()), | 218 adjust_allocated_memory_cb_(params->adjust_allocated_memory_cb()), |
219 last_reported_memory_usage_(0), | 219 last_reported_memory_usage_(0), |
220 supports_save_(true), | 220 supports_save_(true), |
221 chunk_demuxer_(NULL), | 221 chunk_demuxer_(NULL), |
222 url_index_(url_index), | 222 url_index_(url_index), |
223 // Threaded compositing isn't enabled universally yet. | 223 // Threaded compositing isn't enabled universally yet. |
224 compositor_task_runner_(params.compositor_task_runner() | 224 compositor_task_runner_(params->compositor_task_runner() |
225 ? params.compositor_task_runner() | 225 ? params->compositor_task_runner() |
226 : base::ThreadTaskRunnerHandle::Get()), | 226 : base::ThreadTaskRunnerHandle::Get()), |
227 compositor_(new VideoFrameCompositor(compositor_task_runner_)), | 227 compositor_(new VideoFrameCompositor(compositor_task_runner_)), |
228 #if defined(OS_ANDROID) // WMPI_CAST | 228 #if defined(OS_ANDROID) // WMPI_CAST |
229 cast_impl_(this, client_, params.context_3d_cb()), | 229 cast_impl_(this, client_, params->context_3d_cb()), |
230 #endif | 230 #endif |
231 volume_(1.0), | 231 volume_(1.0), |
232 volume_multiplier_(1.0), | 232 volume_multiplier_(1.0), |
233 renderer_factory_(std::move(renderer_factory)), | 233 renderer_factory_(std::move(renderer_factory)), |
234 surface_manager_(params.surface_manager()), | 234 surface_manager_(params->surface_manager()), |
235 overlay_surface_id_(SurfaceManager::kNoSurfaceID), | 235 overlay_surface_id_(SurfaceManager::kNoSurfaceID), |
236 suppress_destruction_errors_(false), | 236 suppress_destruction_errors_(false), |
237 suspend_enabled_(params.allow_suspend()), | 237 suspend_enabled_(params->allow_suspend()), |
238 use_fallback_path_(false), | 238 use_fallback_path_(false), |
239 is_encrypted_(false), | 239 is_encrypted_(false), |
240 preroll_attempt_pending_(false), | 240 preroll_attempt_pending_(false), |
241 observer_(params.media_observer()), | 241 observer_(params->media_observer()), |
242 max_keyframe_distance_to_disable_background_video_( | 242 max_keyframe_distance_to_disable_background_video_( |
243 params.max_keyframe_distance_to_disable_background_video()), | 243 params->max_keyframe_distance_to_disable_background_video()), |
244 max_keyframe_distance_to_disable_background_video_mse_( | 244 max_keyframe_distance_to_disable_background_video_mse_( |
245 params.max_keyframe_distance_to_disable_background_video_mse()), | 245 params->max_keyframe_distance_to_disable_background_video_mse()), |
246 enable_instant_source_buffer_gc_( | 246 enable_instant_source_buffer_gc_( |
247 params.enable_instant_source_buffer_gc()), | 247 params->enable_instant_source_buffer_gc()), |
248 embedded_media_experience_enabled_( | 248 embedded_media_experience_enabled_( |
249 params.embedded_media_experience_enabled()) { | 249 params->embedded_media_experience_enabled()) { |
250 DVLOG(1) << __func__; | 250 DVLOG(1) << __func__; |
251 DCHECK(!adjust_allocated_memory_cb_.is_null()); | 251 DCHECK(!adjust_allocated_memory_cb_.is_null()); |
252 DCHECK(renderer_factory_); | 252 DCHECK(renderer_factory_); |
253 DCHECK(client_); | 253 DCHECK(client_); |
254 DCHECK(delegate_); | 254 DCHECK(delegate_); |
255 | 255 |
256 tick_clock_.reset(new base::DefaultTickClock()); | 256 tick_clock_.reset(new base::DefaultTickClock()); |
257 | 257 |
258 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( | 258 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
259 switches::kForceVideoOverlays); | 259 switches::kForceVideoOverlays); |
260 | 260 |
261 enable_fullscreen_video_overlays_ = | 261 enable_fullscreen_video_overlays_ = |
262 base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo); | 262 base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo); |
263 | 263 |
264 delegate_id_ = delegate_->AddObserver(this); | 264 delegate_id_ = delegate_->AddObserver(this); |
265 delegate_->SetIdle(delegate_id_, true); | 265 delegate_->SetIdle(delegate_id_, true); |
266 | 266 |
267 media_log_->AddEvent( | 267 media_log_->AddEvent( |
268 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 268 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
269 | 269 |
270 if (params.initial_cdm()) | 270 if (params->initial_cdm()) |
271 SetCdm(params.initial_cdm()); | 271 SetCdm(params->initial_cdm()); |
272 | 272 |
273 // TODO(xhwang): When we use an external Renderer, many methods won't work, | 273 // TODO(xhwang): When we use an external Renderer, many methods won't work, |
274 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 | 274 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 |
275 audio_source_provider_ = | 275 audio_source_provider_ = new WebAudioSourceProviderImpl( |
276 new WebAudioSourceProviderImpl(params.audio_renderer_sink(), media_log_); | 276 params->audio_renderer_sink(), media_log_.get()); |
277 | 277 |
278 if (observer_) | 278 if (observer_) |
279 observer_->SetClient(this); | 279 observer_->SetClient(this); |
280 } | 280 } |
281 | 281 |
282 WebMediaPlayerImpl::~WebMediaPlayerImpl() { | 282 WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
283 DVLOG(1) << __func__; | 283 DVLOG(1) << __func__; |
284 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 284 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
285 | 285 |
286 if (set_cdm_result_) { | 286 if (set_cdm_result_) { |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 delegate_->SetIsEffectivelyFullscreen(delegate_id_, isEffectivelyFullscreen); | 393 delegate_->SetIsEffectivelyFullscreen(delegate_id_, isEffectivelyFullscreen); |
394 } | 394 } |
395 | 395 |
396 void WebMediaPlayerImpl::DoLoad(LoadType load_type, | 396 void WebMediaPlayerImpl::DoLoad(LoadType load_type, |
397 const blink::WebURL& url, | 397 const blink::WebURL& url, |
398 CORSMode cors_mode) { | 398 CORSMode cors_mode) { |
399 DVLOG(1) << __func__; | 399 DVLOG(1) << __func__; |
400 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 400 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
401 | 401 |
402 GURL gurl(url); | 402 GURL gurl(url); |
403 ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_); | 403 ReportMetrics(load_type, gurl, frame_->GetSecurityOrigin(), media_log_.get()); |
404 | 404 |
405 // Set subresource URL for crash reporting. | 405 // Set subresource URL for crash reporting. |
406 base::debug::SetCrashKeyValue("subresource_url", gurl.spec()); | 406 base::debug::SetCrashKeyValue("subresource_url", gurl.spec()); |
407 | 407 |
408 if (use_fallback_path_) | 408 if (use_fallback_path_) |
409 fallback_url_ = gurl; | 409 fallback_url_ = gurl; |
410 | 410 |
411 load_type_ = load_type; | 411 load_type_ = load_type; |
412 | 412 |
413 SetNetworkState(WebMediaPlayer::kNetworkStateLoading); | 413 SetNetworkState(WebMediaPlayer::kNetworkStateLoading); |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
662 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) { | 662 const blink::WebVector<blink::WebMediaPlayer::TrackId>& enabledTrackIds) { |
663 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 663 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
664 | 664 |
665 std::ostringstream logstr; | 665 std::ostringstream logstr; |
666 std::vector<MediaTrack::Id> enabledMediaTrackIds; | 666 std::vector<MediaTrack::Id> enabledMediaTrackIds; |
667 for (const auto& blinkTrackId : enabledTrackIds) { | 667 for (const auto& blinkTrackId : enabledTrackIds) { |
668 MediaTrack::Id track_id = blinkTrackId.Utf8().data(); | 668 MediaTrack::Id track_id = blinkTrackId.Utf8().data(); |
669 logstr << track_id << " "; | 669 logstr << track_id << " "; |
670 enabledMediaTrackIds.push_back(track_id); | 670 enabledMediaTrackIds.push_back(track_id); |
671 } | 671 } |
672 MEDIA_LOG(INFO, media_log_) << "Enabled audio tracks: [" << logstr.str() | 672 MEDIA_LOG(INFO, media_log_.get()) |
673 << "]"; | 673 << "Enabled audio tracks: [" << logstr.str() << "]"; |
674 pipeline_controller_.OnEnabledAudioTracksChanged(enabledMediaTrackIds); | 674 pipeline_controller_.OnEnabledAudioTracksChanged(enabledMediaTrackIds); |
675 } | 675 } |
676 | 676 |
677 void WebMediaPlayerImpl::SelectedVideoTrackChanged( | 677 void WebMediaPlayerImpl::SelectedVideoTrackChanged( |
678 blink::WebMediaPlayer::TrackId* selectedTrackId) { | 678 blink::WebMediaPlayer::TrackId* selectedTrackId) { |
679 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 679 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
680 | 680 |
681 base::Optional<MediaTrack::Id> selected_video_track_id; | 681 base::Optional<MediaTrack::Id> selected_video_track_id; |
682 if (selectedTrackId && !video_track_disabled_) | 682 if (selectedTrackId && !video_track_disabled_) |
683 selected_video_track_id = MediaTrack::Id(selectedTrackId->Utf8().data()); | 683 selected_video_track_id = MediaTrack::Id(selectedTrackId->Utf8().data()); |
684 MEDIA_LOG(INFO, media_log_) << "Selected video track: [" | 684 MEDIA_LOG(INFO, media_log_.get()) |
685 << selected_video_track_id.value_or("") << "]"; | 685 << "Selected video track: [" << selected_video_track_id.value_or("") |
| 686 << "]"; |
686 pipeline_controller_.OnSelectedVideoTrackChanged(selected_video_track_id); | 687 pipeline_controller_.OnSelectedVideoTrackChanged(selected_video_track_id); |
687 } | 688 } |
688 | 689 |
689 bool WebMediaPlayerImpl::GetLastUploadedFrameInfo(unsigned* width, | 690 bool WebMediaPlayerImpl::GetLastUploadedFrameInfo(unsigned* width, |
690 unsigned* height, | 691 unsigned* height, |
691 double* timestamp) { | 692 double* timestamp) { |
692 *width = last_uploaded_frame_size_.width(); | 693 *width = last_uploaded_frame_size_.width(); |
693 *height = last_uploaded_frame_size_.height(); | 694 *height = last_uploaded_frame_size_.height(); |
694 *timestamp = last_uploaded_frame_timestamp_.InSecondsF(); | 695 *timestamp = last_uploaded_frame_timestamp_.InSecondsF(); |
695 return true; | 696 return true; |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1179 } | 1180 } |
1180 | 1181 |
1181 void WebMediaPlayerImpl::OnPipelineResumed() { | 1182 void WebMediaPlayerImpl::OnPipelineResumed() { |
1182 is_pipeline_resuming_ = false; | 1183 is_pipeline_resuming_ = false; |
1183 | 1184 |
1184 UpdateBackgroundVideoOptimizationState(); | 1185 UpdateBackgroundVideoOptimizationState(); |
1185 } | 1186 } |
1186 | 1187 |
1187 void WebMediaPlayerImpl::OnDemuxerOpened() { | 1188 void WebMediaPlayerImpl::OnDemuxerOpened() { |
1188 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1189 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1189 client_->MediaSourceOpened( | 1190 client_->MediaSourceOpened(new WebMediaSourceImpl(chunk_demuxer_)); |
1190 new WebMediaSourceImpl(chunk_demuxer_, media_log_)); | |
1191 } | 1191 } |
1192 | 1192 |
1193 void WebMediaPlayerImpl::OnMemoryPressure( | 1193 void WebMediaPlayerImpl::OnMemoryPressure( |
1194 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { | 1194 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { |
1195 DVLOG(2) << __func__ << " memory_pressure_level=" << memory_pressure_level; | 1195 DVLOG(2) << __func__ << " memory_pressure_level=" << memory_pressure_level; |
1196 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1196 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1197 DCHECK(base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)); | 1197 DCHECK(base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)); |
1198 DCHECK(chunk_demuxer_); | 1198 DCHECK(chunk_demuxer_); |
1199 | 1199 |
1200 // The new value of |memory_pressure_level| will take effect on the next | 1200 // The new value of |memory_pressure_level| will take effect on the next |
(...skipping 20 matching lines...) Expand all Loading... |
1221 } | 1221 } |
1222 | 1222 |
1223 void WebMediaPlayerImpl::OnError(PipelineStatus status) { | 1223 void WebMediaPlayerImpl::OnError(PipelineStatus status) { |
1224 DVLOG(1) << __func__; | 1224 DVLOG(1) << __func__; |
1225 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1225 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1226 DCHECK_NE(status, PIPELINE_OK); | 1226 DCHECK_NE(status, PIPELINE_OK); |
1227 | 1227 |
1228 if (suppress_destruction_errors_) | 1228 if (suppress_destruction_errors_) |
1229 return; | 1229 return; |
1230 | 1230 |
1231 ReportPipelineError(load_type_, status, media_log_); | 1231 ReportPipelineError(load_type_, status, media_log_.get()); |
1232 media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status)); | 1232 media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(status)); |
1233 | 1233 |
1234 if (ready_state_ == WebMediaPlayer::kReadyStateHaveNothing) { | 1234 if (ready_state_ == WebMediaPlayer::kReadyStateHaveNothing) { |
1235 // Any error that occurs before reaching ReadyStateHaveMetadata should | 1235 // Any error that occurs before reaching ReadyStateHaveMetadata should |
1236 // be considered a format error. | 1236 // be considered a format error. |
1237 SetNetworkState(WebMediaPlayer::kNetworkStateFormatError); | 1237 SetNetworkState(WebMediaPlayer::kNetworkStateFormatError); |
1238 } else { | 1238 } else { |
1239 SetNetworkState(PipelineErrorToNetworkState(status)); | 1239 SetNetworkState(PipelineErrorToNetworkState(status)); |
1240 } | 1240 } |
1241 | 1241 |
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1748 // Figure out which demuxer to use. | 1748 // Figure out which demuxer to use. |
1749 if (load_type_ != kLoadTypeMediaSource) { | 1749 if (load_type_ != kLoadTypeMediaSource) { |
1750 DCHECK(!chunk_demuxer_); | 1750 DCHECK(!chunk_demuxer_); |
1751 DCHECK(data_source_); | 1751 DCHECK(data_source_); |
1752 | 1752 |
1753 #if !defined(MEDIA_DISABLE_FFMPEG) | 1753 #if !defined(MEDIA_DISABLE_FFMPEG) |
1754 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = | 1754 Demuxer::MediaTracksUpdatedCB media_tracks_updated_cb = |
1755 BindToCurrentLoop(base::Bind( | 1755 BindToCurrentLoop(base::Bind( |
1756 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr())); | 1756 &WebMediaPlayerImpl::OnFFmpegMediaTracksUpdated, AsWeakPtr())); |
1757 | 1757 |
1758 demuxer_.reset(new FFmpegDemuxer(media_task_runner_, data_source_.get(), | 1758 demuxer_.reset(new FFmpegDemuxer( |
1759 encrypted_media_init_data_cb, | 1759 media_task_runner_, data_source_.get(), encrypted_media_init_data_cb, |
1760 media_tracks_updated_cb, media_log_)); | 1760 media_tracks_updated_cb, media_log_.get())); |
1761 #else | 1761 #else |
1762 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); | 1762 OnError(PipelineStatus::DEMUXER_ERROR_COULD_NOT_OPEN); |
1763 return; | 1763 return; |
1764 #endif | 1764 #endif |
1765 } else { | 1765 } else { |
1766 DCHECK(!chunk_demuxer_); | 1766 DCHECK(!chunk_demuxer_); |
1767 DCHECK(!data_source_); | 1767 DCHECK(!data_source_); |
1768 | 1768 |
1769 chunk_demuxer_ = new ChunkDemuxer( | 1769 chunk_demuxer_ = new ChunkDemuxer( |
1770 BindToCurrentLoop( | 1770 BindToCurrentLoop( |
1771 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())), | 1771 base::Bind(&WebMediaPlayerImpl::OnDemuxerOpened, AsWeakPtr())), |
1772 encrypted_media_init_data_cb, media_log_); | 1772 encrypted_media_init_data_cb, media_log_.get()); |
1773 demuxer_.reset(chunk_demuxer_); | 1773 demuxer_.reset(chunk_demuxer_); |
1774 | 1774 |
1775 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) { | 1775 if (base::FeatureList::IsEnabled(kMemoryPressureBasedSourceBufferGC)) { |
1776 // base::Unretained is safe because |this| owns memory_pressure_listener_. | 1776 // base::Unretained is safe because |this| owns memory_pressure_listener_. |
1777 memory_pressure_listener_ = | 1777 memory_pressure_listener_ = |
1778 base::MakeUnique<base::MemoryPressureListener>(base::Bind( | 1778 base::MakeUnique<base::MemoryPressureListener>(base::Bind( |
1779 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); | 1779 &WebMediaPlayerImpl::OnMemoryPressure, base::Unretained(this))); |
1780 } | 1780 } |
1781 } | 1781 } |
1782 | 1782 |
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2161 // Idle timeout chosen arbitrarily. | 2161 // Idle timeout chosen arbitrarily. |
2162 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5), | 2162 background_pause_timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(5), |
2163 this, &WebMediaPlayerImpl::OnPause); | 2163 this, &WebMediaPlayerImpl::OnPause); |
2164 } | 2164 } |
2165 | 2165 |
2166 void WebMediaPlayerImpl::CreateWatchTimeReporter() { | 2166 void WebMediaPlayerImpl::CreateWatchTimeReporter() { |
2167 // Create the watch time reporter and synchronize its initial state. | 2167 // Create the watch time reporter and synchronize its initial state. |
2168 watch_time_reporter_.reset( | 2168 watch_time_reporter_.reset( |
2169 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_, | 2169 new WatchTimeReporter(HasAudio(), HasVideo(), !!chunk_demuxer_, |
2170 is_encrypted_, embedded_media_experience_enabled_, | 2170 is_encrypted_, embedded_media_experience_enabled_, |
2171 media_log_, pipeline_metadata_.natural_size, | 2171 media_log_.get(), pipeline_metadata_.natural_size, |
2172 base::Bind(&GetCurrentTimeInternal, this))); | 2172 base::Bind(&GetCurrentTimeInternal, this))); |
2173 watch_time_reporter_->OnVolumeChange(volume_); | 2173 watch_time_reporter_->OnVolumeChange(volume_); |
2174 if (delegate_->IsFrameHidden()) | 2174 if (delegate_->IsFrameHidden()) |
2175 watch_time_reporter_->OnHidden(); | 2175 watch_time_reporter_->OnHidden(); |
2176 else | 2176 else |
2177 watch_time_reporter_->OnShown(); | 2177 watch_time_reporter_->OnShown(); |
2178 } | 2178 } |
2179 | 2179 |
2180 bool WebMediaPlayerImpl::IsHidden() const { | 2180 bool WebMediaPlayerImpl::IsHidden() const { |
2181 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 2181 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2395 | 2395 |
2396 if (is_encrypted_) | 2396 if (is_encrypted_) |
2397 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.EME", height); | 2397 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.EME", height); |
2398 | 2398 |
2399 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.All", height); | 2399 UMA_HISTOGRAM_VIDEO_HEIGHT("Media.VideoHeight.Initial.All", height); |
2400 } | 2400 } |
2401 | 2401 |
2402 #undef UMA_HISTOGRAM_VIDEO_HEIGHT | 2402 #undef UMA_HISTOGRAM_VIDEO_HEIGHT |
2403 | 2403 |
2404 } // namespace media | 2404 } // namespace media |
OLD | NEW |