1.VI模块本章节主要是介绍视觉项目的VI视频输入模块的讲解VI视频模块是所有摄像头数据的入口。VI模块的配置在源文件rkmedia_module_function.cpp里面。2.VI模块的思维导图上面思维导图主要是描述VI模块设置的大致流程首先对RV1126_VI_CONFIG结构体进行参数设置然后调用rkmedia_vi_init对VI模块进行设置和使能设置完成后再把VI的模块ID放到VI数组里面(vi_containers)。3.VI模块代码的截图下图就是整个VI模块配置的具体参数这里使用设置的结构体是RV1126_VI_CONFIG。RV1126_VI_CONFIG里面主要包含了ID和VI_CHN_ATTR_S结构体设置。这种分离设计主要有以下目的解耦将容器和实际的VI设备分开管理便于扩展和维护灵活性一个VI设备可能对应多个容器或者一个容器可能管理多个VI设备资源管理通过容器来统一管理和访问VI资源idVI模块的id号用于初始化和使能VI模块pcVideoNode:摄像头的视频节点这里默认是rkispp_scale0u32BufCnt缓冲区计数默认是3u32WidthVI模块分辨率宽度1920u32HeightVI模块分辨率高度1080enPixFmt图像格式默认是NV12这里填的是IMAGE_TYPE_NV12enBufTypeVI模块捕捉视频的类型这里默认填写MMAPenWorkModeVI工作模式这里写的是VI_WORK_MODE_NORMAL填写完上述的配置参数后就会调用rkmedia_vi_init这个自己封装的函数这个函数主要是实现VI模块的初始化和使能的具体操作具体看下图rkmedia_vi_init这个自定义函数里面关键是对VI进行初始化和使能它分别调用了RK_MPI_VI_SetChnAttr的API对VI模块的属性进行初始化然后再调用RK_MPI_VI_EnableChn对其使能。设置完VI模块后就要把VI模块的ID号设置到容器里面调用自己封装的函数是set_vi_containeridVI容器的标识符用于区分不同的容器实例vi_id关联到前面初始化的VI设备ID值就是之前设置的0set_vi_container的具体实现是在这个自定义的函数里面最主要是把VI的ID号存放在VI模块数组里面(vi_containers)具体结构如下图RV1126_ALL_CONTAINER结构体里面包含了四个模块的数组存储分别是VI模块(vi_contaianers)、AI模块(ai_containers)、VENC模块(venc_containers)、AENC模块(aenc_containers)。这四个模块容器就是分别存储四个模块的ID号让其能够更加方便的管理起来。