有時(shí)候?qū)τ趍tk開發(fā)中有一個(gè)很特殊的需求。
那就是mtk的手機(jī)平臺(tái)不支持橫屏模式的display panel屏幕,只支持豎屏。
mtk的平板平臺(tái)才支持橫屏掃描的屏幕。這個(gè)可能是mtk兩個(gè)部門之間的策略規(guī)定。
其他rockchip、高通平臺(tái)沒有這種限制。
如果你需要用mtk手機(jī)平臺(tái)開發(fā)橫屏掃描的屏幕(注意不是豎屏橫著用,這是另外一種情況,豎屏橫著用,顯然mtk手機(jī)平臺(tái)直接就支持)。
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司,提供網(wǎng)站制作、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);可快速的進(jìn)行網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,是專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
于是,你的解決辦法是,在驅(qū)動(dòng)側(cè),把480240的橫屏,驅(qū)動(dòng)側(cè)給mtk的mipi信息,故意改為480640的豎屏,但是屏幕其實(shí)是橫屏,所以clock故意按照480*640分辨率來(lái)計(jì)算。再做微調(diào)clock頻率,保證顯示是正確的。
然后你看到屏幕顯示只是480640的上面部分,因?yàn)槠聊粚?shí)際只有480240。
而你返回給android上層的分辨率是480640的。
為此,為了讓上層應(yīng)用只知道屏幕只有480240,那么你需要修改如下地方:
對(duì)應(yīng)mtk Android L:修改:
frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp
queryDisplayProperties()函數(shù)的
case HWC_DISPLAY_WIDTH 設(shè)置的config.width = 480;
case HWC_DISPLAY_HEIGHT 設(shè)置的config.height = 240;
對(duì)于mtk Android O(android 8.1)代碼:修改
frameworks/native/services/surfaceflinger/DisplayHardware/HWC2.cpp
Display::loadConfig()函數(shù)中,
.setWidth(480)
.setHeight(240)
說(shuō)白了,就是上層surfaceflinger獲取display hardware屬性時(shí),故意告訴他另外的分辨率480*240,這樣surfaceflinger在畫圖時(shí),就按照這個(gè)目標(biāo)display分辨率就行render merge了。從而實(shí)現(xiàn)顯示效果。
另外需要注意mtk的kernel配置項(xiàng)defconfig文件中的:
CONFIG_MTK_LCM_PHYSICAL_ROTATION_HW=y
如果配置了這個(gè),那么硬件就會(huì)旋轉(zhuǎn)180,從而顯示framebuffer的下半部份,而且是180度旋轉(zhuǎn)的。導(dǎo)致的結(jié)果是,你在surfaceflinger只畫了framebuffer的上半部,而硬件上顯示下版本,導(dǎo)致圖像顯示是framebuffer的下半部的隨機(jī)數(shù)據(jù)。所以不要設(shè)置CONFIG_MTK_LCM_PHYSICAL_ROTATION_HW=y
另外也要注意mtk的ProjectConfig.mk文件的 CONFIG_MTK_LCM_PHYSICAL_ROTATION="0"
另外我的相關(guān)培訓(xùn)視頻請(qǐng)看:
歡迎觀看我發(fā)布的各個(gè)課程: https://edu.51cto.com/lecturer/8896847.html
內(nèi)含免費(fèi)視頻。