drm_hwcomposer: DrmPlane: More atomic commit cleanup
A few rearrangements to reduce LoC and increase readability.
Signed-off-by: Roman Stratiienko <roman.o.stratiienko@globallogic.com>
diff --git a/drm/DrmPlane.cpp b/drm/DrmPlane.cpp
index 78b650c..d143a88 100644
--- a/drm/DrmPlane.cpp
+++ b/drm/DrmPlane.cpp
@@ -279,34 +279,31 @@
}) != std::end(formats_);
}
+static uint64_t ToDrmRotation(DrmHwcTransform transform) {
+ uint64_t rotation = 0;
+ if (transform & DrmHwcTransform::kFlipH)
+ rotation |= DRM_MODE_REFLECT_X;
+ if (transform & DrmHwcTransform::kFlipV)
+ rotation |= DRM_MODE_REFLECT_Y;
+ if (transform & DrmHwcTransform::kRotate90)
+ rotation |= DRM_MODE_ROTATE_90;
+ else if (transform & DrmHwcTransform::kRotate180)
+ rotation |= DRM_MODE_ROTATE_180;
+ else if (transform & DrmHwcTransform::kRotate270)
+ rotation |= DRM_MODE_ROTATE_270;
+ else
+ rotation |= DRM_MODE_ROTATE_0;
+
+ return rotation;
+}
+
auto DrmPlane::AtomicSetState(drmModeAtomicReq &pset, DrmHwcLayer &layer,
uint32_t zpos, uint32_t crtc_id) -> int {
- uint32_t fb_id = UINT32_MAX;
- int fence_fd = -1;
- hwc_rect_t display_frame;
- hwc_frect_t source_crop;
- uint64_t rotation = 0;
- uint64_t alpha = 0xFFFF;
-
if (!layer.FbIdHandle) {
ALOGE("Expected a valid framebuffer for pset");
return -EINVAL;
}
- fb_id = layer.FbIdHandle->GetFbId();
- fence_fd = layer.acquire_fence.Get();
- display_frame = layer.display_frame;
- source_crop = layer.source_crop;
- alpha = layer.alpha;
-
- // Disable the plane if there's no framebuffer
- if (fb_id == UINT32_MAX) {
- if (!AtomicDisablePlane(pset)) {
- return -EINVAL;
- }
- return 0;
- }
-
if (zpos_property_ && !zpos_property_.is_immutable()) {
uint64_t min_zpos = 0;
@@ -318,55 +315,37 @@
}
}
- rotation = 0;
- if (layer.transform & DrmHwcTransform::kFlipH)
- rotation |= DRM_MODE_REFLECT_X;
- if (layer.transform & DrmHwcTransform::kFlipV)
- rotation |= DRM_MODE_REFLECT_Y;
- if (layer.transform & DrmHwcTransform::kRotate90)
- rotation |= DRM_MODE_ROTATE_90;
- else if (layer.transform & DrmHwcTransform::kRotate180)
- rotation |= DRM_MODE_ROTATE_180;
- else if (layer.transform & DrmHwcTransform::kRotate270)
- rotation |= DRM_MODE_ROTATE_270;
- else
- rotation |= DRM_MODE_ROTATE_0;
-
- if (fence_fd >= 0) {
- if (!in_fence_fd_property_.AtomicSet(pset, fence_fd)) {
- return -EINVAL;
- }
- }
-
- if (!crtc_property_.AtomicSet(pset, crtc_id) ||
- !fb_property_.AtomicSet(pset, fb_id) ||
- !crtc_x_property_.AtomicSet(pset, display_frame.left) ||
- !crtc_y_property_.AtomicSet(pset, display_frame.top) ||
- !crtc_w_property_.AtomicSet(pset,
- display_frame.right - display_frame.left) ||
- !crtc_h_property_.AtomicSet(pset,
- display_frame.bottom - display_frame.top) ||
- !src_x_property_.AtomicSet(pset, (int)(source_crop.left) << 16) ||
- !src_y_property_.AtomicSet(pset, (int)(source_crop.top) << 16) ||
- !src_w_property_.AtomicSet(pset,
- (int)(source_crop.right - source_crop.left)
- << 16) ||
- !src_h_property_.AtomicSet(pset,
- (int)(source_crop.bottom - source_crop.top)
- << 16)) {
+ if (layer.acquire_fence &&
+ !in_fence_fd_property_.AtomicSet(pset, layer.acquire_fence.Get())) {
return -EINVAL;
}
- if (rotation_property_) {
- if (!rotation_property_.AtomicSet(pset, rotation)) {
- return -EINVAL;
- }
+ if (!crtc_property_.AtomicSet(pset, crtc_id) ||
+ !fb_property_.AtomicSet(pset, layer.FbIdHandle->GetFbId()) ||
+ !crtc_x_property_.AtomicSet(pset, layer.display_frame.left) ||
+ !crtc_y_property_.AtomicSet(pset, layer.display_frame.top) ||
+ !crtc_w_property_.AtomicSet(pset, layer.display_frame.right -
+ layer.display_frame.left) ||
+ !crtc_h_property_.AtomicSet(pset, layer.display_frame.bottom -
+ layer.display_frame.top) ||
+ !src_x_property_.AtomicSet(pset, (int)(layer.source_crop.left) << 16) ||
+ !src_y_property_.AtomicSet(pset, (int)(layer.source_crop.top) << 16) ||
+ !src_w_property_.AtomicSet(pset, (int)(layer.source_crop.right -
+ layer.source_crop.left)
+ << 16) ||
+ !src_h_property_.AtomicSet(pset, (int)(layer.source_crop.bottom -
+ layer.source_crop.top)
+ << 16)) {
+ return -EINVAL;
}
- if (alpha_property_) {
- if (!alpha_property_.AtomicSet(pset, alpha)) {
- return -EINVAL;
- }
+ if (rotation_property_ &&
+ !rotation_property_.AtomicSet(pset, ToDrmRotation(layer.transform))) {
+ return -EINVAL;
+ }
+
+ if (alpha_property_ && !alpha_property_.AtomicSet(pset, layer.alpha)) {
+ return -EINVAL;
}
if (blending_enum_map_.count(layer.blending) != 0 &&