海思MPP媒体处理软件sample源码刨析学习(VIO)

可以看到海思sample文件夹下提供了好多的例程,那么就来分析一下比较常用的VIO sample
在这里插入图片描述
进入VIO文件,可以看到VIO的main函数
在这里插入图片描述
在smp文件夹下面有sample_vio.c,里面主要是sample_vio_main.c的一些接口函数。sample_vio.c中的通用函数又向common文件夹下的相关函数调用
在这里插入图片描述
在这里插入图片描述
先进入main函数,可以看到VIO提供的示例功能还是挺多的,并且支持HDMI与BT1120这两种输出接口
(可能有刚入门的小伙伴对BT1120不是很清楚,我也没查明白)
在这里插入图片描述
首先判断执行程序传入的参数是否正确,不正确和需要帮助说明则打印说明信息。
参数传入正确则获取当前芯片的ID
在这里插入图片描述
上面设置了相应信号处理函数,SIGINT由Interrupt Key产生,通常是CTRL+C或者Delete,发送给所有ForeGround Group的进程。SIGTERM请求终止进程,Kill命令缺省发送。

当捕获到异常信号后触发的自定义函数如下,主要是对信号的重新定义以及系统退出资源的释放。
在这里插入图片描述
SAMPLE_VIO_MsgInit()与SAMPLE_VIO_MsgExit()分别为程序初始化与退出的桩函数,用户可以进行添加内容。
在这里插入图片描述
接下来就是选择相应的功能,下面重点解析SAMPLE_VIO_ViOnlineVpssOnlineRoute
在这里插入图片描述
!](https://img-blog.csdnimg.cn/20210119105136958.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6eF9udW1iZXJvbmU=,size_16,color_FFFFFF,t_70)
在这里插入图片描述

因为很多sample需要调用同样的配置,所以海思将一些通用的接口都放在SAMPLE_COMM_XXX接口中,这里Sensor配置是使用I2C接口,Hi3519AV100的VI设备最多支持5个,不同的芯片型号支持的不一样,可以具体阅读《HiMPP V4.0 媒体处理软件开发参考》
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到结构体是一层套着一层,还是比较复杂的。
因为VPSS的工作模式设置为在线模式,可以简单的认为VPSS在线模式由VI_PROC将数据流直接发送给VPSS进行处理
在这里插入图片描述
根据不同Sensor类型的图片大小分配缓存,这里配置VI写出RAW的缓存块为4块,YUV缓存块10块
在这里插入图片描述
在启动各个模块之前必须需要对vb初始化和MPP系统初始化
在这里插入图片描述
在这里插入图片描述
启动VI模块需要先启动MIPI,接口根据hi_mipi驱动进行控制,根据VI的配置进行VI模块的参数设置以及创建,还需要启动ISP,ISP这块又涉及到许多内容,包括调试图像、可以使用自定义3A库开发等等。
在这里插入图片描述
根据VPSS的配置创建group并启动,设置并使能VPSS,这里因为配置为VI与VPSS在线模式所以不需要进行VI与VPSS的绑定。
在这里插入图片描述
配置编码器并启动,这里接口可以根据配置切换为不同编码器,并绑定VPSS与VENC,自动将VPSS处理完的数据发送到VENC中进行编码。
在这里插入图片描述
最后配置VO并启动。
在这里插入图片描述
可以修改VO的输出接口时序为你需要的分辨率。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
绑定VPSS与VO自动将VPSS处理完的数据进行输出。
在这里插入图片描述
创建线程,通过Venc的fd判断是否有数据流编码完成进行保存到文件中
在这里插入图片描述
不同异常进行资源释放的处理
在这里插入图片描述
参考资料:解析sample例程学习官方API:解析VIO Sample例程

猜你喜欢

转载自blog.csdn.net/wzx_numberone/article/details/112766227