diff options
author | 2020-08-10 18:33:24 +0000 | |
---|---|---|
committer | 2020-08-10 18:33:24 +0000 | |
commit | de7a38f44ba8397a0ce38d00ffe12518f837e7ce (patch) | |
tree | c8a979ee828287b5aa6dcad1e9d238f3f19cb109 /services/surfaceflinger/DisplayRenderArea.cpp | |
parent | 772bb8f14c633f53dab83299516d704927f83a6d (diff) | |
parent | c6ad8afa768607852a1ad2c937b4687e947d6fca (diff) |
Merge "Remove rotation and use flag useIdentityTransform for screenshots."
Diffstat (limited to 'services/surfaceflinger/DisplayRenderArea.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayRenderArea.cpp | 70 |
1 files changed, 14 insertions, 56 deletions
diff --git a/services/surfaceflinger/DisplayRenderArea.cpp b/services/surfaceflinger/DisplayRenderArea.cpp index 4bae669d7c..d7157b1607 100644 --- a/services/surfaceflinger/DisplayRenderArea.cpp +++ b/services/surfaceflinger/DisplayRenderArea.cpp @@ -20,49 +20,14 @@ namespace android { namespace { -RenderArea::RotationFlags applyDeviceOrientation(RenderArea::RotationFlags rotation, +RenderArea::RotationFlags applyDeviceOrientation(bool useIdentityTransform, const DisplayDevice& display) { - uint32_t inverseRotate90 = 0; - uint32_t inverseReflect = 0; - - // Reverse the logical orientation. - ui::Rotation logicalOrientation = display.getOrientation(); - if (logicalOrientation == ui::Rotation::Rotation90) { - logicalOrientation = ui::Rotation::Rotation270; - } else if (logicalOrientation == ui::Rotation::Rotation270) { - logicalOrientation = ui::Rotation::Rotation90; + if (!useIdentityTransform) { + return RenderArea::RotationFlags::ROT_0; } - const ui::Rotation orientation = display.getPhysicalOrientation() + logicalOrientation; - - switch (orientation) { - case ui::ROTATION_0: - return rotation; - - case ui::ROTATION_90: - inverseRotate90 = ui::Transform::ROT_90; - inverseReflect = ui::Transform::ROT_180; - break; - - case ui::ROTATION_180: - inverseReflect = ui::Transform::ROT_180; - break; - - case ui::ROTATION_270: - inverseRotate90 = ui::Transform::ROT_90; - break; - } - - const uint32_t rotate90 = rotation & ui::Transform::ROT_90; - uint32_t reflect = rotation & ui::Transform::ROT_180; - - // Apply reflection for double rotation. - if (rotate90 & inverseRotate90) { - reflect = ~reflect & ui::Transform::ROT_180; - } - - return static_cast<RenderArea::RotationFlags>((rotate90 ^ inverseRotate90) | - (reflect ^ inverseReflect)); + const ui::Rotation orientation = display.getPhysicalOrientation() + display.getOrientation(); + return ui::Transform::toRotationFlags(orientation); } } // namespace @@ -70,22 +35,22 @@ RenderArea::RotationFlags applyDeviceOrientation(RenderArea::RotationFlags rotat std::unique_ptr<RenderArea> DisplayRenderArea::create(wp<const DisplayDevice> displayWeak, const Rect& sourceCrop, ui::Size reqSize, ui::Dataspace reqDataSpace, - RotationFlags rotation, + bool useIdentityTransform, bool allowSecureLayers) { if (auto display = displayWeak.promote()) { // Using new to access a private constructor. return std::unique_ptr<DisplayRenderArea>( new DisplayRenderArea(std::move(display), sourceCrop, reqSize, reqDataSpace, - rotation, allowSecureLayers)); + useIdentityTransform, allowSecureLayers)); } return nullptr; } DisplayRenderArea::DisplayRenderArea(sp<const DisplayDevice> display, const Rect& sourceCrop, ui::Size reqSize, ui::Dataspace reqDataSpace, - RotationFlags rotation, bool allowSecureLayers) + bool useIdentityTransform, bool allowSecureLayers) : RenderArea(reqSize, CaptureFill::OPAQUE, reqDataSpace, display->getViewport(), - allowSecureLayers, applyDeviceOrientation(rotation, *display)), + allowSecureLayers, applyDeviceOrientation(useIdentityTransform, *display)), mDisplay(std::move(display)), mSourceCrop(sourceCrop) {} @@ -131,18 +96,11 @@ Rect DisplayRenderArea::getSourceCrop() const { return mDisplay->getViewport(); } - // If there is a source crop provided then it is assumed that the device - // was in portrait orientation. This may not logically be true, so - // correct for the orientation error by undoing the rotation - - ui::Rotation logicalOrientation = mDisplay->getOrientation(); - if (logicalOrientation == ui::Rotation::Rotation90) { - logicalOrientation = ui::Rotation::Rotation270; - } else if (logicalOrientation == ui::Rotation::Rotation270) { - logicalOrientation = ui::Rotation::Rotation90; - } - - const auto flags = ui::Transform::toRotationFlags(logicalOrientation); + // Correct for the orientation when the screen capture request contained + // useIdentityTransform. This will cause the rotation flag to be non 0 since + // it needs to rotate based on the screen orientation to allow the screenshot + // to be taken in the ROT_0 orientation + const auto flags = getRotationFlags(); int width = mDisplay->getViewport().getWidth(); int height = mDisplay->getViewport().getHeight(); ui::Transform rotation; |