Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Side by Side Diff: media/blink/webmediaplayer_impl.cc

Issue 2204673004: WIP - WebMediaPlayer switch media renderer. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Get Audio/Video config from PipelineMetadata. And rebase. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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 RendererController* renderer_controller,
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
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 renderer_controller_(renderer_controller) {
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
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 (renderer_controller_)
265 renderer_controller_->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
272 renderer_controller_ = nullptr;
miu 2016/09/28 01:33:31 Along the lines of other comments: Call controller
xjz 2016/09/29 22:54:21 Removed this line.
273
266 suppress_destruction_errors_ = true; 274 suppress_destruction_errors_ = true;
267 if (delegate_) { 275 if (delegate_) {
268 delegate_->PlayerGone(delegate_id_); 276 delegate_->PlayerGone(delegate_id_);
269 delegate_->RemoveObserver(delegate_id_); 277 delegate_->RemoveObserver(delegate_id_);
270 } 278 }
271 279
272 // Finalize any watch time metrics before destroying the pipeline. 280 // Finalize any watch time metrics before destroying the pipeline.
273 watch_time_reporter_.reset(); 281 watch_time_reporter_.reset();
274 282
275 // Pipeline must be stopped before it is destroyed. 283 // Pipeline must be stopped before it is destroyed.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 surface_created_cb_.Cancel(); 338 surface_created_cb_.Cancel();
331 overlay_surface_id_ = SurfaceManager::kNoSurfaceID; 339 overlay_surface_id_ = SurfaceManager::kNoSurfaceID;
332 340
333 if (decoder_requires_restart_for_overlay_) 341 if (decoder_requires_restart_for_overlay_)
334 ScheduleRestart(); 342 ScheduleRestart();
335 } 343 }
336 344
337 void WebMediaPlayerImpl::enteredFullscreen() { 345 void WebMediaPlayerImpl::enteredFullscreen() {
338 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) 346 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_)
339 EnableOverlay(); 347 EnableOverlay();
348 if (renderer_controller_)
349 renderer_controller_->OnEnteredFullscreen();
340 } 350 }
341 351
342 void WebMediaPlayerImpl::exitedFullscreen() { 352 void WebMediaPlayerImpl::exitedFullscreen() {
343 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_) 353 if (!force_video_overlays_ && !disable_fullscreen_video_overlays_)
344 DisableOverlay(); 354 DisableOverlay();
355 if (renderer_controller_)
356 renderer_controller_->OnExitedFullscreen();
345 } 357 }
346 358
347 void WebMediaPlayerImpl::DoLoad(LoadType load_type, 359 void WebMediaPlayerImpl::DoLoad(LoadType load_type,
348 const blink::WebURL& url, 360 const blink::WebURL& url,
349 CORSMode cors_mode) { 361 CORSMode cors_mode) {
350 DVLOG(1) << __func__; 362 DVLOG(1) << __func__;
351 DCHECK(main_task_runner_->BelongsToCurrentThread()); 363 DCHECK(main_task_runner_->BelongsToCurrentThread());
352 364
353 GURL gurl(url); 365 GURL gurl(url);
354 ReportMetrics(load_type, gurl, frame_->getSecurityOrigin()); 366 ReportMetrics(load_type, gurl, frame_->getSecurityOrigin());
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
946 } 958 }
947 } 959 }
948 960
949 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb, 961 void WebMediaPlayerImpl::SetCdm(const CdmAttachedCB& cdm_attached_cb,
950 CdmContext* cdm_context) { 962 CdmContext* cdm_context) {
951 if (!cdm_context) { 963 if (!cdm_context) {
952 cdm_attached_cb.Run(false); 964 cdm_attached_cb.Run(false);
953 return; 965 return;
954 } 966 }
955 967
968 if (renderer_controller_)
969 renderer_controller_->OnSetCdm(cdm_context);
970
956 // If CDM initialization succeeded, tell the pipeline about it. 971 // If CDM initialization succeeded, tell the pipeline about it.
957 pipeline_.SetCdm(cdm_context, cdm_attached_cb); 972 pipeline_.SetCdm(cdm_context, cdm_attached_cb);
958 } 973 }
959 974
960 void WebMediaPlayerImpl::OnCdmAttached(bool success) { 975 void WebMediaPlayerImpl::OnCdmAttached(bool success) {
961 if (success) { 976 if (success) {
962 set_cdm_result_->complete(); 977 set_cdm_result_->complete();
963 set_cdm_result_.reset(); 978 set_cdm_result_.reset();
964 is_cdm_attached_ = true; 979 is_cdm_attached_ = true;
965 return; 980 return;
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 1097
1083 if (overlay_enabled_ && surface_manager_) 1098 if (overlay_enabled_ && surface_manager_)
1084 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); 1099 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size);
1085 1100
1086 DCHECK(!video_weblayer_); 1101 DCHECK(!video_weblayer_);
1087 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( 1102 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create(
1088 compositor_, pipeline_metadata_.video_rotation))); 1103 compositor_, pipeline_metadata_.video_rotation)));
1089 video_weblayer_->layer()->SetContentsOpaque(opaque_); 1104 video_weblayer_->layer()->SetContentsOpaque(opaque_);
1090 video_weblayer_->SetContentsOpaqueIsFixed(true); 1105 video_weblayer_->SetContentsOpaqueIsFixed(true);
1091 client_->setWebLayer(video_weblayer_.get()); 1106 client_->setWebLayer(video_weblayer_.get());
1107 if (renderer_controller_)
1108 renderer_controller_->OnSetDecoderConfig(
miu 2016/09/28 01:33:31 naming nit: If this could be called multiple times
xjz 2016/09/29 22:54:21 Done.
1109 pipeline_metadata_.audio_decoder_config,
1110 pipeline_metadata_.video_decoder_config);
1092 } 1111 }
1093 1112
1094 CreateWatchTimeReporter(); 1113 CreateWatchTimeReporter();
1095 UpdatePlayState(); 1114 UpdatePlayState();
1096 } 1115 }
1097 1116
1098 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) { 1117 void WebMediaPlayerImpl::OnBufferingStateChange(BufferingState state) {
1099 DVLOG(1) << __func__ << "(" << state << ")"; 1118 DVLOG(1) << __func__ << "(" << state << ")";
1100 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1119 DCHECK(main_task_runner_->BelongsToCurrentThread());
1101 1120
(...skipping 712 matching lines...) Expand 10 before | Expand all | Expand 10 after
1814 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_, 1833 hasAudio(), hasVideo(), !!chunk_demuxer_, is_encrypted_, media_log_,
1815 pipeline_metadata_.natural_size, 1834 pipeline_metadata_.natural_size,
1816 base::Bind(&GetCurrentTimeInternal, this))); 1835 base::Bind(&GetCurrentTimeInternal, this)));
1817 watch_time_reporter_->OnVolumeChange(volume_); 1836 watch_time_reporter_->OnVolumeChange(volume_);
1818 if (delegate_ && delegate_->IsHidden()) 1837 if (delegate_ && delegate_->IsHidden())
1819 watch_time_reporter_->OnHidden(); 1838 watch_time_reporter_->OnHidden();
1820 else 1839 else
1821 watch_time_reporter_->OnShown(); 1840 watch_time_reporter_->OnShown();
1822 } 1841 }
1823 1842
1843 void WebMediaPlayerImpl::ancestorEnteredFullscreen() {
1844 if (renderer_controller_)
1845 renderer_controller_->OnEnteredFullscreen();
1846 }
1847
1848 void WebMediaPlayerImpl::ancestorExitedFullscreen() {
1849 if (renderer_controller_)
1850 renderer_controller_->OnExitedFullscreen();
1851 }
1852
1824 } // namespace media 1853 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698