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

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

Issue 2956713003: Replaces VideoLayer with a SurfaceLayer in WebMediaPlayerImpl (Closed)
Patch Set: Fixes error in deconstructor. Created 3 years, 5 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 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 54 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
55 #include "third_party/WebKit/public/platform/WebMediaPlayerEncryptedMediaClient. h" 55 #include "third_party/WebKit/public/platform/WebMediaPlayerEncryptedMediaClient. h"
56 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" 56 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h"
57 #include "third_party/WebKit/public/platform/WebMediaSource.h" 57 #include "third_party/WebKit/public/platform/WebMediaSource.h"
58 #include "third_party/WebKit/public/platform/WebRect.h" 58 #include "third_party/WebKit/public/platform/WebRect.h"
59 #include "third_party/WebKit/public/platform/WebRuntimeFeatures.h" 59 #include "third_party/WebKit/public/platform/WebRuntimeFeatures.h"
60 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" 60 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
61 #include "third_party/WebKit/public/platform/WebSize.h" 61 #include "third_party/WebKit/public/platform/WebSize.h"
62 #include "third_party/WebKit/public/platform/WebString.h" 62 #include "third_party/WebKit/public/platform/WebString.h"
63 #include "third_party/WebKit/public/platform/WebURL.h" 63 #include "third_party/WebKit/public/platform/WebURL.h"
64 #include "third_party/WebKit/public/platform/WebVideoSurfaceLayerBridge.h"
64 #include "third_party/WebKit/public/web/WebDocument.h" 65 #include "third_party/WebKit/public/web/WebDocument.h"
65 #include "third_party/WebKit/public/web/WebFrame.h" 66 #include "third_party/WebKit/public/web/WebFrame.h"
66 #include "third_party/WebKit/public/web/WebLocalFrame.h" 67 #include "third_party/WebKit/public/web/WebLocalFrame.h"
67 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h" 68 #include "third_party/WebKit/public/web/WebUserGestureIndicator.h"
68 #include "third_party/WebKit/public/web/WebView.h" 69 #include "third_party/WebKit/public/web/WebView.h"
69 70
70 #if defined(OS_ANDROID) 71 #if defined(OS_ANDROID)
71 #include "media/base/android/media_codec_util.h" 72 #include "media/base/android/media_codec_util.h"
72 #endif 73 #endif
73 74
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 embedded_media_experience_enabled_( 261 embedded_media_experience_enabled_(
261 params->embedded_media_experience_enabled()), 262 params->embedded_media_experience_enabled()),
262 request_routing_token_cb_(params->request_routing_token_cb()), 263 request_routing_token_cb_(params->request_routing_token_cb()),
263 overlay_routing_token_(OverlayInfo::RoutingToken()) { 264 overlay_routing_token_(OverlayInfo::RoutingToken()) {
264 DVLOG(1) << __func__; 265 DVLOG(1) << __func__;
265 DCHECK(!adjust_allocated_memory_cb_.is_null()); 266 DCHECK(!adjust_allocated_memory_cb_.is_null());
266 DCHECK(renderer_factory_selector_); 267 DCHECK(renderer_factory_selector_);
267 DCHECK(client_); 268 DCHECK(client_);
268 DCHECK(delegate_); 269 DCHECK(delegate_);
269 270
271 if (base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo))
liberato (no reviews please) 2017/07/06 16:56:17 please cache this, similar to |overlay_mode_|, sin
CJ 2017/07/06 20:45:18 Done.
272 bridge_ = base::WrapUnique(blink::WebVideoSurfaceLayerBridge::Create());
273
270 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch( 274 force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch(
271 switches::kForceVideoOverlays); 275 switches::kForceVideoOverlays);
272 276
273 if (base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo)) { 277 if (base::FeatureList::IsEnabled(media::kOverlayFullscreenVideo)) {
274 bool use_android_overlay = 278 bool use_android_overlay =
275 base::FeatureList::IsEnabled(media::kUseAndroidOverlay); 279 base::FeatureList::IsEnabled(media::kUseAndroidOverlay);
276 overlay_mode_ = use_android_overlay ? OverlayMode::kUseAndroidOverlay 280 overlay_mode_ = use_android_overlay ? OverlayMode::kUseAndroidOverlay
277 : OverlayMode::kUseContentVideoView; 281 : OverlayMode::kUseContentVideoView;
278 } else { 282 } else {
279 overlay_mode_ = OverlayMode::kNoOverlays; 283 overlay_mode_ = OverlayMode::kNoOverlays;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 watch_time_reporter_.reset(); 320 watch_time_reporter_.reset();
317 321
318 // The underlying Pipeline must be stopped before it is destroyed. 322 // The underlying Pipeline must be stopped before it is destroyed.
319 pipeline_controller_.Stop(); 323 pipeline_controller_.Stop();
320 324
321 if (last_reported_memory_usage_) 325 if (last_reported_memory_usage_)
322 adjust_allocated_memory_cb_.Run(-last_reported_memory_usage_); 326 adjust_allocated_memory_cb_.Run(-last_reported_memory_usage_);
323 327
324 // Destruct compositor resources in the proper order. 328 // Destruct compositor resources in the proper order.
325 client_->SetWebLayer(nullptr); 329 client_->SetWebLayer(nullptr);
326 if (video_weblayer_) 330 if (!base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo) &&
331 video_weblayer_) {
327 static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider(); 332 static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider();
333 }
334 if (base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo) &&
335 bridge_->GetWebLayer()) {
336 static_cast<cc::VideoLayer*>(bridge_->GetCCLayer())->StopUsingProvider();
liberato (no reviews please) 2017/07/06 16:56:18 the weblayer is a SurfaceLayer, not a VideoLayer.
CJ 2017/07/06 20:45:18 Done.
337 }
328 compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_); 338 compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_);
329 339
330 media_log_->AddEvent( 340 media_log_->AddEvent(
331 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); 341 media_log_->CreateEvent(MediaLogEvent::WEBMEDIAPLAYER_DESTROYED));
332 } 342 }
333 343
334 void WebMediaPlayerImpl::Load(LoadType load_type, 344 void WebMediaPlayerImpl::Load(LoadType load_type,
335 const blink::WebMediaPlayerSource& source, 345 const blink::WebMediaPlayerSource& source,
336 CORSMode cors_mode) { 346 CORSMode cors_mode) {
337 DVLOG(1) << __func__; 347 DVLOG(1) << __func__;
(...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 if (overlay_enabled_) { 1352 if (overlay_enabled_) {
1343 // SurfaceView doesn't support rotated video, so transition back if 1353 // SurfaceView doesn't support rotated video, so transition back if
1344 // the video is now rotated. If |force_video_overlays_|, we keep the 1354 // the video is now rotated. If |force_video_overlays_|, we keep the
1345 // overlay anyway so that the state machine keeps working. 1355 // overlay anyway so that the state machine keeps working.
1346 if (!force_video_overlays_ && !DoesOverlaySupportMetadata()) 1356 if (!force_video_overlays_ && !DoesOverlaySupportMetadata())
1347 DisableOverlay(); 1357 DisableOverlay();
1348 else if (surface_manager_) 1358 else if (surface_manager_)
1349 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size); 1359 surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size);
1350 } 1360 }
1351 1361
1352 DCHECK(!video_weblayer_); 1362 if (!base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)) {
1353 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create( 1363 DCHECK(!video_weblayer_);
1354 compositor_, pipeline_metadata_.video_rotation))); 1364 video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create(
1355 video_weblayer_->layer()->SetContentsOpaque(opaque_); 1365 compositor_, pipeline_metadata_.video_rotation)));
1356 video_weblayer_->SetContentsOpaqueIsFixed(true); 1366 video_weblayer_->layer()->SetContentsOpaque(opaque_);
1357 client_->SetWebLayer(video_weblayer_.get()); 1367 video_weblayer_->SetContentsOpaqueIsFixed(true);
1368 client_->SetWebLayer(video_weblayer_.get());
1369 } else {
1370 if (bridge_->GetWebLayer()) {
1371 bridge_->GetCCLayer()->SetContentsOpaque(opaque_);
1372 // TODO(lethalantidote): Figure out how to persist opaque setting
liberato (no reviews please) 2017/07/06 16:56:18 maybe open a bug for this, add it as a blocker to
CJ 2017/07/06 20:45:18 Done.
1373 // without calling WebLayerImpl's SetContentsOpaueIsFixed;
1374 client_->SetWebLayer(bridge_->GetWebLayer());
1375 }
1376 }
1358 } 1377 }
1359 1378
1360 if (observer_) 1379 if (observer_)
1361 observer_->OnMetadataChanged(pipeline_metadata_); 1380 observer_->OnMetadataChanged(pipeline_metadata_);
1362 1381
1363 CreateWatchTimeReporter(); 1382 CreateWatchTimeReporter();
1364 UpdatePlayState(); 1383 UpdatePlayState();
1365 } 1384 }
1366 1385
1367 void WebMediaPlayerImpl::OnProgress() { 1386 void WebMediaPlayerImpl::OnProgress() {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1541 delegate_->DidPlayerSizeChange(delegate_id_, NaturalSize()); 1560 delegate_->DidPlayerSizeChange(delegate_id_, NaturalSize());
1542 } 1561 }
1543 1562
1544 void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) { 1563 void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) {
1545 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1564 DCHECK(main_task_runner_->BelongsToCurrentThread());
1546 DCHECK_NE(ready_state_, WebMediaPlayer::kReadyStateHaveNothing); 1565 DCHECK_NE(ready_state_, WebMediaPlayer::kReadyStateHaveNothing);
1547 1566
1548 opaque_ = opaque; 1567 opaque_ = opaque;
1549 // Modify content opaqueness of cc::Layer directly so that 1568 // Modify content opaqueness of cc::Layer directly so that
1550 // SetContentsOpaqueIsFixed is ignored. 1569 // SetContentsOpaqueIsFixed is ignored.
1551 if (video_weblayer_) 1570 if (!base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)) {
1552 video_weblayer_->layer()->SetContentsOpaque(opaque_); 1571 if (video_weblayer_)
1572 video_weblayer_->layer()->SetContentsOpaque(opaque_);
1573 } else {
1574 if (bridge_->GetWebLayer()) {
1575 bridge_->GetCCLayer()->SetContentsOpaque(opaque_);
1576 }
1577 }
1553 } 1578 }
1554 1579
1555 void WebMediaPlayerImpl::OnVideoAverageKeyframeDistanceUpdate() { 1580 void WebMediaPlayerImpl::OnVideoAverageKeyframeDistanceUpdate() {
1556 UpdateBackgroundVideoOptimizationState(); 1581 UpdateBackgroundVideoOptimizationState();
1557 } 1582 }
1558 1583
1559 void WebMediaPlayerImpl::OnFrameHidden() { 1584 void WebMediaPlayerImpl::OnFrameHidden() {
1560 DCHECK(main_task_runner_->BelongsToCurrentThread()); 1585 DCHECK(main_task_runner_->BelongsToCurrentThread());
1561 1586
1562 // Backgrounding a video requires a user gesture to resume playback. 1587 // Backgrounding a video requires a user gesture to resume playback.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1716 !IsNewRemotePlaybackPipelineEnabled()) { 1741 !IsNewRemotePlaybackPipelineEnabled()) {
1717 scoped_refptr<VideoFrame> frame = cast_impl_.GetCastingBanner(); 1742 scoped_refptr<VideoFrame> frame = cast_impl_.GetCastingBanner();
1718 if (frame) 1743 if (frame)
1719 compositor_->PaintSingleFrame(frame); 1744 compositor_->PaintSingleFrame(frame);
1720 } 1745 }
1721 1746
1722 UpdatePlayState(); 1747 UpdatePlayState();
1723 } 1748 }
1724 1749
1725 gfx::Size WebMediaPlayerImpl::GetCanvasSize() const { 1750 gfx::Size WebMediaPlayerImpl::GetCanvasSize() const {
1726 if (!video_weblayer_) 1751 if (!base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo) {
1727 return pipeline_metadata_.natural_size; 1752 if (!video_weblayer_)
liberato (no reviews please) 2017/07/06 16:56:17 maybe add a weblayer() helper that would return |v
CJ 2017/07/06 20:45:18 Wont all the |video_weblayer_| code be going away
1753 return pipeline_metadata_.natural_size;
1728 1754
1729 return video_weblayer_->Bounds(); 1755 return video_weblayer_->Bounds();
1756 } else {
1757 if (!bridge_->GetWebLayer())
1758 return pipeline_metadate_.natural_size;
liberato (no reviews please) 2017/07/06 16:56:18 s/metadate/metadata
CJ 2017/07/06 20:45:18 Thanks! I wonder why the compiler is not catching
liberato (no reviews please) 2017/07/07 15:26:43 the entire group of fns is #if android.
1759
1760 return bridge_->GetWebLayer()->Bounds();
1761 }
1730 } 1762 }
1731 1763
1732 void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) { 1764 void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) {
1733 cast_impl_.SetDeviceScaleFactor(scale_factor); 1765 cast_impl_.SetDeviceScaleFactor(scale_factor);
1734 } 1766 }
1735 1767
1736 void WebMediaPlayerImpl::SetPoster(const blink::WebURL& poster) { 1768 void WebMediaPlayerImpl::SetPoster(const blink::WebURL& poster) {
1737 cast_impl_.setPoster(poster); 1769 cast_impl_.setPoster(poster);
1738 } 1770 }
1739 #endif // defined(OS_ANDROID) // WMPI_CAST 1771 #endif // defined(OS_ANDROID) // WMPI_CAST
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
2602 } 2634 }
2603 2635
2604 #undef UMA_HISTOGRAM_VIDEO_HEIGHT 2636 #undef UMA_HISTOGRAM_VIDEO_HEIGHT
2605 2637
2606 void WebMediaPlayerImpl::SetTickClockForTest(base::TickClock* tick_clock) { 2638 void WebMediaPlayerImpl::SetTickClockForTest(base::TickClock* tick_clock) {
2607 tick_clock_.reset(tick_clock); 2639 tick_clock_.reset(tick_clock);
2608 buffered_data_source_host_.SetTickClockForTest(tick_clock); 2640 buffered_data_source_host_.SetTickClockForTest(tick_clock);
2609 } 2641 }
2610 2642
2611 } // namespace media 2643 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698