基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的内容,大家可以参考之前我写的博客:
https://www.cnblogs.com/iFrank/p/14374658.html
基于Hi3559AV100的视频采集(VDEC-VPSS-VO)整体框图设计
https://www.cnblogs.com/iFrank/p/14370575.html
基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍:
https://www.cnblogs.com/iFrank/p/14465306.html
基于Hi3559AV100的SVP(NNIE)开发整体流程 :
https://www.cnblogs.com/iFrank/p/14377668.html
基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析 :
https://www.cnblogs.com/iFrank/p/14473724.html
下面随笔将对RFCN的输入VI进行详细的分析,因为VI是整个系统的视频输入来源,弄清楚输入VI之后,当系统输入源替换为.h264、.h265视频流数据及MJPEG格式的图片时,可以灵活修改代码,例如实现.h264->VDEC->VPSS->NNIE->VGS->VO数据流输出。VI的具体代码分析如下:
涉及VI参数初始化等等代码段如下:
1 SAMPLE_COMM_VI_GetSensorInfo(pstViConfig);
2 //pstViConfig->astViInfo[0].stSnsInfo.enSnsType = SENSOR0_TYPE;
3
4 pstViConfig->s32WorkingViNum = s32ViCnt;
5
6 pstViConfig->as32WorkingViId[0] = 0;
7 pstViConfig->astViInfo[0].stSnsInfo.MipiDev = SAMPLE_COMM_VI_GetComboDevBySensor(pstViConfig->astViInfo[0].stSnsInfo.enSnsType, 0);
8 pstViConfig->astViInfo[0].stSnsInfo.s32BusId = 0;
9
10 pstViConfig->astViInfo[0].stDevInfo.ViDev = ViDev0;
11 pstViConfig->astViInfo[0].stDevInfo.enWDRMode = enWDRMode;
12
13 pstViConfig->astViInfo[0].stPipeInfo.enMastPipeMode = enMastPipeMode;
14 pstViConfig->astViInfo[0].stPipeInfo.aPipe[0] = ViPipe0;
15 pstViConfig->astViInfo[0].stPipeInfo.aPipe[1] = -1;
16 pstViConfig->astViInfo[0].stPipeInfo.aPipe[2] = -1;
17 pstViConfig->astViInfo[0].stPipeInfo.aPipe[3] = -1;
18
19 pstViConfig->astViInfo[0].stChnInfo.ViChn = ViChn;
20 pstViConfig->astViInfo[0].stChnInfo.enPixFormat = enPixFormat;
21 pstViConfig->astViInfo[0].stChnInfo.enDynamicRange = enDynamicRange;
22 pstViConfig->astViInfo[0].stChnInfo.enVideoFormat = enVideoFormat;
23 pstViConfig->astViInfo[0].stChnInfo.enCompressMode = enCompressMode;
24
25 /******************************************
26 Start vi
27 ******************************************/
28 s32Ret = SAMPLE_COMM_VI_SetParam(pstViConfig);
29 SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, END_INIT_1,
30 "Error(%#x),SAMPLE_COMM_VI_SetParam failed!\n",s32Ret);
31
32 s32Ret = SAMPLE_COMM_VI_StartVi(pstViConfig);
33 SAMPLE_CHECK_EXPR_GOTO(HI_SUCCESS != s32Ret, END_INIT_1,
34 "Error(%#x),SAMPLE_COMM_VI_StartVi failed!\n",s32Ret);
很大一部分都是对pstViConfig结构体进行初始化,配置像素格式、压缩形式等等,其中关键的两个函数为SAMPLE_COMM_VI_SetParam(pstViConfig)和SAMPLE_COMM_VI_StartVi(pstViConfig),二者具体实现见如下所示:
SAMPLE_COMM_VI_SetParam(pstViConfig)具体实现如下功能:
1 //获取 VI,VPSS 的工作模式
2 s32Ret = HI_MPI_SYS_GetVIVPSSMode(&stVIVPSSMode);
3 //设置 VI,VPSS 工作模式。
4 s32Ret = HI_MPI_SYS_SetVIVPSSMode(&stVIVPSSMode);
SAMPLE_COMM_VI_StartVi(pstViConfig)具体实现如下功能:
1 //function : init mipi
2 s32Ret = SAMPLE_COMM_VI_StartMIPI(pstViConfig);
3
4
5 //function :获取VI VPSS的工作模式并设置VI VPSS工作模式
6 s32Ret = SAMPLE_COMM_VI_SetParam(pstViConfig);
7
8
9
10 s32Ret = SAMPLE_COMM_VI_CreateVi(pstViConfig);
11 //涉及下面函数
12 SAMPLE_COMM_VI_CreateSingleVi(pstViInfo);
13 {
14 SAMPLE_COMM_VI_StartDev(pstViInfo);
15 {
16 SAMPLE_COMM_VI_GetDevAttrBySns(enSnsType, &stViDevAttr);
17 //memcpy_s(pstChnAttr, sizeof(VI_CHN_ATTR_S), &CHN_ATTR_4000x3000_420_SDR8_LINEAR, sizeof(VI_CHN_ATTR_S));
18
19 HI_MPI_VI_SetDevAttr(ViDev, &stViDevAttr);
20 //设置 VI 设备属性。基本设备属性默认了部分芯片配置,满足绝大部分的 sensor 对接要求。
21
22 HI_MPI_VI_EnableDev(ViDev);
23 //启用 VI 设备。
24 }
25
26 SAMPLE_COMM_VI_BindPipeDev(pstViInfo);////we should bind pipe,then creat pipe
27 {
28 HI_MPI_VI_SetDevBindPipe(pstViInfo->stDevInfo.ViDev, &stDevBindPipe);
29 //设置 VI 设备与物理 PIPE 的绑定关系。
30 }
31
32 SAMPLE_COMM_VI_StartViPipe(pstViInfo);
33 {
34 SAMPLE_COMM_VI_GetPipeAttrBySns(pstViInfo->stSnsInfo.enSnsType, &stPipeAttr);
35 //memcpy_s(pstPipeAttr, sizeof(VI_PIPE_ATTR_S), &PIPE_ATTR_4000x3000_RAW12_420_3DNR_RFR, sizeof(VI_PIPE_ATTR_S));
36
37 s32Ret = HI_MPI_VI_CreatePipe(ViPipe, &stPipeAttr);
38 //创建一个 VI PIPE。
39 }
40
41 SAMPLE_COMM_VI_StartViChn(pstViInfo);
42 {
43 SAMPLE_COMM_VI_GetChnAttrBySns(pstViInfo->stSnsInfo.enSnsType, &stChnAttr);
44
45 HI_MPI_VI_SetChnAttr(ViPipe, ViChn, &stChnAttr);
46 //设置 VI 通道属性。
47
48 HI_MPI_VI_EnableChn(ViPipe, ViChn);
49 //启用 VI 通道。
50
51 }
52 }
53
54
55 //此处有关ISP API接口函数的有关说明将在后面随笔介绍
56 s32Ret = SAMPLE_COMM_VI_CreateIsp(pstViConfig);
57 {
58 SAMPLE_COMM_VI_StartIsp(pstViInfo);
59 {
60 SAMPLE_COMM_ISP_GetIspAttrBySns(pstViInfo->stSnsInfo.enSnsType, &stPubAttr);
61
62 SAMPLE_COMM_ISP_Sensor_Regiter_callback(ViPipe, u32SnsId);
63
64 SAMPLE_COMM_ISP_BindSns(ViPipe, u32SnsId, pstViInfo->stSnsInfo.enSnsType, -1);
65
66 SAMPLE_COMM_ISP_Aelib_Callback(ViPipe);
67
68 SAMPLE_COMM_ISP_Awblib_Callback(ViPipe);
69
70 HI_MPI_ISP_MemInit(ViPipe);
71
72 HI_MPI_ISP_SetPubAttr(ViPipe, &stPubAttr);
73
74 HI_MPI_ISP_Init(ViPipe);
75
76 SAMPLE_COMM_ISP_GetSnsObj(u32SnsId);
77
78 SAMPLE_COMM_ISP_Run(&pstViInfo->stPipeInfo.aPipe[i]);
79
80 }
81 }
整个的RFCN VI实现过程如上所示,函数具体含义也通过注释进行了一一的说明,而在VI初始化过程中,用到了ISP(Image Signal Processing) 图像信号处理的相关知识,海思也为其定义了API接口,随后随笔将介绍ISP相关概念,方便大家对VI整个过程进行了更为清晰的认识。
基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析一 :的更多相关文章
- 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...
- 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...
- 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍
下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现
之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...
- 网络编程-基于Websocket聊天室(IM)系统
目录 一.HTML5 - Websocket协议 二.聊天室(IM)系统的设计 2.1.使用者眼中的聊天系统 2.2.开发者眼中的聊天系统 2.3.IM系统的特性 2.4.心跳机制:解决网络的不确定性 ...
- NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)
NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...
- 基于 HTML5 WebGL 的地铁站 3D 可视化系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
- 基于 HTML5 + WebGL 实现 3D 可视化地铁系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
- 基于 HTML5 + WebGL 的地铁 3D 可视化系统
前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...
随机推荐
- c语言实现--双向循环链表操作
1,双向链表相当于两个单向循环链表. 2,双向链表的结点定义. 1 struct DULNode 2 { 3 int data; 4 struct DULNode * prior; 5 struct ...
- Detect the Virus ZOJ - 3430 AC自动机
One day, Nobita found that his computer is extremely slow. After several hours' work, he finally fou ...
- .net core面试题
第1题,什么是ASP net core? 首先ASP net core不是 asp net的升级版本.它遵循了dot net的标准架构, 可以运行于多个操作系统上.它更快,更容易配置,更加模块化,可扩 ...
- ef学习记录
EF Core (EntityFramework Core)是实体关系映射(O/RM)数据库访问框架.这个模式的好处就是让开发人员可以用对象模型来操作数据库,这是一种对开发人员较为友好的方式. O/R ...
- Python:装饰器是如何调用的
应用举例:(1)装饰器 # 装饰器的调用: # 一旦用上装饰器会: # 第一步:调outer函数 # 第二步:被装饰的函数play_game会被当作参数fn给outer # 第三步:最后调用play_ ...
- k8s-0-集群
Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...
- MySQL 多实例及其主从复制
目录 Mysql 实例 Mysql 多实例 创建多实例目录 编辑配置文件 初始化多实例数据目录 授权目录 启动多实例 连接多实例并验证 Mysql 多实例设置密码 设置密码后连接 Mysql 多实例主 ...
- HDU 4280 Island Transport(HLPP板子)题解
题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...
- docker-compose -----单机多容器管理
Compose是用于定义和运行多容器Docker应用程序的工具.通过Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用一个命令,就可以从配置中创建并启动所有服务. Docker-C ...
- HDU 4628 Pieces(状压DP)题解
题意:n个字母,每次可以删掉一组非连续回文,问你最少删几次 思路:把所有回文找出来,然后状压DP 代码: #include<set> #include<map> #includ ...