基于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 ...
随机推荐
- 【noi 2.6_2988】计算字符串距离(DP)
题意: 给两个字符串,可以增.删.改,问使这两个串变为相同的最小操作数. 解法:(下面2种的代码主要区别在初始化和,而状态转移方程大家可挑自己更容易理解的方法打) 1.f[i][j]表示a串前i个和b ...
- HDU 3488-Tour KM
为什么可以这样拆点在 这道题 都已经证明过 代码: 1 //题目上面说了"The only exception is that the first and the last city sho ...
- Kibana 地标图可视化
ElasticSearch 可以使用 ingest-geoip 插件可以在 Kibana 上对 IP 进行地理位置分析, 这个插件需要 Maxmind 的 GeoLite2 City,GeoLite2 ...
- LINUX - 文件读写缓存
遇到一个进程core掉后日志打印不出来的问题: 参考如下: [引用] 只有正常退出,才能做到flush.否则将写失败. 之后有百度了下中文资料,发现同样的结论. "fflush库函数的作用是 ...
- boomworks 1999~2009
大众软件 PC定时执行专家 4.0 (PCTaskTimer) - 功能强大.简单易用的定时执行软件.具有功能多.体积小.消耗资源少的特点. 超级网际搜索(SuperSearch) - 免费.快速.高 ...
- 网络安全-企业环境渗透2-wordpress任意文件读&&FFmpeg任意文件读
参考 http://prontosil.club/posts/c08799e1/ 一. 实验名称 企业环境渗透2 二. 实验目的 [实验描述] 操作机的操作系统是kali 进入系统后默认是命令行界面 ...
- codeforces 1019B The hat 【交互题+二分搜索】
题目链接:戳这里 学习题解:戳这里
- Leetcode(213)-打家劫舍II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在 ...
- VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug
VSCode 在 Vue 导入路径中使用 @ 符号后无法正确跳转 bug bug jsconfig.json { // This file is required for VSCode to unde ...
- 如何在 网站页面中插入ppt/pdf 文件,使用插件,Native pdf 支持,chrome,Edge,Firefox,
1 经过测试:在网页中插入 ppt 不好使:可能是浏览器=>同源策略 error? pdf 可以正常使用: <前提:一定要放在服务器端才行!> 2 经过e ...