| Index: cc/layers/video_layer_impl.cc
|
| diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
|
| index 228f2ccdc8404341b54770e8271d8dfad4e1f9e6..a3246dd8f265f5025e23c5b8a54a86c4bc4283ed 100644
|
| --- a/cc/layers/video_layer_impl.cc
|
| +++ b/cc/layers/video_layer_impl.cc
|
| @@ -17,6 +17,7 @@
|
| #include "cc/trees/occlusion.h"
|
| #include "cc/trees/proxy.h"
|
| #include "media/base/video_frame.h"
|
| +#include "ui/gfx/geometry/rect_conversions.h"
|
|
|
| #if defined(VIDEO_HOLE)
|
| #include "cc/quads/solid_color_draw_quad.h"
|
| @@ -43,7 +44,8 @@ VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* tree_impl,
|
| media::VideoRotation video_rotation)
|
| : LayerImpl(tree_impl, id),
|
| frame_(nullptr),
|
| - video_rotation_(video_rotation) {
|
| + video_rotation_(video_rotation),
|
| + video_can_overlay_(false) {
|
| }
|
|
|
| VideoLayerImpl::~VideoLayerImpl() {
|
| @@ -125,9 +127,9 @@ bool VideoLayerImpl::WillDraw(DrawMode draw_mode,
|
| external_resources.mailboxes[i],
|
| SingleReleaseCallbackImpl::Create(
|
| external_resources.release_callbacks[i]));
|
| + video_can_overlay_ = resource_provider->AllowOverlay(resource_id);
|
| frame_resources_.push_back(resource_id);
|
| }
|
| -
|
| return true;
|
| }
|
|
|
| @@ -216,6 +218,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| opacity,
|
| flipped,
|
| nearest_neighbor);
|
| + texture_quad->damaged = video_can_overlay_;
|
| break;
|
| }
|
| case VideoFrameExternalResources::YUV_RESOURCE: {
|
| @@ -238,6 +241,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| tex_coord_rect, coded_size, frame_resources_[0], frame_resources_[1],
|
| frame_resources_[2],
|
| frame_resources_.size() > 3 ? frame_resources_[3] : 0, color_space);
|
| + yuv_video_quad->damaged = video_can_overlay_;
|
| break;
|
| }
|
| case VideoFrameExternalResources::RGB_RESOURCE: {
|
| @@ -264,6 +268,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| opacity,
|
| flipped,
|
| nearest_neighbor);
|
| + texture_quad->damaged = video_can_overlay_;
|
| break;
|
| }
|
| case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: {
|
| @@ -281,6 +286,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| visible_quad_rect,
|
| frame_resources_[0],
|
| scale * provider_client_impl_->stream_texture_matrix());
|
| + stream_video_quad->damaged = video_can_overlay_;
|
| break;
|
| }
|
| case VideoFrameExternalResources::IO_SURFACE: {
|
| @@ -296,6 +302,7 @@ void VideoLayerImpl::AppendQuads(RenderPass* render_pass,
|
| visible_rect.size(),
|
| frame_resources_[0],
|
| IOSurfaceDrawQuad::UNFLIPPED);
|
| + io_surface_quad->damaged = video_can_overlay_;
|
| break;
|
| }
|
| #if defined(VIDEO_HOLE)
|
| @@ -360,7 +367,11 @@ void VideoLayerImpl::ReleaseResources() {
|
| }
|
|
|
| void VideoLayerImpl::SetNeedsRedraw() {
|
| - SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds())));
|
| + if (video_can_overlay_)
|
| + SetOverlayUpdateRect(
|
| + gfx::UnionRects(overlay_update_rect(), gfx::Rect(bounds())));
|
| + else
|
| + SetUpdateRect(gfx::UnionRects(update_rect(), gfx::Rect(bounds())));
|
| layer_tree_impl()->SetNeedsRedraw();
|
| }
|
|
|
|
|