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

Unified Diff: cc/layers/video_layer_impl.cc

Issue 388643002: Rotation into Video Layer + Content Transform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Formatting Created 6 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 side-by-side diff with in-line comments
Download patch
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..020a4add82ae9418765392ec09c169491546796b 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -38,7 +38,9 @@ scoped_ptr<VideoLayerImpl> VideoLayerImpl::Create(
VideoLayerImpl::VideoLayerImpl(LayerTreeImpl* tree_impl, int id)
: LayerImpl(tree_impl, id),
- frame_(NULL) {}
+ frame_(NULL),
+ video_rotation_(media::VIDEO_ROTATION_0) {
+}
VideoLayerImpl::~VideoLayerImpl() {
if (!provider_client_impl_->Stopped()) {
@@ -55,7 +57,9 @@ 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());
+ impl->set_video_rotation(video_rotation_);
+ return scoped_ptr<LayerImpl>(impl);
}
void VideoLayerImpl::PushPropertiesTo(LayerImpl* layer) {
@@ -134,10 +138,31 @@ void VideoLayerImpl::AppendQuads(
render_pass->CreateAndAppendSharedQuadState();
PopulateSharedQuadState(shared_quad_state);
danakj 2014/07/11 21:04:29 replace this with a call to SetAll (do this after
+ gfx::Size bounds = content_bounds();
danakj 2014/07/11 21:04:29 rotated_content_bounds
+ gfx::Transform transform = shared_quad_state->content_to_target_transform;
+ switch (video_rotation_) {
+ case media::VIDEO_ROTATION_90:
+ transform.Rotate(90);
+ transform.Translate(0, -bounds.width());
+ bounds = gfx::Size(bounds.height(), bounds.width());
+ break;
+ case media::VIDEO_ROTATION_180:
+ transform.Rotate(180);
+ transform.Translate(-bounds.width(), -bounds.height());
+ break;
+ case media::VIDEO_ROTATION_270:
+ transform.Rotate(270);
+ transform.Translate(-bounds.height(), 0);
+ bounds = gfx::Size(bounds.height(), bounds.width());
+ default:
scherkus (not reviewing) 2014/07/11 18:54:07 try to avoid default where possible and instead ex
danakj 2014/07/11 21:04:29 +1
+ break;
+ }
+ shared_quad_state->content_to_target_transform = transform;
danakj 2014/07/11 21:04:29 You want to Preconcat your transform onto the exis
+
AppendDebugBorderQuad(
- render_pass, content_bounds(), shared_quad_state, append_quads_data);
+ render_pass, bounds, shared_quad_state, append_quads_data);
- gfx::Rect quad_rect(content_bounds());
+ gfx::Rect quad_rect(bounds);
gfx::Rect opaque_rect(contents_opaque() ? quad_rect : gfx::Rect());
gfx::Rect visible_rect = frame_->visible_rect();
gfx::Size coded_size = frame_->coded_size();
@@ -329,6 +354,10 @@ void VideoLayerImpl::SetNeedsRedraw() {
layer_tree_impl()->SetNeedsRedraw();
}
+void VideoLayerImpl::set_video_rotation(media::VideoRotation video_rotation) {
danakj 2014/07/11 21:04:29 SetVideoRotation, this isn't inline
+ video_rotation_ = video_rotation;
+}
danakj 2014/07/11 21:04:29 You need to call NoteLayerPropertyChanged()
+
void VideoLayerImpl::SetProviderClientImpl(
scoped_refptr<VideoFrameProviderClientImpl> provider_client_impl) {
provider_client_impl_ = provider_client_impl;

Powered by Google App Engine
This is Rietveld 408576698