目錄
1  polarity inversion
2  The method of showing layer (qcom)
3 popup menu jitter(抖动; 颤动)
4  overlay process
5  Ghost Shadow
6  DTYPE_DCS_WRITE (long, short)
首頁 資料庫 mysql教程 lcd debug notes 2(qcom and orise)

lcd debug notes 2(qcom and orise)

Jun 07, 2016 pm 03:08 PM
and debug lcd notes

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


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.


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

ltps和lcd是什麼螢幕 ltps和lcd是什麼螢幕 Sep 01, 2022 pm 04:14 PM

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

SpringBoot專案設定斷點debug調試無效怎麼解決 SpringBoot專案設定斷點debug調試無效怎麼解決 May 11, 2023 am 10:49 AM

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

都2024年了為何還有用戶心念LCD螢幕 原因揭開 都2024年了為何還有用戶心念LCD螢幕 原因揭開 Jul 24, 2024 pm 08:17 PM

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

LCD終究大勢已去:全球手機OLED面板出貨量首超LCD! LCD終究大勢已去:全球手機OLED面板出貨量首超LCD! Jun 27, 2024 pm 06:46 PM

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

曝 iQOO 旗艦平板命名為 Pad2 Pro 配 13 吋螢幕 即將發布 曝 iQOO 旗艦平板命名為 Pad2 Pro 配 13 吋螢幕 即將發布 Apr 03, 2024 am 08:31 AM

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

高效能LCD手機成絕唱!廠商集體選擇OLED 高效能LCD手機成絕唱!廠商集體選擇OLED Feb 07, 2024 pm 01:06 PM

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

LCD手機的消逝,全靠OLED的爭氣 LCD手機的消逝,全靠OLED的爭氣 May 30, 2024 am 10:26 AM

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

lcd和oled屏哪個好「詳細介紹:LCD和OLED購買建議」 lcd和oled屏哪個好「詳細介紹:LCD和OLED購買建議」 Feb 07, 2024 pm 05:36 PM

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

See all articles