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脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++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经过多年的迭代发展,已经克服了自身短板,如今

在前些年的智能手机市场,LCD显示面板占据了主导地位。这可能是由于LCD面板拥有更便宜的定价,同时还更容易进行操作。但随着厂商们对创新的追求和技术的发展,AMOLED面板的成本已不再是厂商的困扰。因为即使成本更高,AMOLED面板仍能为厂商带来其他附加价值。2019年的一份调查报告曾提到,从2020年到2024年,全球大型LCD面板出货量或将以0.8%的负复合年增长率下降。这种下降是由显示器、平板电脑、笔记本电脑和9英寸及以上显示器的需求饱和导致的。到2024年,中小型LCD面板的出货量将达到1

还记得几天前发布的新款iPadPro吗?一个最大的升级就是从LCD面板(MiniLED背光)换成OLED。也就在今天,小雷还看到了一则消息,那就是韩联社说LGDisplay正在加速出售旗下最后一座LCD面板厂:宣告全面转向OLED。作为第三代显示技术,OLED取代LCD的趋势其实早就开始了,很早之前就有人扬言,OLED将会取代LCD成为绝对的主流。不过最能体现LCD荣光逝去、OLED横扫天下的,可能还要看回我们最常使用的手机。2017年开始,以iPhoneX为代表的旗舰机迅速标配了OLED屏幕。
