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 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 std::unique_ptr<RendererFactory> renderer_factory, | 167 std::unique_ptr<RendererFactory> renderer_factory, |
168 linked_ptr<UrlIndex> url_index, | 168 linked_ptr<UrlIndex> url_index, |
169 const WebMediaPlayerParams& params) | 169 const WebMediaPlayerParams& params) |
170 : frame_(frame), | 170 : frame_(frame), |
171 delegate_state_(DelegateState::GONE), | 171 delegate_state_(DelegateState::GONE), |
172 is_idle_(false), | 172 is_idle_(false), |
173 must_suspend_(false), | 173 must_suspend_(false), |
174 network_state_(WebMediaPlayer::NetworkStateEmpty), | 174 network_state_(WebMediaPlayer::NetworkStateEmpty), |
175 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 175 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
176 highest_ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 176 highest_ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
177 preload_(BufferedDataSource::AUTO), | 177 preload_(MultibufferDataSource::AUTO), |
178 buffering_strategy_( | 178 buffering_strategy_(MultibufferDataSource::BUFFERING_STRATEGY_NORMAL), |
179 BufferedDataSourceInterface::BUFFERING_STRATEGY_NORMAL), | |
180 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 179 main_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
181 media_task_runner_(params.media_task_runner()), | 180 media_task_runner_(params.media_task_runner()), |
182 worker_task_runner_(params.worker_task_runner()), | 181 worker_task_runner_(params.worker_task_runner()), |
183 media_log_(params.media_log()), | 182 media_log_(params.media_log()), |
184 pipeline_(media_task_runner_, media_log_.get()), | 183 pipeline_(media_task_runner_, media_log_.get()), |
185 pipeline_controller_( | 184 pipeline_controller_( |
186 &pipeline_, | 185 &pipeline_, |
187 base::Bind(&WebMediaPlayerImpl::CreateRenderer, | 186 base::Bind(&WebMediaPlayerImpl::CreateRenderer, |
188 base::Unretained(this)), | 187 base::Unretained(this)), |
189 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), | 188 base::Bind(&WebMediaPlayerImpl::OnPipelineSeeked, AsWeakPtr()), |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 | 355 |
357 SetNetworkState(WebMediaPlayer::NetworkStateLoading); | 356 SetNetworkState(WebMediaPlayer::NetworkStateLoading); |
358 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); | 357 SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
359 media_log_->AddEvent(media_log_->CreateLoadEvent(url.string().utf8())); | 358 media_log_->AddEvent(media_log_->CreateLoadEvent(url.string().utf8())); |
360 | 359 |
361 // Media source pipelines can start immediately. | 360 // Media source pipelines can start immediately. |
362 if (load_type == LoadTypeMediaSource) { | 361 if (load_type == LoadTypeMediaSource) { |
363 supports_save_ = false; | 362 supports_save_ = false; |
364 StartPipeline(); | 363 StartPipeline(); |
365 } else { | 364 } else { |
366 // TODO(hubbe): This experiment is temporary and should be removed once | 365 data_source_.reset(new MultibufferDataSource( |
367 // we have enough data to support the primacy of the new media cache. | 366 url, static_cast<UrlData::CORSMode>(cors_mode), main_task_runner_, |
368 // See http://crbug.com/514719 for details. | 367 url_index_, frame_, media_log_.get(), &buffered_data_source_host_, |
369 // Otherwise it's a regular request which requires resolving the URL first. | 368 base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); |
370 if (base::FeatureList::IsEnabled(kUseNewMediaCache)) { | |
371 // Remove this when MultiBufferDataSource becomes default. | |
372 LOG(WARNING) << "Using MultibufferDataSource"; | |
373 data_source_.reset(new MultibufferDataSource( | |
374 url, static_cast<UrlData::CORSMode>(cors_mode), main_task_runner_, | |
375 url_index_, frame_, media_log_.get(), &buffered_data_source_host_, | |
376 base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); | |
377 } else { | |
378 data_source_.reset(new BufferedDataSource( | |
379 url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), | |
380 main_task_runner_, frame_, media_log_.get(), | |
381 &buffered_data_source_host_, | |
382 base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); | |
383 } | |
384 data_source_->SetPreload(preload_); | 369 data_source_->SetPreload(preload_); |
385 data_source_->SetBufferingStrategy(buffering_strategy_); | 370 data_source_->SetBufferingStrategy(buffering_strategy_); |
386 data_source_->Initialize( | 371 data_source_->Initialize( |
387 base::Bind(&WebMediaPlayerImpl::DataSourceInitialized, AsWeakPtr())); | 372 base::Bind(&WebMediaPlayerImpl::DataSourceInitialized, AsWeakPtr())); |
388 } | 373 } |
389 | 374 |
390 #if defined(OS_ANDROID) // WMPI_CAST | 375 #if defined(OS_ANDROID) // WMPI_CAST |
391 cast_impl_.Initialize(url, frame_, delegate_id_); | 376 cast_impl_.Initialize(url, frame_, delegate_id_); |
392 #endif | 377 #endif |
393 } | 378 } |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 | 541 |
557 media::OutputDeviceStatusCB callback = | 542 media::OutputDeviceStatusCB callback = |
558 media::ConvertToOutputDeviceStatusCB(web_callback); | 543 media::ConvertToOutputDeviceStatusCB(web_callback); |
559 media_task_runner_->PostTask( | 544 media_task_runner_->PostTask( |
560 FROM_HERE, | 545 FROM_HERE, |
561 base::Bind(&SetSinkIdOnMediaThread, audio_source_provider_, | 546 base::Bind(&SetSinkIdOnMediaThread, audio_source_provider_, |
562 sink_id.utf8(), static_cast<url::Origin>(security_origin), | 547 sink_id.utf8(), static_cast<url::Origin>(security_origin), |
563 callback)); | 548 callback)); |
564 } | 549 } |
565 | 550 |
566 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadNone, BufferedDataSource::NONE); | 551 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadNone, MultibufferDataSource::NONE); |
567 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadMetaData, | 552 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadMetaData, |
568 BufferedDataSource::METADATA); | 553 MultibufferDataSource::METADATA); |
569 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadAuto, BufferedDataSource::AUTO); | 554 STATIC_ASSERT_ENUM(WebMediaPlayer::PreloadAuto, MultibufferDataSource::AUTO); |
570 | 555 |
571 void WebMediaPlayerImpl::setPreload(WebMediaPlayer::Preload preload) { | 556 void WebMediaPlayerImpl::setPreload(WebMediaPlayer::Preload preload) { |
572 DVLOG(1) << __func__ << "(" << preload << ")"; | 557 DVLOG(1) << __func__ << "(" << preload << ")"; |
573 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 558 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
574 | 559 |
575 preload_ = static_cast<BufferedDataSource::Preload>(preload); | 560 preload_ = static_cast<MultibufferDataSource::Preload>(preload); |
576 if (data_source_) | 561 if (data_source_) |
577 data_source_->SetPreload(preload_); | 562 data_source_->SetPreload(preload_); |
578 } | 563 } |
579 | 564 |
580 STATIC_ASSERT_ENUM(WebMediaPlayer::BufferingStrategy::Normal, | 565 STATIC_ASSERT_ENUM(WebMediaPlayer::BufferingStrategy::Normal, |
581 BufferedDataSource::BUFFERING_STRATEGY_NORMAL); | 566 MultibufferDataSource::BUFFERING_STRATEGY_NORMAL); |
582 STATIC_ASSERT_ENUM(WebMediaPlayer::BufferingStrategy::Aggressive, | 567 STATIC_ASSERT_ENUM(WebMediaPlayer::BufferingStrategy::Aggressive, |
583 BufferedDataSource::BUFFERING_STRATEGY_AGGRESSIVE); | 568 MultibufferDataSource::BUFFERING_STRATEGY_AGGRESSIVE); |
584 | 569 |
585 void WebMediaPlayerImpl::setBufferingStrategy( | 570 void WebMediaPlayerImpl::setBufferingStrategy( |
586 WebMediaPlayer::BufferingStrategy buffering_strategy) { | 571 WebMediaPlayer::BufferingStrategy buffering_strategy) { |
587 DVLOG(1) << __func__; | 572 DVLOG(1) << __func__; |
588 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 573 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
589 | 574 |
590 #if defined(OS_ANDROID) | 575 #if defined(OS_ANDROID) |
591 // We disallow aggressive buffering on Android since it matches the behavior | 576 // We disallow aggressive buffering on Android since it matches the behavior |
592 // of the platform media player and may have data usage penalties. | 577 // of the platform media player and may have data usage penalties. |
593 // TODO(dalecurtis, hubbe): We should probably stop using "pause-and-buffer" | 578 // TODO(dalecurtis, hubbe): We should probably stop using "pause-and-buffer" |
594 // everywhere. See http://crbug.com/594669 for more details. | 579 // everywhere. See http://crbug.com/594669 for more details. |
595 buffering_strategy_ = BufferedDataSource::BUFFERING_STRATEGY_NORMAL; | 580 buffering_strategy_ = MultibufferDataSource::BUFFERING_STRATEGY_NORMAL; |
596 #else | 581 #else |
597 buffering_strategy_ = | 582 buffering_strategy_ = |
598 static_cast<BufferedDataSource::BufferingStrategy>(buffering_strategy); | 583 static_cast<MultibufferDataSource::BufferingStrategy>(buffering_strategy); |
599 #endif | 584 #endif |
600 | 585 |
601 if (data_source_) | 586 if (data_source_) |
602 data_source_->SetBufferingStrategy(buffering_strategy_); | 587 data_source_->SetBufferingStrategy(buffering_strategy_); |
603 } | 588 } |
604 | 589 |
605 bool WebMediaPlayerImpl::hasVideo() const { | 590 bool WebMediaPlayerImpl::hasVideo() const { |
606 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 591 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
607 | 592 |
608 return pipeline_metadata_.has_video; | 593 return pipeline_metadata_.has_video; |
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 if (isRemote()) { | 978 if (isRemote()) { |
994 scoped_refptr<VideoFrame> frame = cast_impl_.GetCastingBanner(); | 979 scoped_refptr<VideoFrame> frame = cast_impl_.GetCastingBanner(); |
995 if (frame) | 980 if (frame) |
996 compositor_->PaintSingleFrame(frame); | 981 compositor_->PaintSingleFrame(frame); |
997 } | 982 } |
998 #endif | 983 #endif |
999 | 984 |
1000 // If we're not in an aggressive buffering state, tell the data source we have | 985 // If we're not in an aggressive buffering state, tell the data source we have |
1001 // enough data so that it may release the connection. | 986 // enough data so that it may release the connection. |
1002 if (buffering_strategy_ != | 987 if (buffering_strategy_ != |
1003 BufferedDataSource::BUFFERING_STRATEGY_AGGRESSIVE) { | 988 MultibufferDataSource::BUFFERING_STRATEGY_AGGRESSIVE) { |
1004 if (data_source_) | 989 if (data_source_) |
1005 data_source_->OnBufferingHaveEnough(true); | 990 data_source_->OnBufferingHaveEnough(true); |
1006 } | 991 } |
1007 | 992 |
1008 ReportMemoryUsage(); | 993 ReportMemoryUsage(); |
1009 | 994 |
1010 if (pending_suspend_resume_cycle_) { | 995 if (pending_suspend_resume_cycle_) { |
1011 pending_suspend_resume_cycle_ = false; | 996 pending_suspend_resume_cycle_ = false; |
1012 UpdatePlayState(); | 997 UpdatePlayState(); |
1013 } | 998 } |
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1805 pipeline_metadata_.natural_size, | 1790 pipeline_metadata_.natural_size, |
1806 base::Bind(&GetCurrentTimeInternal, this))); | 1791 base::Bind(&GetCurrentTimeInternal, this))); |
1807 watch_time_reporter_->OnVolumeChange(volume_); | 1792 watch_time_reporter_->OnVolumeChange(volume_); |
1808 if (delegate_ && delegate_->IsHidden()) | 1793 if (delegate_ && delegate_->IsHidden()) |
1809 watch_time_reporter_->OnHidden(); | 1794 watch_time_reporter_->OnHidden(); |
1810 else | 1795 else |
1811 watch_time_reporter_->OnShown(); | 1796 watch_time_reporter_->OnShown(); |
1812 } | 1797 } |
1813 | 1798 |
1814 } // namespace media | 1799 } // namespace media |
OLD | NEW |