hwc: split display: Fix left split default value if not published
If the left split is not published by the driver then the default should
be even split. This was missing from the configuration in utils. This is
already taken care of in framebuffer configuration and mdp composition.
Change-Id: I3db44481fd791809146752ddff56420dcbe89fb4
diff --git a/libhwcomposer/hwc_fbupdate.cpp b/libhwcomposer/hwc_fbupdate.cpp
index 7ba2ddc..ba3b5d2 100644
--- a/libhwcomposer/hwc_fbupdate.cpp
+++ b/libhwcomposer/hwc_fbupdate.cpp
@@ -288,16 +288,8 @@
hwc_rect_t displayFrame = layer->displayFrame;
const float xres = ctx->dpyAttr[mDpy].xres;
- //Default even split for all displays with high res
- float lSplit = xres / 2;
- if(mDpy == HWC_DISPLAY_PRIMARY &&
- qdutils::MDPVersion::getInstance().getLeftSplit()) {
- //Override if split published by driver for primary
- lSplit = qdutils::MDPVersion::getInstance().getLeftSplit();
- }
-
+ const int lSplit = getLeftSplit(ctx, mDpy);
const float lSplitRatio = lSplit / xres;
-
const float lCropWidth =
(sourceCrop.right - sourceCrop.left) * lSplitRatio;
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 462cc6d..69e81db 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -980,13 +980,8 @@
int mixer) {
int pipesNeeded = 0;
const int xres = ctx->dpyAttr[mDpy].xres;
- //Default even split for all displays with high res
- int lSplit = xres / 2;
- if(mDpy == HWC_DISPLAY_PRIMARY &&
- qdutils::MDPVersion::getInstance().getLeftSplit()) {
- //Override if split published by driver for primary
- lSplit = qdutils::MDPVersion::getInstance().getLeftSplit();
- }
+
+ const int lSplit = getLeftSplit(ctx, mDpy);
for(int i = 0; i < mCurrentFrame.layerCount; ++i) {
if(!mCurrentFrame.isFBComposed[i]) {
@@ -1028,13 +1023,7 @@
MdpPipeInfoHighRes& pipe_info,
ePipeType type) {
const int xres = ctx->dpyAttr[mDpy].xres;
- //Default even split for all displays with high res
- int lSplit = xres / 2;
- if(mDpy == HWC_DISPLAY_PRIMARY &&
- qdutils::MDPVersion::getInstance().getLeftSplit()) {
- //Override if split published by driver for primary
- lSplit = qdutils::MDPVersion::getInstance().getLeftSplit();
- }
+ const int lSplit = getLeftSplit(ctx, mDpy);
hwc_rect_t dst = layer->displayFrame;
pipe_info.lIndex = ovutils::OV_INVALID;
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 93017c5..1c881cb 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -1090,7 +1090,8 @@
hwc_rect_t tmp_cropL, tmp_dstL;
hwc_rect_t tmp_cropR, tmp_dstR;
- const int lSplit = qdutils::MDPVersion::getInstance().getLeftSplit();
+ const int lSplit = getLeftSplit(ctx, dpy);
+
if(lDest != OV_INVALID) {
tmp_cropL = crop;
tmp_dstL = dst;
@@ -1166,6 +1167,16 @@
return true;
}
+int getLeftSplit(hwc_context_t *ctx, const int& dpy) {
+ //Default even split for all displays with high res
+ int lSplit = ctx->dpyAttr[dpy].xres / 2;
+ if(dpy == HWC_DISPLAY_PRIMARY &&
+ qdutils::MDPVersion::getInstance().getLeftSplit()) {
+ //Override if split published by driver for primary
+ lSplit = qdutils::MDPVersion::getInstance().getLeftSplit();
+ }
+ return lSplit;
+}
void BwcPM::setBwc(hwc_context_t *ctx, const hwc_rect_t& crop,
const hwc_rect_t& dst, const int& transform,
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index cf359ee..e214aee 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -225,6 +225,8 @@
//but the variety of scenarios is too high to warrant that.
bool canUseRotator(hwc_context_t *ctx);
+int getLeftSplit(hwc_context_t *ctx, const int& dpy);
+
// Inline utility functions
static inline bool isSkipLayer(const hwc_layer_1_t* l) {
return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER)));