lcd debug notes 2(qcom and orise)
1 polarity inversion 面板极性变换方式 可使用的common电极驱动方式 Frame inversion 固定与变动 Row inversion 固定与变动 Column inversion 只能使用固定的common电极电压 Dot inversion 只能使用固定的common电极电压 面板极性变换方式 Flicker的现象 Cr
1 polarity inversion
面板极性变换方式 可使用的common电极驱动方式
Frame inversion 固定与变动
Row inversion 固定与变动
Column inversion 只能使用固定的common电极电压
Dot inversion 只能使用固定的common电极电压
面板极性变换方式 Flicker的现象 Crosstalk(串扰; 串音)的现象
Frame inversion 明显 垂直与水平方向都易发生
Row inversion 不明显 水平方向容易发生
Columninversion 不明显 垂直方向容易发生
Dot inversion 几乎没有 不易发生
Current Orise IC is supported for Column Inversion and Dot Inversion (0xC0B4h Panel Driving Mode)
2 The method of showing layer (qcom)
2.1 Insert the following patch
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp index ae7bb95..3f1a657 100644 --- a/libhwcomposer/hwc.cpp +++ b/libhwcomposer/hwc.cpp @@ -331,11 +331,121 @@ static int hwc_query(struct hwc_composer_device_1* dev, } +inline void getHalPixelFormatStr(int format, char pixelformatstr[]) +{ + if (!pixelformatstr) + return; + + switch(format) { + case HAL_PIXEL_FORMAT_RGBA_8888: + strcpy(pixelformatstr, "RGBA_8888"); + break; + case HAL_PIXEL_FORMAT_RGBX_8888: + strcpy(pixelformatstr, "RGBX_8888"); + break; + case HAL_PIXEL_FORMAT_RGB_888: + strcpy(pixelformatstr, "RGB_888"); + break; + case HAL_PIXEL_FORMAT_RGB_565: + strcpy(pixelformatstr, "RGB_565"); + break; + case HAL_PIXEL_FORMAT_BGRA_8888: + strcpy(pixelformatstr, "BGRA_8888"); + break; + case HAL_PIXEL_FORMAT_RGBA_5551: + strcpy(pixelformatstr, "RGBA_5551"); + break; + case HAL_PIXEL_FORMAT_RGBA_4444: + strcpy(pixelformatstr, "RGBA_4444"); + break; + case HAL_PIXEL_FORMAT_YV12: + strcpy(pixelformatstr, "YV12"); + break; + case HAL_PIXEL_FORMAT_YCbCr_422_SP: + strcpy(pixelformatstr, "YCbCr_422_SP_NV16"); + break; + case HAL_PIXEL_FORMAT_YCrCb_420_SP: + strcpy(pixelformatstr, "YCrCb_420_SP_NV21"); + break; + case HAL_PIXEL_FORMAT_YCbCr_422_I: + strcpy(pixelformatstr, "YCbCr_422_I_YUY2"); + break; + case HAL_PIXEL_FORMAT_NV12_ENCODEABLE: + strcpy(pixelformatstr, "NV12_ENCODEABLE"); + break; + case HAL_PIXEL_FORMAT_YCbCr_420_SP_TILED: + strcpy(pixelformatstr, "YCbCr_420_SP_TILED_TILE_4x2"); + break; + case HAL_PIXEL_FORMAT_YCbCr_420_SP: + strcpy(pixelformatstr, "YCbCr_420_SP"); + break; + case HAL_PIXEL_FORMAT_YCrCb_420_SP_ADRENO: + strcpy(pixelformatstr, "YCrCb_420_SP_ADRENO"); + break; + case HAL_PIXEL_FORMAT_YCrCb_422_SP: + strcpy(pixelformatstr, "YCrCb_422_SP"); + break; + case HAL_PIXEL_FORMAT_R_8: + strcpy(pixelformatstr, "R_8"); + break; + case HAL_PIXEL_FORMAT_RG_88: + strcpy(pixelformatstr, "RG_88"); + break; + case HAL_PIXEL_FORMAT_INTERLACE: + strcpy(pixelformatstr, "INTERLACE"); + break; + default: + sprintf(pixelformatstr, "Unknown0x%X", format); + break; + } +} + +void dump_layers(int layercount, size_t layerIndex, hwc_layer_1_t hwLayers[]) +{ + hwc_layer_1_t *layer = &hwLayers[layerIndex]; + hwc_rect_t sourceCrop = layer->sourceCrop; + hwc_rect_t displayFrame = layer->displayFrame; + private_handle_t *hnd = (private_handle_t *)layer->handle; + char *layer_format=new char[50]; + getHalPixelFormatStr(hnd->format,layer_format); + int composition_type =layer->compositionType; + char sfdumpfile_name[256]; + + sprintf(sfdumpfile_name, "/data/layerdump/dump%03d_layer%d_%dx%d_%s_comp%d.raw", + layercount, layerIndex, hnd->width, hnd->height, + layer_format,composition_type); + FILE* fp = fopen(sfdumpfile_name, "w+"); + if (fp != NULL) { + fwrite((void*)hnd->base, hnd->size, 1, fp); + fclose(fp); + } + +} + static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) { ATRACE_CALL(); int ret = 0; const int dpy = HWC_DISPLAY_PRIMARY; if (LIKELY(list) && ctx->dpyAttr[dpy].isActive) { + + char property_fb[PROPERTY_VALUE_MAX]; + static int layer_count =0; + int count_limit=0; + if (property_get("debug.sf.dump", property_fb, NULL) > 0) { + if(atoi(property_fb) > 0) { + count_limit=atoi(property_fb) ; + if (0 == mkdir("/data/layerdump", 0777)) + layer_count=0; + if(layer_count<count_limit for int i="0;i<list-">numHwLayers;i++) + dump_layers(layer_count, i, list->hwLayers); + layer_count ++ ; + } + } + } + + + uint32_t last = list->numHwLayers - 1; hwc_layer_1_t *fbLayer = &list->hwLayers[last]; int fd = -1; //FenceFD from the Copybit(valid in async mode) </count_limit>
2.2 Issue the following command
# setprop debug.sf.dump 100
The dump data is in /data/layerdump folder.
2.3 Issue the following command
# adb pull <remote> <local></local></remote>
2.4 Download the tool: Irfanview and PlugIns
The newest version of Irfanview is 4.36
2.5 Open the corresponding files, such as *.raw
Please notes that the pixels need to be matched to oringinal size. Then the pictures can be shown, as follows:
dump035_layer0_544x960_RGBX_8888_comp1.raw
// layer0 means layer 0; RGBX X means no alpha
dump034_layer1_544x960_RGBA_8888_comp1.raw
dump035_layer2_416x608_RGBA_8888_comp1.raw
// layer2 means layer 2; comp1 means mdpcomp
dump033_layer3_544x960_RGBA_8888_comp1.raw
dump035_layer4_544x960_RGBA_8888_comp3.raw // layer4 means layer 4; comp3 means fb_target
3 popup menu jitter(抖动; 颤动)
According to the methods in div 2, we can capture all layers from hwc.cpp. The root cause is related to the progress of animation. Because of the animation, the actual size of popup menu is variable and the alpha value isn't 0xff until the animation is shown completely. But mdp RGB pipe can't handle this scenario smoothly which causes the edge of popup menu jitter. So if this scenario appears, mdp composition should be disabled.
The animation can be disabled via the following steps:
Settings -> Developer options ->
Window animation scale (off, .5x, 1x, 2x, 5x, 10x)
Transition animation scale
Animator duration scale
So the animation progress can be adjusted if you need to do this. Meanwhile we can disable hw overlay via the option of Disable HW overlays.
4 overlay process
4.1 mdp4_overlay_set (key point)
a. Get pipe from request (struct mdp_overlay ), choose corresponding pipe type;
Where the function checks if the request is valid or not, such as width, height, downscale ratio(1/8), upscale ratio(20(mdp version > 4.1, otherwise 8)) and so on.
b. Return pipe index;
c. Calc mdp clock for current frame and bandwidth;
d. Done.
5 Ghost Shadow
This issue is caused by VCOM. For orise 9605, we can adjust 0xD900h(VCOMDC: VCOM voltage setting, 0x39:-1)
影像残留主要是PANEL Pixel上的正负电压值不对称,解决方案是调整VCOM(寄存器D900)。如果改Panel的翻转方式,也可以改善。如果LCM上有GVDD、NGVDD的测试点,可以量一下这两个点的电压,理论上这两个电压值是一致的!
If we adjust the mode of inversion to dot inversion, the power will increase about 10mA, althrough this way can fix this issue too. I don't think it is a good method.
6 DTYPE_DCS_WRITE (long, short)
#define DTYPE_DCS_LWRITE 0x39 /* long write */ #define DTYPE_DCS_WRITE 0x05 /* short write, 0 parameter */ #define DTYPE_DCS_WRITE1 0x15 /* short write, 1 parameter */ #define DTYPE_DCS_READ 0x06 /* read */
With regard to opening lcd or closing lcd(sleep out/in), it is proper to use DTYPE_DCS_WRITE. If the commands have one parameter, it is proper to use DTYPE_DCS_WRITE1. If the commands have more than one parameter, it is proper to use DTYPE_DCS_LWRITE.

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

ltps是低溫多晶矽螢幕,lcd是液晶顯示螢幕;ltps是多晶矽技術的一個分支,每個獨立像素都可以主動控制,主要由螢光管、導光板、偏光板、濾光板、玻璃基板、配套膜、液晶材料等組成,而lcd則是透過電場控制液晶分子對背光源的調節來實現顯示,主要由LCD面板、背光模組、電路板組成。

剛接觸springboot項目,(1)發現斷點debug調試無效,很鬱悶,網路搜尋解決方法。看到的都是一些很複雜的方案,說是遠端調試,還要另外開埠號。這和傳統的項目不一樣,因此覺得沒必要。所以經過摸索,發現有一種更簡單的方式,步驟如下:在pom檔案的plugin部分加上一段設定:false這樣就ok了;(2)關於SpringBoot專案中報錯說web.xml檔案ismissing的問題,因為傳統的web專案都是要web.xml檔案的,但是SpringBoot專案是可以不需要web.xml文件

螢幕技術迭代是手機廠商「開捲」的核心賽道,現在的OLED螢幕捲亮度、捲功耗、捲色彩、捲護眼,整體素質已經來到相當出色的水平。然而即便在OLED技術日臻成熟的當下,依然有相當一部分用戶堅定地選擇配備LCD螢幕的手機,究其原因很大程度上可能歸結於LCD螢幕在護眼方面的獨特優勢。為什麼LCD比較護眼?想說清楚為什麼很多「LCD」黨一看OLED螢幕就眼睛酸痛流眼淚,我們還得簡單講講螢幕顯示原理。我們可以把螢幕顯示的畫面簡單理解為無數個像素點共同組成的圖案,OLED

6月27日消息,根據研究機構Omdia最新發布的報告,2024年第一季度,全球智慧型手機有機發光二極管(OLED)面板出貨量歷史上首次超過了液晶顯示器(LCD)。報告顯示,2023年智慧型手機顯示器年出貨量達到14.5億片,年增5%,而到了2024年上半年,預計出貨量將達到7.15億片,年增9%。其中,主動矩陣有機發光二極體(AMOLED)螢幕出貨量在2024年第一季增至1.82億片,較去年同期成長39%,相較之下,薄膜電晶體液晶顯示器(TFTLCD)出貨量降至1.72億片,年減10%。 Om

近日,vivo旗下的一款平板電腦「iPA2475」已成功通過了國家的3C品質認證,預計被命名為iQOOPad2。然而,在最新一輪的爆料中,情況似乎出現了新的變化。 4月2日,CNMO注意到,有數位部落客透露iQOO的旗艦平板將命名為Pad2Pro,而非原先的iQOOPad2。部落客也透露,iQOOPad2Pro即將發布。基於部落客的分析,iQOOPad2Pro將搭載強大的天璣9300處理器,為使用者帶來卓越的效能體驗。同時,它還將配備一塊3.1K分辨率、144Hz刷新率、13英寸的LCD大屏,無論是觀看

2月6日消息,部落客數位閒聊站透露,接下來登場的驍龍8係以及驍龍7系列手機都是OLED螢幕,LCD螢幕機型搭載的是驍龍6系列平台,高性能LCD螢幕手機目前沒有。去年,iQOO和Redmi都推出了高性能LCD屏手機,分別是iQOOZ8和RedmiNote12TPro,最新爆料顯示,iQOOZ9不再採用LCD屏,而是轉向1.5KOLED屏。眾所皆知,LCD用戶之所以鍾情於LCD,主要原因是LCD螢幕採用全域DC調光方案,沒有頻閃,長期觀看相對更舒適。不過OLED經過多年的迭代發展,已經克服了自身短板,如今

還記得幾天前發布的新款iPadPro嗎?一個最大的升級就是從LCD面板(MiniLED背光)換成OLED。也就在今天,小雷還看到了一條消息,那就是韓聯社說LGDisplay正在加速出售旗下最後一座LCD面板廠:宣告全面轉向OLED。作為第三代顯示技術,OLED取代LCD的趨勢其實早就開始了,很早之前就有人揚言,OLED將會取代LCD成為絕對的主流。不過最能體現LCD榮光逝去、OLED橫掃天下的,可能還要看回我們最常使用的手機。 2017年開始,以iPhoneX為代表的旗艦機迅速標配了OLED螢幕。

在前幾年的智慧型手機市場,LCD顯示面板佔據了主導地位。這可能是由於LCD面板擁有更便宜的定價,同時也更容易進行操作。但隨著廠商們對創新的追求與技術的發展,AMOLED面板的成本已不再是廠商的困擾。因為即使成本較高,AMOLED面板仍能為廠商帶來其他附加價值。 2019年的調查報告曾提到,從2020年到2024年,全球大型LCD面板出貨量或將以0.8%的負複合年增長率下降。這種下降是由顯示器、平板電腦、筆記型電腦和9英寸及以上顯示器的需求飽和所導致的。到2024年,中小型LCD面板的出貨量將達到1
