rk3288 android7副屏旋转显示异常与满屏修改
Posted 红尘六欲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rk3288 android7副屏旋转显示异常与满屏修改相关的知识,希望对你有一定的参考价值。
rk3288 android7副屏旋转显示异常与满屏修改
主屏使用的是HDMI,副屏使用的lvds
主屏是HMDI转lvds 由于转接模块不支持1280x800 所以设置了hdmi输入源为1280x720 为了保证主屏正常显示 修改了framebuffer为1280x800
就是由于修改了framebuffer导致副屏显示旋转异常,一定不要设置persist.sys.framebuffer.main这个参数
persist.sys.framebuffer.main=1280x800
查找rk资料了解到,双屏同显时,副屏显示是在主屏显示的基础上进行的缩放,双屏异显时,副屏显示是按照副屏实际物理分辨率重新进行了UI绘制
下面的patch能解决副屏旋转后显示异常及同显时不满屏的问题
修改patch如下
---
device/rockchip/rk3288/system.prop | 13 ++++++-----
.../server/display/LocalDisplayAdapter.java | 20 ++++++++++++++++-
.../com/android/server/display/LogicalDisplay.java | 26 +++++++++++++++++++++-
.../services/surfaceflinger/DisplayDevice.cpp | 3 ++-
4 files changed, 53 insertions(+), 9 deletions(-)
diff --git a/device/rockchip/rk3288/system.prop b/device/rockchip/rk3288/system.prop
index 358f0fd..f34c991 100755
--- a/device/rockchip/rk3288/system.prop
+++ b/device/rockchip/rk3288/system.prop
@@ -48,9 +48,10 @@ ro.rk.displayd.enable=false
sys.hwc.device.primary=HDMI-A
sys.hwc.device.extend=LVDS
-persist.sys.framebuffer.main=1280x800
-persist.sys.resolution.main=1920x1080
-persist.sys.resolution.aux=480x1280
-ro.same.orientation=false
-#ro.orientation.einit=0
-ro.rotation.external=false
+#persist.sys.framebuffer.main=1280x800
+#persist.sys.resolution.main=1280x720
+#persist.sys.resolution.aux=480x1280
+#ro.same.orientation=false
+#ro.rotation.external=false
+ro.orientation.einit=270
+persist.sys.rotation.efull=true
diff --git a/frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 68be9ce..be69c7e 100755
--- a/frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/frameworks/base/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -422,8 +422,26 @@ final class LocalDisplayAdapter extends DisplayAdapter {
// For demonstration purposes, allow rotation of the external display.
// In the future we might allow the user to configure this directly.
- if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
+ /*if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
mInfo.rotation = Surface.ROTATION_270;
+ }*/
+ String rotation = SystemProperties.get("ro.orientation.einit","0");
+ switch(Integer.valueOf(rotation)) {
+ case 0:
+ mInfo.rotation = Surface.ROTATION_0;
+ break;
+ case 90:
+ mInfo.rotation = Surface.ROTATION_90;
+ break;
+ case 180:
+ mInfo.rotation = Surface.ROTATION_180;
+ break;
+ case 270:
+ mInfo.rotation = Surface.ROTATION_270;
+ break;
+ default:
+ mInfo.rotation = Surface.ROTATION_0;
+ break;
}
// For demonstration purposes, allow rotation of the external display
diff --git a/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java b/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
index 287a25a..acc4c9f 100755
--- a/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/frameworks/base/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -26,7 +26,7 @@ import java.util.Arrays;
import java.util.List;
import libcore.util.Objects;
-
+import android.os.SystemProperties;
@@ -137,6 +137,22 @@ final class LogicalDisplay {
mInfo.physicalXDpi = mOverrideDisplayInfo.physicalXDpi;
mInfo.physicalYDpi = mOverrideDisplayInfo.physicalYDpi;
}
+ if(mDisplayId!=Display.DEFAULT_DISPLAY){
+ String rotation = SystemProperties.get("ro.orientation.einit","0");
+ int rot = Integer.valueOf(rotation)/90;
+ if(rot%2!=0) {
+ mInfo.appWidth = mPrimaryDisplayDeviceInfo.height;
+ mInfo.appHeight = mPrimaryDisplayDeviceInfo.width;
+ mInfo.logicalWidth = mPrimaryDisplayDeviceInfo.height;
+ mInfo.logicalHeight=mPrimaryDisplayDeviceInfo.width;
+ }else{
+ mInfo.appWidth = mPrimaryDisplayDeviceInfo.width;
+ mInfo.appHeight = mPrimaryDisplayDeviceInfo.height;
+ mInfo.logicalWidth = mPrimaryDisplayDeviceInfo.width;
+ mInfo.logicalHeight=mPrimaryDisplayDeviceInfo.height;
+ }
+ }
+
}
return mInfo;
}
@@ -349,6 +365,14 @@ final class LogicalDisplay {
mTempDisplayRect.right += mDisplayOffsetX;
mTempDisplayRect.top += mDisplayOffsetY;
mTempDisplayRect.bottom += mDisplayOffsetY;
+ if(SystemProperties.getBoolean("persist.sys.rotation.efull", false)) {
+ if(device.getDisplayDeviceInfoLocked().type!=Display.TYPE_BUILT_IN){
+ mTempDisplayRect.left=0;
+ mTempDisplayRect.right=physWidth;
+ mTempDisplayRect.top=0;
+ mTempDisplayRect.bottom=physHeight;
+ }
+ }
device.setProjectionInTransactionLocked(orientation, mTempLayerStackRect, mTempDisplayRect);
}
diff --git a/frameworks/native/services/surfaceflinger/DisplayDevice.cpp b/frameworks/native/services/surfaceflinger/DisplayDevice.cpp
index 0c63381..68f93ce 100755
--- a/frameworks/native/services/surfaceflinger/DisplayDevice.cpp
+++ b/frameworks/native/services/surfaceflinger/DisplayDevice.cpp
@@ -538,6 +538,7 @@ void DisplayDevice::setProjection(int orientation,
#endif
#if !RK_VR & RK_HW_ROTATION
+#if 0
bool isHdmiScreen = mType == DisplayDevice::DISPLAY_EXTERNAL;
if (isHdmiScreen) {
int eInitOrientation = 0;
@@ -599,7 +600,7 @@ void DisplayDevice::setProjection(int orientation,
}
ALOGV("update frame [%d,%d]",frame.getWidth(),frame.getHeight());
}
-
+#endif
if (mType == DisplayDevice::DISPLAY_PRIMARY) {
mClientOrientation = orientation;
orientation = (mHardwareOrientation + orientation) % 4;
--
2.7.4
参考资料
以上是关于rk3288 android7副屏旋转显示异常与满屏修改的主要内容,如果未能解决你的问题,请参考以下文章