海思vio模块学习
一、vio系统的初始化
1、根据压缩模式配置vb
2、配置完vb后,启动系统ss_mpi_sys_init
3、启动之后,设置vi和vpss的模式
1、ot_vi_vpss_mode_type
这里会决定vi和vpss的使用,例如使用vi不使用vpss,或者都使用。
在vio模式中,这个必须要首先得到一个确认
但是具体的设置在vb缓冲池后,必须在ss_mpi_sys_init后面进行设置。
2、SEG压缩
### 在海思中海思SEG压缩核心原理
- 压缩方式 :基于4x4像素块的智能有损压缩
- 压缩比 :典型值1.5:1~2:1
- 适用场景 :YUV420/NV12格式的VI输出或VPSS输入
3、配置海思的vio一般先配缓冲池
注:缓冲池的配置和压缩模式的存在关系的
①先配置vb_cfg中的缓冲池的最大个数max_pool_cnt,例子如下。
// 创建两个独立内存池
ot_vb_cfg cfg = {
.max_pool_cnt = 2, // 允许创建2个独立池
.pools = {
[0] = { .blk_size = 4MB, .blk_cnt = 3 }, // VI专用
[1] = { .blk_size = 2MB, .blk_cnt = 5 } // VENC专用
}
};②根据压缩模式配置vb_cfg中对应压缩模式的缓冲块大小,根据YUV海思raw配置缓冲块的个数。vb->common_pool[0].blk_size = cal_cfg.vb_size。vb->common_pool[0].blk_cnt = yuv_cnt。
③设置vb属性
此时我们配置好了vb_cfg,接着我们只要用海思的接口ss_mpi_vb_set_cfg设置下去即可。
④设置vb补充属性
使用ss_mpi_vb_set_supplyment_cfg进行vb属性的补充
⑤vb的建立,系统的启动
ss_mpi_vb_init, ss_mpi_sys_init
二、配置默认的vi(VI过程比较了解,不再单独赘述)
三、启动默认的vi
四、绑定vi和vpss
五、配置默认vpss结构体
配置ot_vpss_grp_attr和ot_vpss_chn_attr两个结构体中的信息。
六、启动vpss
①创建VPSS Group
ss_mpi_vpss_create_grp
②启动VPSS Group
ss_mpi_vpss_start_grp
③设置物理通道属性
ss_mpi_vpss_set_chn_attr,这里会设置对应group对应chn的属性
④设置VPSS通道FMU模式
用ss_mpi_vpss_set_chn_fmu_mode进行设置group中chn0的FMU模式,这个模式可以控制VPSS对应chn的开启,能否缩放,能否镜像能否3dnr等信息。
⑤启用VPSS通道
配置完通道属性和模式之后,就可以用ss_mpi_vpss_enable_chn启动VPSS的通道了
七、启动编码和vo
略