RV1126的VI模块讲解

发布于:2025-05-24 ⋅ 阅读:(15) ⋅ 点赞:(0)

一.本章节介绍:

本章节主要是介绍视觉项目的VI视频输入模块的讲解,VI视频模块是所有摄像头数据的入口。VI模块的配置在源文件rkmedia_module_function.cpp里面。

二.VI模块思维导图

上面思维导图主要是描述VI模块设置的大致流程,首先对RV1126_VI_CONFIG结构体进行参数设置,然后调用rkmedia_vi_init对VI模块进行设置和使能,设置完成后再把VI的模块ID放到VI数组里面(vi_containers)。

三.VI模块代码的截图

下图就是整个VI模块配置的具体参数,这里使用设置的结构体是RV1126_VI_CONFIG。RV1126_VI_CONFIG里面主要包含了VI_CHN_ATTR_S结构体进行设置。

idVI模块的id号,用于初始化和使能VI模块

pcVideoNode: 摄像头的视频节点,这里默认是rkispp_scale0

u32BufCnt缓冲区计数,默认是3

u32WidthVI模块分辨率宽度1920

u32HeightVI模块分辨率高度1080

enPixFmt图像格式默认是NV12,这里填的是IMAGE_TYPE_NV12

enBufTypeVI模块捕捉视频的类型,这里默认填写MMAP

enWorkModeVI工作模式,这里写的是VI_WORK_MODE_NORMAL

填写完上述的配置参数后,就会调用rkmedia_vi_init这个自己封装的函数,这个函数主要是实现VI模块的初始化和使能的具体操作,具体看下图

rkmedia_vi_init这个自定义函数里面,关键是对VI进行初始化和使能,它分别调用了RK_MPI_VI_SetChnAttr的API对VI模块的属性进行初始化,然后再调用RK_MPI_VI_EnableChn对其使能。也就是这个rkmedia_vi_init的函数里封装了RK_MPI_VI_SetChnAttr、RK_MPI_VI_EnableChn两个API,我们的代码实战时直接使用这两个API的。

设置完VI模块后,就要把VI模块的ID号设置到容器里面,调用自己封装的函数是set_vi_container

set_vi_container的具体实现是:

在这个自定义的函数里面,最主要是把VI的ID号存放在VI模块数组里面(vi_containers),具体结构如下图:

RV1126_ALL_CONTAINER结构体里面包含了四个模块的数组存储分别是VI模块(vi_contaianers)、AI模块(ai_containers)、VENC模块(venc_containers)、AENC模块(aenc_containers)。这四个模块容器就是分别存储,四个模块的ID号,让其能够更加方便的管理起来。


网站公告

今日签到

点亮在社区的每一天
去签到