基于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 ...
随机推荐
- Dubbo从入门到实践
1 Dubbo出现的背景 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 我们传统的网站结构为 ...
- DCL 数据控制语言
目录 授予权限(GRANT) 回收权限(REVOTE) 授予权限(GRANT) # 语法 mysql> help grant; Name: 'GRANT' Description: Syntax ...
- Linux 驱动框架---驱动中的时间相关
内核中的时间 Linux 系统内核对于时间的管理依赖于硬件,硬件按一定的周期产生中断,周期由内核的一个配置值HZ决定在系统启动时会将定时器配置为HZ值指定的频率产生中断:同时内核和维护一个64位(X8 ...
- ReactDOM API All In One
ReactDOM API All In One React DOM API render() hydrate() unmountComponentAtNode() findDOMNode() crea ...
- 微信小程序 UI 组件库
微信小程序 UI 组件库 Vant Weapp 需要注意的是 package.json 和 node_modules 必须在 miniprogram 目录下 $ yarn add @vant/weap ...
- how to design a search component in react
how to design a search component in react react 如何使用 React 设计并实现一个搜索组件 实时刷新 节流防抖 扩展性,封装,高内聚,低耦合 响应式 ...
- Apple 反人类的设计的产品组合
Apple 反人类的设计的产品组合 Apple shit design macbook pro 2018 + beats solo3 MBP 的耳机孔在电脑右边, betas 的耳机孔在左边, 组合起 ...
- js regular expression & email checker
js regular expression & email checker const isValidEmail = (email = ``) => /^([\w+\.])+@(\w+) ...
- Linux in depth
Linux in depth bash file text editor filter selector command ?
- 对DevOps的九大误解,是时候纠正了!
DevOps是开发和运维的结合,有助于集成和自动化测试过程以及部署存储库,还提供了透明度以及灵活性.DevOps的目标如下: ●更快的上市时间(TTM). ●减少各种修复之间的前置时间.●提高部署频率 ...