Chromium Code Reviews| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 160 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ | 160 (DCHECK(main_task_runner_->BelongsToCurrentThread()), \ |
| 161 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) | 161 BindToCurrentLoop(base::Bind(function, AsWeakPtr(), arg1))) |
| 162 | 162 |
| 163 WebMediaPlayerImpl::WebMediaPlayerImpl( | 163 WebMediaPlayerImpl::WebMediaPlayerImpl( |
| 164 blink::WebLocalFrame* frame, | 164 blink::WebLocalFrame* frame, |
| 165 blink::WebMediaPlayerClient* client, | 165 blink::WebMediaPlayerClient* client, |
| 166 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, | 166 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, |
| 167 base::WeakPtr<WebMediaPlayerDelegate> delegate, | 167 base::WeakPtr<WebMediaPlayerDelegate> delegate, |
| 168 std::unique_ptr<RendererFactory> renderer_factory, | 168 std::unique_ptr<RendererFactory> renderer_factory, |
| 169 linked_ptr<UrlIndex> url_index, | 169 linked_ptr<UrlIndex> url_index, |
| 170 MediaPlayerObserver* observer, | |
| 170 const WebMediaPlayerParams& params) | 171 const WebMediaPlayerParams& params) |
| 171 : frame_(frame), | 172 : frame_(frame), |
| 172 delegate_state_(DelegateState::GONE), | 173 delegate_state_(DelegateState::GONE), |
| 173 is_idle_(false), | 174 is_idle_(false), |
| 174 must_suspend_(false), | 175 must_suspend_(false), |
| 175 network_state_(WebMediaPlayer::NetworkStateEmpty), | 176 network_state_(WebMediaPlayer::NetworkStateEmpty), |
| 176 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 177 ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 177 highest_ready_state_(WebMediaPlayer::ReadyStateHaveNothing), | 178 highest_ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
| 178 preload_(MultibufferDataSource::AUTO), | 179 preload_(MultibufferDataSource::AUTO), |
| 179 buffering_strategy_(MultibufferDataSource::BUFFERING_STRATEGY_NORMAL), | 180 buffering_strategy_(MultibufferDataSource::BUFFERING_STRATEGY_NORMAL), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 220 cast_impl_(this, client_, params.context_3d_cb()), | 221 cast_impl_(this, client_, params.context_3d_cb()), |
| 221 #endif | 222 #endif |
| 222 volume_(1.0), | 223 volume_(1.0), |
| 223 volume_multiplier_(1.0), | 224 volume_multiplier_(1.0), |
| 224 renderer_factory_(std::move(renderer_factory)), | 225 renderer_factory_(std::move(renderer_factory)), |
| 225 surface_manager_(params.surface_manager()), | 226 surface_manager_(params.surface_manager()), |
| 226 overlay_surface_id_(SurfaceManager::kNoSurfaceID), | 227 overlay_surface_id_(SurfaceManager::kNoSurfaceID), |
| 227 suppress_destruction_errors_(false), | 228 suppress_destruction_errors_(false), |
| 228 can_suspend_state_(CanSuspendState::UNKNOWN), | 229 can_suspend_state_(CanSuspendState::UNKNOWN), |
| 229 is_encrypted_(false), | 230 is_encrypted_(false), |
| 230 underflow_count_(0) { | 231 underflow_count_(0), |
| 232 observer_(observer) { | |
| 231 DCHECK(!adjust_allocated_memory_cb_.is_null()); | 233 DCHECK(!adjust_allocated_memory_cb_.is_null()); |
| 232 DCHECK(renderer_factory_); | 234 DCHECK(renderer_factory_); |
| 233 DCHECK(client_); | 235 DCHECK(client_); |
| 234 | 236 |
| 235 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( | 237 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 236 switches::kForceVideoOverlays); | 238 switches::kForceVideoOverlays); |
| 237 | 239 |
| 238 disable_fullscreen_video_overlays_ = | 240 disable_fullscreen_video_overlays_ = |
| 239 !base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo); | 241 !base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo); |
| 240 | 242 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 251 } | 253 } |
| 252 | 254 |
| 253 // TODO(xhwang): When we use an external Renderer, many methods won't work, | 255 // TODO(xhwang): When we use an external Renderer, many methods won't work, |
| 254 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 | 256 // e.g. GetCurrentFrameFromCompositor(). See http://crbug.com/434861 |
| 255 | 257 |
| 256 // Use the null sink if no sink was provided. | 258 // Use the null sink if no sink was provided. |
| 257 audio_source_provider_ = new WebAudioSourceProviderImpl( | 259 audio_source_provider_ = new WebAudioSourceProviderImpl( |
| 258 params.audio_renderer_sink().get() | 260 params.audio_renderer_sink().get() |
| 259 ? params.audio_renderer_sink() | 261 ? params.audio_renderer_sink() |
| 260 : new NullAudioSink(media_task_runner_)); | 262 : new NullAudioSink(media_task_runner_)); |
| 263 | |
| 264 if (observer_) | |
| 265 observer_->SetSwitchRenderCallback( | |
| 266 base::Bind(&WebMediaPlayerImpl::ScheduleRestart, AsWeakPtr())); | |
| 261 } | 267 } |
| 262 | 268 |
| 263 WebMediaPlayerImpl::~WebMediaPlayerImpl() { | 269 WebMediaPlayerImpl::~WebMediaPlayerImpl() { |
| 264 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 270 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 265 | 271 |
| 266 suppress_destruction_errors_ = true; | 272 suppress_destruction_errors_ = true; |
| 267 if (delegate_) { | 273 if (delegate_) { |
| 268 delegate_->PlayerGone(delegate_id_); | 274 delegate_->PlayerGone(delegate_id_); |
| 269 delegate_->RemoveObserver(delegate_id_); | 275 delegate_->RemoveObserver(delegate_id_); |
| 270 } | 276 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 surface_created_cb_.Cancel(); | 336 surface_created_cb_.Cancel(); |
| 331 overlay_surface_id_ = SurfaceManager::kNoSurfaceID; | 337 overlay_surface_id_ = SurfaceManager::kNoSurfaceID; |
| 332 | 338 |
| 333 if (decoder_requires_restart_for_overlay_) | 339 if (decoder_requires_restart_for_overlay_) |
| 334 ScheduleRestart(); | 340 ScheduleRestart(); |
| 335 } | 341 } |
| 336 | 342 |
| 337 void WebMediaPlayerImpl::enteredFullscreen() { | 343 void WebMediaPlayerImpl::enteredFullscreen() { |
| 338 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) | 344 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) |
| 339 EnableOverlay(); | 345 EnableOverlay(); |
| 346 if (observer_) | |
| 347 observer_->OnEnteredFullscreen(); | |
| 340 } | 348 } |
| 341 | 349 |
| 342 void WebMediaPlayerImpl::exitedFullscreen() { | 350 void WebMediaPlayerImpl::exitedFullscreen() { |
| 343 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) | 351 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) |
| 344 DisableOverlay(); | 352 DisableOverlay(); |
| 353 if (observer_) | |
| 354 observer_->OnExitedFullscreen(); | |
| 345 } | 355 } |
| 346 | 356 |
| 347 void WebMediaPlayerImpl::DoLoad(LoadType load_type, | 357 void WebMediaPlayerImpl::DoLoad(LoadType load_type, |
| 348 const blink::WebURL& url, | 358 const blink::WebURL& url, |
| 349 CORSMode cors_mode) { | 359 CORSMode cors_mode) { |
| 350 DVLOG(1) << __func__; | 360 DVLOG(1) << __func__; |
| 351 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 361 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 352 | 362 |
| 353 GURL gurl(url); | 363 GURL gurl(url); |
| 354 ReportMetrics(load_type, gurl, frame_->getSecurityOrigin()); | 364 ReportMetrics(load_type, gurl, frame_->getSecurityOrigin()); |
| (...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 946 } | 956 } |
| 947 } | 957 } |
| 948 | 958 |
| 949 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, | 959 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, |
| 950 CdmContext* cdm_context) { | 960 CdmContext* cdm_context) { |
| 951 if (!cdm_context) { | 961 if (!cdm_context) { |
| 952 cdm_attached_cb.Run(false); | 962 cdm_attached_cb.Run(false); |
| 953 return; | 963 return; |
| 954 } | 964 } |
| 955 | 965 |
| 966 if (observer_) | |
| 967 observer_->OnSetCdm(cdm_context); | |
| 968 | |
| 956 // If CDM initialization succeeded, tell the pipeline about it. | 969 // If CDM initialization succeeded, tell the pipeline about it. |
| 957 pipeline_.SetCdm(cdm_context, cdm_attached_cb); | 970 pipeline_.SetCdm(cdm_context, cdm_attached_cb); |
| 958 } | 971 } |
| 959 | 972 |
| 960 void WebMediaPlayerImpl::OnCdmAttached(bool success) { | 973 void WebMediaPlayerImpl::OnCdmAttached(bool success) { |
| 961 if (success) { | 974 if (success) { |
| 962 set_cdm_result_->complete(); | 975 set_cdm_result_->complete(); |
| 963 set_cdm_result_.reset(); | 976 set_cdm_result_.reset(); |
| 964 is_cdm_attached_ = true; | 977 is_cdm_attached_ = true; |
| 965 return; | 978 return; |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1082 | 1095 |
| 1083 if (overlay_enabled_ && surface_manager_) | 1096 if (overlay_enabled_ && surface_manager_) |
| 1084 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); | 1097 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); |
| 1085 | 1098 |
| 1086 DCHECK(!video_weblayer_); | 1099 DCHECK(!video_weblayer_); |
| 1087 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( | 1100 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( |
| 1088 compositor_, pipeline_metadata_.video_rotation))); | 1101 compositor_, pipeline_metadata_.video_rotation))); |
| 1089 video_weblayer_->layer()->SetContentsOpaque(opaque_); | 1102 video_weblayer_->layer()->SetContentsOpaque(opaque_); |
| 1090 video_weblayer_->SetContentsOpaqueIsFixed(true); | 1103 video_weblayer_->SetContentsOpaqueIsFixed(true); |
| 1091 client_->setWebLayer(video_weblayer_.get()); | 1104 client_->setWebLayer(video_weblayer_.get()); |
| 1105 if (observer_) | |
|
miu
2016/09/30 08:12:10
style: Multi-line then-clause needs braces around
xjz
2016/10/01 00:28:41
Done.
| |
| 1106 observer_->OnDecoderConfigChanged( | |
| 1107 pipeline_metadata_.audio_decoder_config, | |
| 1108 pipeline_metadata_.video_decoder_config); | |
| 1092 } | 1109 } |
| 1093 | 1110 |
| 1094 CreateWatchTimeReporter(); | 1111 CreateWatchTimeReporter(); |
| 1095 UpdatePlayState(); | 1112 UpdatePlayState(); |
| 1096 } | 1113 } |
| 1097 | 1114 |
| 1098 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { | 1115 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { |
| 1099 DVLOG(1) << __func__ << "(" << state << ")"; | 1116 DVLOG(1) << __func__ << "(" << state << ")"; |
| 1100 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1117 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
| 1101 | 1118 |
| (...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1814 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_, | 1831 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_, |
| 1815 pipeline_metadata_.natural_size, | 1832 pipeline_metadata_.natural_size, |
| 1816 base::Bind(&GetCurrentTimeInternal, this))); | 1833 base::Bind(&GetCurrentTimeInternal, this))); |
| 1817 watch_time_reporter_->OnVolumeChange(volume_); | 1834 watch_time_reporter_->OnVolumeChange(volume_); |
| 1818 if (delegate_ && delegate_->IsHidden()) | 1835 if (delegate_ && delegate_->IsHidden()) |
| 1819 watch_time_reporter_->OnHidden(); | 1836 watch_time_reporter_->OnHidden(); |
| 1820 else | 1837 else |
| 1821 watch_time_reporter_->OnShown(); | 1838 watch_time_reporter_->OnShown(); |
| 1822 } | 1839 } |
| 1823 | 1840 |
| 1841 void WebMediaPlayerImpl::ancestorEnteredFullscreen() { | |
| 1842 if (observer_) | |
| 1843 observer_->OnEnteredFullscreen(); | |
| 1844 } | |
| 1845 | |
| 1846 void WebMediaPlayerImpl::ancestorExitedFullscreen() { | |
| 1847 if (observer_) | |
| 1848 observer_->OnExitedFullscreen(); | |
| 1849 } | |
| 1850 | |
| 1824 } // namespace media | 1851 } // namespace media |
| OLD | NEW |