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

Unified Diff: ui/ozone/platform/drm/gpu/hardware_display_plane_atomic.cc

Issue 2789363004: ozone: Add KMS "rotation" property support. (Closed)
Patch Set: Created 3 years, 8 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: 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.";

Powered by Google App Engine
This is Rietveld 408576698