PAD默认屏幕显示方向是竖着显示,改成默认横屏显示需要将屏幕的默认显示方向顺时针旋转90度.
android显示系统的核心是surfaceflinger,它为所有的应用程序提供显示服务,它能够将各种应用程序的2D,3D surface进行组合,合并最终得到的一个main surface数据送入framebuffer,显示的翻转和旋转也是由surfaceflinger完成的,我们大致分析下surfaceflinger的旋转流程:
1.surfaceflinger启动后首先进行初始化操作,设置surfaceflinger的相关属性并创建了DisplayDevice对象
void SurfaceFlinger::init() {
...
#ifdef MTK_AOSP_ENHANCEMENT
// make sure 3D init success
if (mEGLContext == EGL_NO_CONTEXT)
{
ALOGE("FATAL: couldn't create EGLContext");
delete mHwc;
eglTerminate(mEGLDisplay);
exit(0);
}
// init properties setting first
setMTKProperties(); //设置MTK相关属性
#else
LOG_ALWAYS_FATAL_IF(mEGLContext == EGL_NO_CONTEXT,
"couldn't create EGLContext");
#endif
...
// initialize our non-virtual displays
for (size_t i=0 ; iisConnected(i) || type==DisplayDevice::DISPLAY_PRIMARY) {
// All non-virtual displays are currently considered secure.
bool isSecure = true;
createBuiltinDisplayLocked(type);
wptoken = mBuiltinDisplays[i];
spproducer;
spconsumer;
BufferQueue::createBufferQueue(&producer, &consumer,
new GraphicBufferAlloc());
spfbs = new FramebufferSurface(*mHwc, i,
consumer);
int32_t hwcId = allocateHwcDisplayId(type);
sphw = new DisplayDevice(this, //初始化各个DisplayDevice对象
type, hwcId, mHwc->getFormat(hwcId), isSecure, token,
fbs, producer,
mRenderEn