1. 程式人生 > >Android中關於如何限制上層應用只在特定區間畫圖

Android中關於如何限制上層應用只在特定區間畫圖

https roi surf cpp isp 有時 per eth 橫屏

Android中關於如何限制上層應用只在特定區間畫圖

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

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

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

對應mtk Android L:修改:
frameworks/native/services/surfaceflinger/DisplayHardware/HWComposer.cpp
queryDisplayProperties()函數的
case HWC_DISPLAY_WIDTH 設置的config.width = 480;
case HWC_DISPLAY_HEIGHT 設置的config.height = 240;

對於mtk Android O(android 8.1)代碼:修改

frameworks/native/services/surfaceflinger/DisplayHardware/HWC2.cpp
Display::loadConfig()函數中,
.setWidth(480)
.setHeight(240)

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

另外我的相關培訓視頻請看:
歡迎觀看我發布的各個課程: https://edu.51cto.com/lecturer/8896847.html

內含免費視頻。

Android中關於如何限制上層應用只在特定區間畫圖