1:HIFB-管理图形层叠加的模块,Framebuffer-帧缓冲区,Vicap-video capture,ARGB8888-透明度-8b R-8b G-8b B-8b
surface-总线输入数据通道-V0视频层-G0图形层;
2:视频输出单元包括:设备层(基础,按照配置输出图形) 视频层 图形层 ,sdk使用vo来控制设备层;
3:3A算法-AF自动对焦-AE自动曝光-AWB自动白平衡;
4:图形层刷新类型:
1:0buff-节约内存,但用户可以看到绘制的过程;
2:1buff-要内存,会有锯齿;
3:2buff-内存占用大,但效果好;
5:回调函数-通过函数指针进行调用的函数;
6:res的资源像素为300*150 bmp格式 24位位图;
7:HDMI的始终来源于VO,因此调用时要先使能VO,再调用HDMI接口,在配置音频;
8:通过操作显存映射的虚拟内存以实现显示字符,图片;
9:mmap函数,将文件映射到内寸,使得文件中的每一个字节与内存对应
——————————————————————————————————————
下面分析源码:mpp/sample/hifb
1:首先函数启动提示选择启动的模式即-图形层的刷新模式
2:接着进入VO配置,传址 直接写进结构体
3:这个函数是官方提供的简单版的VO配置函数,可以快速配置,默认使用HDMI接口
4:接着开始选择图形层刷新模式,这里着重分析case1,传入的是VO配置结构体
5:
step1首先初始化一块内存区间用做物理显存;
step2进行MPP和VB的初始化,因为VO由MPP来控制,这里用到的API具体参考HIMPP手册的系统控制章节
step3:开启VO设备,这里需注意,当在其他系统step3是可以选择的;
主要进行了VO设备的申明 设置并启动VO设备 开启HDMI或MIPI设备。
step4:开启HIFB设备这里开启了两个线程一个负责buff一个负责绘制图形
下面进入绘制图形的函数,这里采用TDE进行绘制,这里类似于easyx中的图形绘制,以像素点为单位,左上角即为原点,x=0,y=0
Step 1. open framebuffer device overlay 0
Step 2. set the screen original position
Step 3. get the variable screen information
Step 4. modify the variable screen info
Step 5. set the variable screen information
Step 6. get the fix screen information
Step 7. map the physical video memory for user use
接下来通过改变透明度来显示红色矩形块(大致是这样,还未完全明白,后期会继续学习)
然后进行位图的绘制,以单个bit为单位进行绘制,首先分配显存,这里是无buff模式,仅用于平移模式
接着是绘制线,这里采用填充比特的模式来绘制,双for循环,外层为线的宽度,内层为长度。
最后以文件输出的方式输出图片。
效果展示: