溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android中關(guān)于如何限制上層應(yīng)用只在特定區(qū)間畫圖

發(fā)布時間:2020-08-05 19:32:20 來源:網(wǎng)絡(luò) 閱讀:516 作者:GaoNeil 欄目:移動開發(fā)

Android中關(guān)于如何限制上層應(yīng)用只在特定區(qū)間畫圖

有時候?qū)τ趍tk開發(fā)中有一個很特殊的需求。
那就是mtk的手機平臺不支持橫屏模式的display panel屏幕,只支持豎屏。
mtk的平板平臺才支持橫屏掃描的屏幕。這個可能是mtk兩個部門之間的策略規(guī)定。
其他rockchip、高通平臺沒有這種限制。
如果你需要用mtk手機平臺開發(fā)橫屏掃描的屏幕(注意不是豎屏橫著用,這是另外一種情況,豎屏橫著用,顯然mtk手機平臺直接就支持)。

于是,你的解決辦法是,在驅(qū)動側(cè),把480240的橫屏,驅(qū)動側(cè)給mtk的mipi信息,故意改為480640的豎屏,但是屏幕其實是橫屏,所以clock故意按照480*640分辨率來計算。再做微調(diào)clock頻率,保證顯示是正確的。

然后你看到屏幕顯示只是480640的上面部分,因為屏幕實際只有480240。
而你返回給android上層的分辨率是480640的。
為此,為了讓上層應(yīng)用只知道屏幕只有480240,那么你需要修改如下地方:

對應(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;

對于mtk Android O(android 8.1)代碼:修改
frameworks/native/services/surfaceflinger/DisplayHardware/HWC2.cpp
Display::loadConfig()函數(shù)中,
.setWidth(480)
.setHeight(240)

說白了,就是上層surfaceflinger獲取display hardware屬性時,故意告訴他另外的分辨率480*240,這樣surfaceflinger在畫圖時,就按照這個目標(biāo)display分辨率就行render merge了。從而實現(xiàn)顯示效果。

另外需要注意mtk的kernel配置項defconfig文件中的:
CONFIG_MTK_LCM_PHYSICAL_ROTATION_HW=y
如果配置了這個,那么硬件就會旋轉(zhuǎn)180,從而顯示framebuffer的下半部份,而且是180度旋轉(zhuǎn)的。導(dǎo)致的結(jié)果是,你在surfaceflinger只畫了framebuffer的上半部,而硬件上顯示下版本,導(dǎo)致圖像顯示是framebuffer的下半部的隨機數(shù)據(jù)。所以不要設(shè)置CONFIG_MTK_LCM_PHYSICAL_ROTATION_HW=y

另外也要注意mtk的ProjectConfig.mk文件的 CONFIG_MTK_LCM_PHYSICAL_ROTATION="0"

另外我的相關(guān)培訓(xùn)視頻請看:
歡迎觀看我發(fā)布的各個課程: https://edu.51cto.com/lecturer/8896847.html
內(nèi)含免費視頻。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI