FB驱动
一 数据通路选择
layer 直通输出,支持多个fb叠加,默认选择
mixer,配置多2帧缓存,当直通输出, 画面显示存在裂屏、花屏、lcd underrun等异常可以使用这个,只是rmem内存计算需要多2帧开销
rmem计算方式,以分辨率800 ×1280的屏幕为例 :
消耗内存:800×1280×4×2 =8192000 (lcd的内存是按ARGB的32位申请的,因此需要乘4)
- rotator , 屏幕旋转,支持角度选择,多两帧缓存,rmem内存计算需要512对齐
rmem计算方式,以分辨率800 ×1280的屏幕为例 :
宽×4即 800×4 需要被512整除 , 实际消耗内存:512×7×1280×2=9175040
二 fb配置
强制使用默认层级配置,可以使fb0在最下面,按顺序叠加
fb0,1支持nv12和rgb格式,fb2,3仅支持rgb
视频解码直通显示,fb可以配置成0帧
内存计算,如上图fb只用1帧,屏幕分辨率800 ×1280:
rmem消耗内存:800×1280×4×1=4096000(lcd的内存是按ARGB的32位申请的,因此需要乘4)
三 内存
若不使用快启,配置rmem大小,计算上数据通路消耗的内存(layer直通不消耗)+ fb配置需要的内存
使用快启,配置lcd_mem大小
配置方法参考预留内存
四 缩放与裁剪
4.1 ui显示
可以通过自定义fb尺寸,控制ui显示
720×1280是数据源大小,360,640是显示在屏幕位置图片左上角点x,y偏移,180×320是缩放后大小
4.2 视频流解码后的裁剪与缩放
以h264解码例子libhardware2/src/cmds/h264_direct_decode_main.c为例
.xres, .yres控制裁剪后的分辨率,.y,.uv控制裁剪后左上角起始位置
layer_cfg.scaling.xres, layer_cfg.scaling.yres 控制缩放后的分辨率
计算先裁剪后缩放