Revert "Fix video quad rect and surface output rect"

This reverts commit 1dfd4418faf858a63bd901ef0485c7e54e5e69fb.

Reason for revert: <INSERT REASONING HERE>

Original change's description:
> Fix video quad rect and surface output rect
> 
> Video surface output rect didn't take rotation into account so when
> SurfaceAggregator would stretch content to fill bounds, it would end up
> with the wrong scaling factors (squash in one dimension and expand in
> another) since the surface quad's bounds (in the embedder) were rotated.
> 
> To work around this (or by accident), VideoFrameResourceProvider was
> passing the rotated size as the quad's rect which doesn't make sense
> intuitively.  This also worked by accident with DirectComposition
> overlays because of applying another scaling which would fix the aspect
> ratio again.
> 
> This change makes it possible to use the |quad_to_target_transform| as
> is, without having to apply an aspect ratio correcting scaling, and to
> assume that the quad's rect is in the pre-transform space.
> 
> Bug: 904035
> Change-Id: Ia55e44f1f2b49b8d368a97af54f3ce9d90a81234
> Reviewed-on: https://chromium-review.googlesource.com/c/1334971
> Reviewed-by: enne <enne@chromium.org>
> Reviewed-by: Kenneth Russell <kbr@chromium.org>
> Reviewed-by: Frank Liberato <liberato@chromium.org>
> Commit-Queue: Sunny Sachanandani <sunnyps@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#608495}

TBR=kbr@chromium.org,enne@chromium.org,sunnyps@chromium.org,liberato@chromium.org

Change-Id: I99727abc125468581caa0cf9e2ddea74351dd1f9
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 904035
Reviewed-on: https://chromium-review.googlesource.com/c/1338206
Reviewed-by: Ella Ge <eirage@chromium.org>
Commit-Queue: Ella Ge <eirage@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608501}
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index 84c9913b..c356a8f6 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -122,8 +122,6 @@
   DCHECK(frame_.get());
 
   gfx::Transform transform = DrawTransform();
-  // bounds() is in post-rotation space so quad rect in content space must be
-  // in pre-rotation space
   gfx::Size rotated_size = bounds();
 
   switch (video_rotation_) {
@@ -145,19 +143,20 @@
       break;
   }
 
-  gfx::Rect quad_rect(rotated_size);
   Occlusion occlusion_in_video_space =
       draw_properties()
           .occlusion_in_content_space.GetOcclusionWithGivenDrawTransform(
               transform);
   gfx::Rect visible_quad_rect =
-      occlusion_in_video_space.GetUnoccludedContentRect(quad_rect);
+      occlusion_in_video_space.GetUnoccludedContentRect(
+          gfx::Rect(rotated_size));
   if (visible_quad_rect.IsEmpty())
     return;
 
-  updater_->AppendQuads(
-      render_pass, frame_, transform, quad_rect, visible_quad_rect, clip_rect(),
-      is_clipped(), contents_opaque(), draw_opacity(), GetSortingContextId());
+  updater_->AppendQuads(render_pass, frame_, transform, rotated_size,
+                        visible_quad_rect, clip_rect(), is_clipped(),
+                        contents_opaque(), draw_opacity(),
+                        GetSortingContextId(), visible_quad_rect);
 }
 
 void VideoLayerImpl::DidDraw(viz::ClientResourceProvider* resource_provider) {
diff --git a/media/renderers/video_resource_updater.cc b/media/renderers/video_resource_updater.cc
index 91bac5fe..ffac9c8dd 100644
--- a/media/renderers/video_resource_updater.cc
+++ b/media/renderers/video_resource_updater.cc
@@ -404,24 +404,26 @@
 void VideoResourceUpdater::AppendQuads(viz::RenderPass* render_pass,
                                        scoped_refptr<VideoFrame> frame,
                                        gfx::Transform transform,
-                                       gfx::Rect quad_rect,
-                                       gfx::Rect visible_quad_rect,
+                                       gfx::Size rotated_size,
+                                       gfx::Rect visible_layer_rect,
                                        gfx::Rect clip_rect,
                                        bool is_clipped,
                                        bool contents_opaque,
                                        float draw_opacity,
-                                       int sorting_context_id) {
+                                       int sorting_context_id,
+                                       gfx::Rect visible_quad_rect) {
   DCHECK(frame.get());
 
   viz::SharedQuadState* shared_quad_state =
       render_pass->CreateAndAppendSharedQuadState();
-  shared_quad_state->SetAll(transform, quad_rect, visible_quad_rect, clip_rect,
-                            is_clipped, contents_opaque, draw_opacity,
-                            SkBlendMode::kSrcOver, sorting_context_id);
+  gfx::Rect rotated_size_rect(rotated_size);
+  shared_quad_state->SetAll(
+      transform, rotated_size_rect, visible_layer_rect, clip_rect, is_clipped,
+      contents_opaque, draw_opacity, SkBlendMode::kSrcOver, sorting_context_id);
 
-  bool needs_blending = !contents_opaque;
-
+  gfx::Rect quad_rect(rotated_size);
   gfx::Rect visible_rect = frame->visible_rect();
+  bool needs_blending = !contents_opaque;
   gfx::Size coded_size = frame->coded_size();
 
   const float tex_width_scale =
diff --git a/media/renderers/video_resource_updater.h b/media/renderers/video_resource_updater.h
index 795a42f..9ea3f50 100644
--- a/media/renderers/video_resource_updater.h
+++ b/media/renderers/video_resource_updater.h
@@ -105,13 +105,14 @@
   void AppendQuads(viz::RenderPass* render_pass,
                    scoped_refptr<VideoFrame> frame,
                    gfx::Transform transform,
-                   gfx::Rect quad_rect,
-                   gfx::Rect visible_quad_rect,
+                   gfx::Size rotated_size,
+                   gfx::Rect visible_layer_rect,
                    gfx::Rect clip_rect,
                    bool is_clipped,
                    bool context_opaque,
                    float draw_opacity,
-                   int sorting_context_id);
+                   int sorting_context_id,
+                   gfx::Rect visible_quad_rect);
 
   // TODO(kylechar): This is only public for testing, make private.
   VideoFrameExternalResources CreateExternalResourcesFromVideoFrame(
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_resource_provider.cc b/third_party/blink/renderer/platform/graphics/video_frame_resource_provider.cc
index 96036bb..382cbf02 100644
--- a/third_party/blink/renderer/platform/graphics/video_frame_resource_provider.cc
+++ b/third_party/blink/renderer/platform/graphics/video_frame_resource_provider.cc
@@ -72,6 +72,28 @@
   DCHECK(resource_updater_);
   DCHECK(resource_provider_);
 
+  gfx::Transform transform = gfx::Transform();
+  gfx::Size rotated_size = frame->coded_size();
+
+  switch (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);
+      break;
+    case media::VIDEO_ROTATION_0:
+      break;
+  }
+
   // When obtaining frame resources, we end up having to wait. See
   // https://crbug/878070.
   // Unfortunately, we have no idea if blocking is allowed on the current thread
@@ -86,37 +108,21 @@
     resource_updater_->ObtainFrameResources(frame);
   }
 
-  gfx::Transform transform = gfx::Transform();
-  // The quad's rect is in pre-transform space so that applying the transform on
-  // it will produce the bounds in target space.
-  gfx::Rect quad_rect = gfx::Rect(frame->natural_size());
-
-  switch (rotation) {
-    case media::VIDEO_ROTATION_90:
-      transform.Rotate(90.0);
-      transform.Translate(0.0, -quad_rect.height());
-      break;
-    case media::VIDEO_ROTATION_180:
-      transform.Rotate(180.0);
-      transform.Translate(-quad_rect.width(), -quad_rect.height());
-      break;
-    case media::VIDEO_ROTATION_270:
-      transform.Rotate(270.0);
-      transform.Translate(-quad_rect.width(), 0);
-      break;
-    case media::VIDEO_ROTATION_0:
-      break;
-  }
-
-  gfx::Rect visible_quad_rect = quad_rect;
-  gfx::Rect clip_rect;
+  // TODO(lethalantidote) : update with true value;
+  gfx::Rect visible_layer_rect = gfx::Rect(rotated_size);
+  gfx::Rect clip_rect = gfx::Rect(frame->coded_size());
   bool is_clipped = false;
   float draw_opacity = 1.0f;
   int sorting_context_id = 0;
 
-  resource_updater_->AppendQuads(
-      render_pass, std::move(frame), transform, quad_rect, visible_quad_rect,
-      clip_rect, is_clipped, is_opaque, draw_opacity, sorting_context_id);
+  // Internal to this compositor frame, this video quad is never occluded,
+  // thus the full quad is visible.
+  gfx::Rect visible_quad_rect = gfx::Rect(rotated_size);
+
+  resource_updater_->AppendQuads(render_pass, std::move(frame), transform,
+                                 rotated_size, visible_layer_rect, clip_rect,
+                                 is_clipped, is_opaque, draw_opacity,
+                                 sorting_context_id, visible_quad_rect);
 }
 
 void VideoFrameResourceProvider::ReleaseFrameResources() {
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc b/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc
index bca500d..d737574f 100644
--- a/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc
+++ b/third_party/blink/renderer/platform/graphics/video_frame_submitter.cc
@@ -242,22 +242,16 @@
   if (!compositor_frame_sink_ || !ShouldSubmit())
     return false;
 
-  gfx::Size frame_size(video_frame->natural_size());
-  if (rotation_ == media::VIDEO_ROTATION_90 ||
-      rotation_ == media::VIDEO_ROTATION_270) {
-    frame_size = gfx::Size(frame_size.height(), frame_size.width());
-  }
-  if (frame_size_ != frame_size) {
+  if (frame_size_ != gfx::Rect(video_frame->coded_size())) {
     if (!frame_size_.IsEmpty())
       child_local_surface_id_allocator_.GenerateId();
-    frame_size_ = frame_size;
+    frame_size_ = gfx::Rect(video_frame->coded_size());
   }
 
   viz::CompositorFrame compositor_frame;
   std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
 
-  render_pass->SetNew(1, gfx::Rect(frame_size_), gfx::Rect(frame_size_),
-                      gfx::Transform());
+  render_pass->SetNew(1, frame_size_, frame_size_, gfx::Transform());
   render_pass->filters = cc::FilterOperations();
   resource_provider_->AppendQuads(render_pass.get(), video_frame, rotation_,
                                   is_opaque_);
@@ -308,8 +302,7 @@
   compositor_frame.metadata.may_contain_video = true;
 
   std::unique_ptr<viz::RenderPass> render_pass = viz::RenderPass::Create();
-  render_pass->SetNew(1, gfx::Rect(frame_size_), gfx::Rect(frame_size_),
-                      gfx::Transform());
+  render_pass->SetNew(1, frame_size_, frame_size_, gfx::Transform());
   compositor_frame.render_pass_list.push_back(std::move(render_pass));
 
   compositor_frame_sink_->SubmitCompositorFrame(
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_submitter.h b/third_party/blink/renderer/platform/graphics/video_frame_submitter.h
index 22728db..3b4fcbf 100644
--- a/third_party/blink/renderer/platform/graphics/video_frame_submitter.h
+++ b/third_party/blink/renderer/platform/graphics/video_frame_submitter.h
@@ -142,7 +142,7 @@
   // Size of the video frame being submitted. It is set the first time a frame
   // is submitted. Every time there is a change in the video frame size, the
   // child component of the LocalSurfaceId will be updated.
-  gfx::Size frame_size_;
+  gfx::Rect frame_size_;
 
   // Used to updated the LocalSurfaceId when detecting a change in video frame
   // size.
diff --git a/third_party/blink/renderer/platform/graphics/video_frame_submitter_test.cc b/third_party/blink/renderer/platform/graphics/video_frame_submitter_test.cc
index 3eabd60..5e4b0ff 100644
--- a/third_party/blink/renderer/platform/graphics/video_frame_submitter_test.cc
+++ b/third_party/blink/renderer/platform/graphics/video_frame_submitter_test.cc
@@ -54,10 +54,6 @@
       : binding_(this, std::move(*request)) {}
   ~MockCompositorFrameSink() override = default;
 
-  const viz::CompositorFrame& last_submitted_compositor_frame() const {
-    return last_submitted_compositor_frame_;
-  }
-
   MOCK_METHOD1(SetNeedsBeginFrame, void(bool));
   MOCK_METHOD0(SetWantsAnimateOnlyBeginFrames, void());
 
@@ -68,8 +64,7 @@
       viz::CompositorFrame frame,
       viz::mojom::blink::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time) override {
-    last_submitted_compositor_frame_ = std::move(frame);
-    DoSubmitCompositorFrame(id, &last_submitted_compositor_frame_);
+    DoSubmitCompositorFrame(id, &frame);
   }
   void SubmitCompositorFrameSync(
       const viz::LocalSurfaceId& id,
@@ -77,8 +72,7 @@
       viz::mojom::blink::HitTestRegionListPtr hit_test_region_list,
       uint64_t submit_time,
       const SubmitCompositorFrameSyncCallback callback) override {
-    last_submitted_compositor_frame_ = std::move(frame);
-    DoSubmitCompositorFrame(id, &last_submitted_compositor_frame_);
+    DoSubmitCompositorFrame(id, &frame);
   }
 
   MOCK_METHOD1(DidNotProduceFrame, void(const viz::BeginFrameAck&));
@@ -99,8 +93,6 @@
  private:
   mojo::Binding<viz::mojom::blink::CompositorFrameSink> binding_;
 
-  viz::CompositorFrame last_submitted_compositor_frame_;
-
   DISALLOW_COPY_AND_ASSIGN(MockCompositorFrameSink);
 };
 
@@ -810,7 +802,7 @@
     EXPECT_EQ(11u, local_surface_id.parent_sequence_number());
     EXPECT_EQ(viz::kInitialChildSequenceNumber,
               local_surface_id.child_sequence_number());
-    EXPECT_EQ(gfx::Size(8, 8), submitter_->frame_size_);
+    EXPECT_EQ(gfx::Rect(8, 8), submitter_->frame_size_);
   }
 
   EXPECT_CALL(*video_frame_provider_, GetCurrentFrame())
@@ -835,112 +827,7 @@
     EXPECT_EQ(11u, local_surface_id.parent_sequence_number());
     EXPECT_EQ(viz::kInitialChildSequenceNumber + 1,
               local_surface_id.child_sequence_number());
-    EXPECT_EQ(gfx::Size(2, 2), submitter_->frame_size_);
-  }
-}
-
-TEST_F(VideoFrameSubmitterTest, VideoRotationOutputRect) {
-  MakeSubmitter();
-  EXPECT_CALL(*sink_, SetNeedsBeginFrame(true));
-  submitter_->StartRendering();
-  EXPECT_TRUE(submitter_->Rendering());
-
-  gfx::Size coded_size(1280, 720);
-  gfx::Size natural_size(1280, 1024);
-  gfx::Size rotated_size(1024, 1280);
-
-  {
-    submitter_->SetRotation(media::VideoRotation::VIDEO_ROTATION_90);
-
-    EXPECT_CALL(*video_frame_provider_, UpdateCurrentFrame(_, _))
-        .WillOnce(Return(true));
-    EXPECT_CALL(*video_frame_provider_, GetCurrentFrame())
-        .WillOnce(Return(media::VideoFrame::CreateFrame(
-            media::PIXEL_FORMAT_YV12, coded_size, gfx::Rect(coded_size),
-            natural_size, base::TimeDelta())));
-    EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _));
-    EXPECT_CALL(*video_frame_provider_, PutCurrentFrame());
-    EXPECT_CALL(*resource_provider_,
-                AppendQuads(_, _, media::VideoRotation::VIDEO_ROTATION_90, _));
-    EXPECT_CALL(*resource_provider_, PrepareSendToParent(_, _));
-    EXPECT_CALL(*resource_provider_, ReleaseFrameResources());
-
-    viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs(
-        BEGINFRAME_FROM_HERE, now_src_.get());
-    submitter_->OnBeginFrame(args);
-    scoped_task_environment_.RunUntilIdle();
-
-    EXPECT_EQ(sink_->last_submitted_compositor_frame().size_in_pixels(),
-              rotated_size);
-
-    submitter_->DidReceiveFrame();
-
-    WTF::Vector<viz::ReturnedResource> resources;
-    EXPECT_CALL(*resource_provider_, ReceiveReturnsFromParent(_));
-    submitter_->DidReceiveCompositorFrameAck(resources);
-  }
-
-  {
-    submitter_->SetRotation(media::VideoRotation::VIDEO_ROTATION_180);
-
-    EXPECT_CALL(*video_frame_provider_, UpdateCurrentFrame(_, _))
-        .WillOnce(Return(true));
-    EXPECT_CALL(*video_frame_provider_, GetCurrentFrame())
-        .WillOnce(Return(media::VideoFrame::CreateFrame(
-            media::PIXEL_FORMAT_YV12, coded_size, gfx::Rect(coded_size),
-            natural_size, base::TimeDelta())));
-    EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _));
-    EXPECT_CALL(*video_frame_provider_, PutCurrentFrame());
-    EXPECT_CALL(*resource_provider_,
-                AppendQuads(_, _, media::VideoRotation::VIDEO_ROTATION_180, _));
-    EXPECT_CALL(*resource_provider_, PrepareSendToParent(_, _));
-    EXPECT_CALL(*resource_provider_, ReleaseFrameResources());
-
-    viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs(
-        BEGINFRAME_FROM_HERE, now_src_.get());
-    submitter_->OnBeginFrame(args);
-    scoped_task_environment_.RunUntilIdle();
-
-    // 180 deg rotation has same size.
-    EXPECT_EQ(sink_->last_submitted_compositor_frame().size_in_pixels(),
-              natural_size);
-
-    submitter_->DidReceiveFrame();
-
-    WTF::Vector<viz::ReturnedResource> resources;
-    EXPECT_CALL(*resource_provider_, ReceiveReturnsFromParent(_));
-    submitter_->DidReceiveCompositorFrameAck(resources);
-  }
-
-  {
-    submitter_->SetRotation(media::VideoRotation::VIDEO_ROTATION_270);
-
-    EXPECT_CALL(*video_frame_provider_, UpdateCurrentFrame(_, _))
-        .WillOnce(Return(true));
-    EXPECT_CALL(*video_frame_provider_, GetCurrentFrame())
-        .WillOnce(Return(media::VideoFrame::CreateFrame(
-            media::PIXEL_FORMAT_YV12, coded_size, gfx::Rect(coded_size),
-            natural_size, base::TimeDelta())));
-    EXPECT_CALL(*sink_, DoSubmitCompositorFrame(_, _));
-    EXPECT_CALL(*video_frame_provider_, PutCurrentFrame());
-    EXPECT_CALL(*resource_provider_,
-                AppendQuads(_, _, media::VideoRotation::VIDEO_ROTATION_270, _));
-    EXPECT_CALL(*resource_provider_, PrepareSendToParent(_, _));
-    EXPECT_CALL(*resource_provider_, ReleaseFrameResources());
-
-    viz::BeginFrameArgs args = begin_frame_source_->CreateBeginFrameArgs(
-        BEGINFRAME_FROM_HERE, now_src_.get());
-    submitter_->OnBeginFrame(args);
-    scoped_task_environment_.RunUntilIdle();
-
-    EXPECT_EQ(sink_->last_submitted_compositor_frame().size_in_pixels(),
-              rotated_size);
-
-    submitter_->DidReceiveFrame();
-
-    WTF::Vector<viz::ReturnedResource> resources;
-    EXPECT_CALL(*resource_provider_, ReceiveReturnsFromParent(_));
-    submitter_->DidReceiveCompositorFrameAck(resources);
+    EXPECT_EQ(gfx::Rect(2, 2), submitter_->frame_size_);
   }
 }