Index: ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
diff --git a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
index 6ca6f6b45f933d69aa3ca748ce2f5f0c9cd21bc7..672f29dc1d98840c6461b936d7f6adb6d99e611a 100644 |
--- a/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
+++ b/ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc |
@@ -19,6 +19,35 @@ const char* kSrcXPropName = "SRC_X"; |
const char* kSrcYPropName = "SRC_Y"; |
const char* kSrcWPropName = "SRC_W"; |
const char* kSrcHPropName = "SRC_H"; |
+const char* kRotationPropName = "rotation"; |
+ |
+const int kDrmRotate0 = 0; |
+const int kDrmRotate90 = 1; |
+const int kDrmRotate180 = 4; |
+const int kDrmRotate270 = 8; |
+const int kDrmReflectX = 16; |
+const int kDrmReflectY = 32; |
+ |
+uint32_t OverlayTransformToDrmRotationPropertyValue( |
+ gfx::OverlayTransform transform) { |
+ switch (transform) { |
+ case gfx::OVERLAY_TRANSFORM_NONE: |
+ return kDrmRotate0; |
+ case gfx::OVERLAY_TRANSFORM_FLIP_HORIZONTAL: |
+ return kDrmReflectX; |
+ case gfx::OVERLAY_TRANSFORM_FLIP_VERTICAL: |
+ return kDrmReflectY; |
+ case gfx::OVERLAY_TRANSFORM_ROTATE_90: |
+ return kDrmRotate90; |
+ case gfx::OVERLAY_TRANSFORM_ROTATE_180: |
+ return kDrmRotate180; |
+ case gfx::OVERLAY_TRANSFORM_ROTATE_270: |
+ return kDrmRotate270; |
+ default: |
+ NOTREACHED(); |
+ } |
+ return kDrmRotate0; |
+} |
} // namespace |
@@ -51,11 +80,13 @@ HardwareDisplayPlaneAtomic::HardwareDisplayPlaneAtomic(uint32_t plane_id, |
HardwareDisplayPlaneAtomic::~HardwareDisplayPlaneAtomic() { |
} |
-bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
- uint32_t crtc_id, |
- uint32_t framebuffer, |
- const gfx::Rect& crtc_rect, |
- const gfx::Rect& src_rect) { |
+bool HardwareDisplayPlaneAtomic::SetPlaneData( |
+ drmModeAtomicReq* property_set, |
+ uint32_t crtc_id, |
+ uint32_t framebuffer, |
+ const gfx::Rect& crtc_rect, |
+ const gfx::Rect& src_rect, |
+ const gfx::OverlayTransform transform) { |
int plane_set_succeeded = |
drmModeAtomicAddProperty(property_set, plane_id_, crtc_prop_.id, |
crtc_id) && |
@@ -77,6 +108,9 @@ bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
src_rect.width()) && |
drmModeAtomicAddProperty(property_set, plane_id_, src_h_prop_.id, |
src_rect.height()); |
+ drmModeAtomicAddProperty( |
spang
2017/04/11 00:07:44
This one doesn't need to be checked?
Daniele Castagna
2017/04/11 00:25:43
I initially thought this would do a syscall and ch
|
+ property_set, plane_id_, rotation_prop_.id, |
+ OverlayTransformToDrmRotationPropertyValue(transform)); |
if (!plane_set_succeeded) { |
PLOG(ERROR) << "Failed to set plane data"; |
return false; |
@@ -87,16 +121,18 @@ bool HardwareDisplayPlaneAtomic::SetPlaneData(drmModeAtomicReq* property_set, |
bool HardwareDisplayPlaneAtomic::InitializeProperties( |
DrmDevice* drm, |
const ScopedDrmObjectPropertyPtr& plane_props) { |
- bool props_init = crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
- fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
- crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
- crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
- crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
- crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
- src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
- src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
- src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
- src_h_prop_.Initialize(drm, kSrcHPropName, plane_props); |
+ bool props_init = |
+ crtc_prop_.Initialize(drm, kCrtcPropName, plane_props) && |
+ fb_prop_.Initialize(drm, kFbPropName, plane_props) && |
+ crtc_x_prop_.Initialize(drm, kCrtcXPropName, plane_props) && |
+ crtc_y_prop_.Initialize(drm, kCrtcYPropName, plane_props) && |
+ crtc_w_prop_.Initialize(drm, kCrtcWPropName, plane_props) && |
+ crtc_h_prop_.Initialize(drm, kCrtcHPropName, plane_props) && |
+ src_x_prop_.Initialize(drm, kSrcXPropName, plane_props) && |
+ src_y_prop_.Initialize(drm, kSrcYPropName, plane_props) && |
+ src_w_prop_.Initialize(drm, kSrcWPropName, plane_props) && |
+ src_h_prop_.Initialize(drm, kSrcHPropName, plane_props) && |
+ rotation_prop_.Initialize(drm, kRotationPropName, plane_props); |
if (!props_init) { |
LOG(ERROR) << "Unable to get plane properties."; |