Skip to main content

FB驱动

一 数据通路选择

1

  • layer 直通输出,支持多个fb叠加,默认选择

  • mixer,配置多2帧缓存,当直通输出, 画面显示存在裂屏、花屏、lcd underrun等异常可以使用这个,只是rmem内存计算需要多2帧开销

2

rmem计算方式,以分辨率800 ×1280的屏幕为例 :

消耗内存:800×1280×4×2 =8192000 (lcd的内存是按ARGB的32位申请的,因此需要乘4)

  • rotator , 屏幕旋转,支持角度选择,多两帧缓存,rmem内存计算需要512对齐

3

rmem计算方式,以分辨率800 ×1280的屏幕为例 :

宽×4即 800×4 需要被512整除 , 实际消耗内存:512×7×1280×2=9175040

二 fb配置

4

强制使用默认层级配置,可以使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显示

5

720×1280是数据源大小,360,640是显示在屏幕位置图片左上角点x,y偏移,180×320是缩放后大小

4.2 视频流解码后的裁剪与缩放

以h264解码例子libhardware2/src/cmds/h264_direct_decode_main.c为例

6

.xres, .yres控制裁剪后的分辨率,.y,.uv控制裁剪后左上角起始位置

layer_cfg.scaling.xres, layer_cfg.scaling.yres 控制缩放后的分辨率

计算先裁剪后缩放