一、显示驱动基础
1、深入学习display2模块的函数和数据结构。
2、制作图层挂在盒子做多个图层的显示,以及图层做alpha blending、colorkey等效果。
问题:1、bin文件生成、USB挂载问题。
3、修改图层并处理解决方法:
方案一:制作.bin图片、修改cfg参数并正常显示遇到参数修改问题。
方案二:直接写framebuffer的内容并烧写到盒子。
对比:方案二更适合做图层显示处理,制作图片没有意义,直接填充FB做相关处理。
4、掌握计算屏幕上点像素的坐标的方法。
5、修改layer的demo,用自己的算法实现显示多块图层在屏幕任意位置。
6、做出两个图层来做透明化处理。问题:1、计算像素点的坐标。
7、图层demo
(1)改变图层内容小测试:方案一:改变图层内容显示图层。
方案二:改变图层属性改变图层显示的内容。
(2)图层显示小测试内容包括:1)显示一张全景图片(修改图层内容)
2)显示单个模块来显示 任意位置(修改内容)
3)显示任意四块颜色区域(修改内容显示)
4)显示任意四块区域(修改图层属性显示)
5)显示任意位置的区域(修改图层属性)
(3)学会三原色的表示方法,左上角坐标点的计算方法。
(4)填充内容的方法:改变图层内容,计算左上角坐标并加上偏移量,填充到相应的地址(RGB)改变图层属性来显示图层://通过改变裁减区域来表示需要显示的内容;
//内存中裁减区域的左上角位置
//内存裁减区域的大小(即宽高)
显示区://显示区域的位置,左上角位置
//显示区域的宽高(在屏幕上的)
(5)深入理解线宽(字节对齐后的字节数量)的意义,并掌握计算方法。
8、坐标计算方法
Linestride = B * W
Base.y = BASE + B*W*y (线宽用于行首个有效数据的寻址)
Base.x = BASE + B*x
Base.y.x = BASE + B*W*y +B*x = BASE +B*(W*y +x)
Base.(y+y偏移量).x = Base.y.x+B*W*y偏移量
9、显示驱动到输出之间的关系
二、各个属性含义
Source_size:描述FB的大小(宽高)
Source_cope:描述需要截取的layer在FB中的大小
Screen_size:显示设备的分辨率的大小即屏幕大小(宽高)
Screen_window:截取的layer内容放置在需要显示的屏幕的中间的区域。
改变图层属性的方法:(高32位是整数位、低32位小数位)
内存区:
//通过改变裁减区域来表示需要显示的内容 //内存中裁减区域的左上角位置
config.info.fb.crop.x = ((long long)(src_width/4)) << 32;
config.info.fb.crop.y = ((long long)(src_height/2)) << 32;
//内存裁减区域的大小(即宽高)
config.info.fb.crop.width = ((long long)(src_width/4)) << 32;
config.info.fb.crop.height = ((long long)(src_height/4)) << 32;
显示区:
//通过改变图层属性来改变相应的显示区域 //显示区域的位置,左上角位置
config.info.screen_win.x = fb_para->output_width;
config.info.screen_win.y = fb_para->output_height;
//显示区域的宽高(在屏幕上的)
config.info.screen_win.width = (0 == fb_para->output_width)? src_width :(fb_para->output_width/2);
config.info.screen_win.height = (0 == fb_para->output_height)? src_height :(fb_para->output_height/2);