Chromium Code Reviews| Index: cc/layers/video_layer_impl.cc |
| diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc |
| index 7b4234c870cc023429578a807918edc4a9739bdf..6e65846557ede2e1d98af1551bf366b388b951dc 100644 |
| --- a/cc/layers/video_layer_impl.cc |
| +++ b/cc/layers/video_layer_impl.cc |
| @@ -28,17 +28,21 @@ namespace cc { |
| scoped_ptr<VideoLayerImpl> VideoLayerImpl::Create( |
| LayerTreeImpl* tree_impl, |
| int id, |
| - VideoFrameProvider* provider) { |
| - scoped_ptr<VideoLayerImpl> layer(new VideoLayerImpl(tree_impl, id)); |
| + VideoFrameProvider* provider, |
| + media::VideoRotation video_rotation) { |
| + scoped_ptr<VideoLayerImpl> layer( |
| + new VideoLayerImpl(tree_impl, id, video_rotation)); |
| layer->SetProviderClientImpl(VideoFrameProviderClientImpl::Create(provider)); |
| DCHECK(tree_impl->proxy()->IsImplThread()); |
| DCHECK(tree_impl->proxy()->IsMainThreadBlocked()); |
| return layer.Pass(); |
| } |
| -VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* tree_impl, int id) |
| - : LayerImpl(tree_impl, id), |
| - frame_(NULL) {} |
| +VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* tree_impl, |
| + int id, |
| + media::VideoRotation video_rotation) |
| + : LayerImpl(tree_impl, id), frame_(NULL), video_rotation_(video_rotation) { |
| +} |
| VideoLayerImpl::~VideoLayerImpl() { |
| if (!provider_client_impl_->Stopped()) { |
| @@ -55,7 +59,8 @@ VideoLayerImpl::~VideoLayerImpl() { |
| scoped_ptr<LayerImpl> VideoLayerImpl::CreateLayerImpl( |
| LayerTreeImpl* tree_impl) { |
| - return scoped_ptr<LayerImpl>(new VideoLayerImpl(tree_impl, id())); |
| + VideoLayerImpl* impl = new VideoLayerImpl(tree_impl, id(), video_rotation_); |
| + return scoped_ptr<LayerImpl>(impl); |
| } |
| void VideoLayerImpl::PushPropertiesTo(LayerImpl* layer) { |
| @@ -134,16 +139,46 @@ void VideoLayerImpl::AppendQuads( |
| render_pass->CreateAndAppendSharedQuadState(); |
| PopulateSharedQuadState(shared_quad_state); |
|
danakj
2014/08/05 20:18:21
drop this, since you do SetALl below. Can you move
|
| + gfx::Transform transform = draw_transform(); |
| + gfx::Size rotated_size = content_bounds(); |
| + |
| + switch (video_rotation_) { |
| + case media::VIDEO_ROTATION_90: |
| + rotated_size = gfx::Size(rotated_size.height(), rotated_size.width()); |
| + transform.Rotate(90.0); |
| + transform.Translate(0.0, -rotated_size.height()); |
| + break; |
| + case media::VIDEO_ROTATION_180: |
| + transform.Rotate(180.0); |
| + transform.Translate(-rotated_size.width(), -rotated_size.height()); |
| + break; |
| + case media::VIDEO_ROTATION_270: |
| + rotated_size = gfx::Size(rotated_size.height(), rotated_size.width()); |
| + transform.Rotate(270.0); |
| + transform.Translate(-rotated_size.width(), 0); |
| + case media::VIDEO_ROTATION_0: |
| + break; |
| + } |
| + |
| + shared_quad_state->SetAll(transform, |
| + rotated_size, |
| + visible_content_rect(), |
| + clip_rect(), |
| + is_clipped(), |
| + draw_opacity(), |
| + blend_mode(), |
| + sorting_context_id()); |
| + |
| AppendDebugBorderQuad( |
| - render_pass, content_bounds(), shared_quad_state, append_quads_data); |
| + render_pass, rotated_size, shared_quad_state, append_quads_data); |
| - gfx::Rect quad_rect(content_bounds()); |
| + gfx::Rect quad_rect(rotated_size); |
| gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect()); |
| gfx::Rect visible_rect = frame_->visible_rect(); |
| gfx::Size coded_size = frame_->coded_size(); |
| - gfx::Rect visible_quad_rect = occlusion_tracker.UnoccludedContentRect( |
| - quad_rect, draw_properties().target_space_transform); |
| + gfx::Rect visible_quad_rect = |
| + occlusion_tracker.UnoccludedContentRect(quad_rect, transform); |
| if (visible_quad_rect.IsEmpty()) |
| return; |