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 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
168 UrlData::CORS_UNSPECIFIED); | 168 UrlData::CORS_UNSPECIFIED); |
169 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeAnonymous, UrlData::CORS_ANONYMOUS); | 169 STATIC_ASSERT_ENUM(WebMediaPlayer::kCORSModeAnonymous, UrlData::CORS_ANONYMOUS); |
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<RendererFactorySelector> renderer_factory_selector, |
179 linked_ptr<UrlIndex> url_index, | 179 linked_ptr<UrlIndex> url_index, |
180 const WebMediaPlayerParams& params) | 180 const 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()), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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_selector_(std::move(renderer_factory_selector)), |
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_selector_); |
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); |
(...skipping 1459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1722 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1722 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1723 | 1723 |
1724 if (force_video_overlays_) | 1724 if (force_video_overlays_) |
1725 EnableOverlay(); | 1725 EnableOverlay(); |
1726 | 1726 |
1727 RequestSurfaceCB request_surface_cb; | 1727 RequestSurfaceCB request_surface_cb; |
1728 #if defined(OS_ANDROID) | 1728 #if defined(OS_ANDROID) |
1729 request_surface_cb = BindToCurrentLoop( | 1729 request_surface_cb = BindToCurrentLoop( |
1730 base::Bind(&WebMediaPlayerImpl::OnSurfaceRequested, AsWeakPtr())); | 1730 base::Bind(&WebMediaPlayerImpl::OnSurfaceRequested, AsWeakPtr())); |
1731 #endif | 1731 #endif |
1732 return renderer_factory_->CreateRenderer( | 1732 return renderer_factory_selector_->GetCurrentFactory()->CreateRenderer( |
1733 media_task_runner_, worker_task_runner_, audio_source_provider_.get(), | 1733 media_task_runner_, worker_task_runner_, audio_source_provider_.get(), |
1734 compositor_, request_surface_cb); | 1734 compositor_, request_surface_cb); |
1735 } | 1735 } |
1736 | 1736 |
1737 void WebMediaPlayerImpl::StartPipeline() { | 1737 void WebMediaPlayerImpl::StartPipeline() { |
1738 DCHECK(main_task_runner_->BelongsToCurrentThread()); | 1738 DCHECK(main_task_runner_->BelongsToCurrentThread()); |
1739 | 1739 |
1740 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = | 1740 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb = |
1741 BindToCurrentLoop(base::Bind( | 1741 BindToCurrentLoop(base::Bind( |
1742 &WebMediaPlayerImpl::OnEncryptedMediaInitData, AsWeakPtr())); | 1742 &WebMediaPlayerImpl::OnEncryptedMediaInitData, AsWeakPtr())); |
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2359 | 2359 |
2360 void WebMediaPlayerImpl::RecordUnderflowDuration(base::TimeDelta duration) { | 2360 void WebMediaPlayerImpl::RecordUnderflowDuration(base::TimeDelta duration) { |
2361 DCHECK(data_source_ || chunk_demuxer_); | 2361 DCHECK(data_source_ || chunk_demuxer_); |
2362 if (data_source_) | 2362 if (data_source_) |
2363 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration", duration); | 2363 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration", duration); |
2364 else | 2364 else |
2365 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration.MSE", duration); | 2365 UMA_HISTOGRAM_TIMES("Media.UnderflowDuration.MSE", duration); |
2366 } | 2366 } |
2367 | 2367 |
2368 } // namespace media | 2368 } // namespace media |
OLD | NEW |