| Index: media/blink/webmediaplayer_impl.cc
|
| diff --git a/media/blink/webmediaplayer_impl.cc b/media/blink/webmediaplayer_impl.cc
|
| index 2986a27c8a2daacba2205b99fca390f6d153e882..28911b1918cc357ac7a34f59d24cfb77eadb34ee 100644
|
| --- a/media/blink/webmediaplayer_impl.cc
|
| +++ b/media/blink/webmediaplayer_impl.cc
|
| @@ -60,6 +60,7 @@
|
| #include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
|
| #include "third_party/WebKit/public/platform/WebSize.h"
|
| #include "third_party/WebKit/public/platform/WebString.h"
|
| +#include "third_party/WebKit/public/platform/WebSurfaceLayerBridge.h"
|
| #include "third_party/WebKit/public/platform/WebURL.h"
|
| #include "third_party/WebKit/public/web/WebDocument.h"
|
| #include "third_party/WebKit/public/web/WebFrame.h"
|
| @@ -259,6 +260,8 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| params->enable_instant_source_buffer_gc()),
|
| embedded_media_experience_enabled_(
|
| params->embedded_media_experience_enabled()),
|
| + surface_layer_for_video_enabled_(
|
| + base::FeatureList::IsEnabled(media::kUseSurfaceLayerForVideo)),
|
| request_routing_token_cb_(params->request_routing_token_cb()),
|
| overlay_routing_token_(OverlayInfo::RoutingToken()) {
|
| DVLOG(1) << __func__;
|
| @@ -267,6 +270,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
|
| DCHECK(client_);
|
| DCHECK(delegate_);
|
|
|
| + if (surface_layer_for_video_enabled_)
|
| + bridge_ = base::WrapUnique(blink::WebSurfaceLayerBridge::Create());
|
| +
|
| force_video_overlays_ = base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kForceVideoOverlays);
|
|
|
| @@ -323,8 +329,11 @@ WebMediaPlayerImpl::~WebMediaPlayerImpl() {
|
|
|
| // Destruct compositor resources in the proper order.
|
| client_->SetWebLayer(nullptr);
|
| - if (video_weblayer_)
|
| + if (!surface_layer_for_video_enabled_ && video_weblayer_) {
|
| static_cast<cc::VideoLayer*>(video_weblayer_->layer())->StopUsingProvider();
|
| + }
|
| + // TODO(lethalantidote): Handle destruction of compositor for surface layer.
|
| + // https://crbug/739854.
|
| compositor_task_runner_->DeleteSoon(FROM_HERE, compositor_);
|
|
|
| media_log_->AddEvent(
|
| @@ -1349,12 +1358,20 @@ void WebMediaPlayerImpl::OnMetadata(PipelineMetadata metadata) {
|
| surface_manager_->NaturalSizeChanged(pipeline_metadata_.natural_size);
|
| }
|
|
|
| - DCHECK(!video_weblayer_);
|
| - video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create(
|
| - compositor_, pipeline_metadata_.video_rotation)));
|
| - video_weblayer_->layer()->SetContentsOpaque(opaque_);
|
| - video_weblayer_->SetContentsOpaqueIsFixed(true);
|
| - client_->SetWebLayer(video_weblayer_.get());
|
| + if (!surface_layer_for_video_enabled_) {
|
| + DCHECK(!video_weblayer_);
|
| + video_weblayer_.reset(new cc_blink::WebLayerImpl(cc::VideoLayer::Create(
|
| + compositor_, pipeline_metadata_.video_rotation)));
|
| + video_weblayer_->layer()->SetContentsOpaque(opaque_);
|
| + video_weblayer_->SetContentsOpaqueIsFixed(true);
|
| + client_->SetWebLayer(video_weblayer_.get());
|
| + } else if (bridge_->GetWebLayer()) {
|
| + bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_);
|
| + // TODO(lethalantidote): Figure out how to persist opaque setting
|
| + // without calling WebLayerImpl's SetContentsOpaueIsFixed;
|
| + // https://crbug/739859.
|
| + client_->SetWebLayer(bridge_->GetWebLayer());
|
| + }
|
| }
|
|
|
| if (observer_)
|
| @@ -1548,8 +1565,12 @@ void WebMediaPlayerImpl::OnVideoOpacityChange(bool opaque) {
|
| opaque_ = opaque;
|
| // Modify content opaqueness of cc::Layer directly so that
|
| // SetContentsOpaqueIsFixed is ignored.
|
| - if (video_weblayer_)
|
| - video_weblayer_->layer()->SetContentsOpaque(opaque_);
|
| + if (!surface_layer_for_video_enabled_) {
|
| + if (video_weblayer_)
|
| + video_weblayer_->layer()->SetContentsOpaque(opaque_);
|
| + } else if (bridge_->GetWebLayer()) {
|
| + bridge_->GetWebLayer()->CcLayer()->SetContentsOpaque(opaque_);
|
| + }
|
| }
|
|
|
| void WebMediaPlayerImpl::OnVideoAverageKeyframeDistanceUpdate() {
|
| @@ -1723,10 +1744,16 @@ void WebMediaPlayerImpl::SuspendForRemote() {
|
| }
|
|
|
| gfx::Size WebMediaPlayerImpl::GetCanvasSize() const {
|
| - if (!video_weblayer_)
|
| + if (!surface_layer_for_video_enabled_) {
|
| + if (!video_weblayer_)
|
| + return pipeline_metadata_.natural_size;
|
| +
|
| + return video_weblayer_->Bounds();
|
| + }
|
| + if (!bridge_->GetWebLayer())
|
| return pipeline_metadata_.natural_size;
|
|
|
| - return video_weblayer_->Bounds();
|
| + return bridge_->GetWebLayer()->Bounds();
|
| }
|
|
|
| void WebMediaPlayerImpl::SetDeviceScaleFactor(float scale_factor) {
|
|
|