下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI、VDEC、VPSS、VGS、VO、NNIE,其中涉及的内容,大家可以参考之前我写的博客:

Hi3559AV100的VI细节处理说明

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分析一 :的更多相关文章

  1. 基于Hi3559AV100 RFCN实现细节解析-(3)系统输入VI分析(HiISP)二 :

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: 基于Hi3559AV10 ...

  2. 基于Hi3559AV100 RFCN实现细节解析-(2)RFCN数据流分析

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,整个过程涉及到VI.VDEC.VPSS.VGS.VO.NNIE,其中涉及的内容,大家可以参考之前我写的博客: Hi3559AV100的 ...

  3. 基于Hi3559AV100 RFCN实现细节解析-(1)VGS初介绍

    下面随笔系列将对Hi3559AV100 RFCN实现细节进行解析,因为RFCN用到了VGS加框,因此本篇随笔将给出VGS视频图像子系统的具体说明,便于后面RFCN的细节实现说明. VGS 是视频图形子 ...

  4. 通过Dapr实现一个简单的基于.net的微服务电商系统(十五)——集中式接口文档实现

    之前有小伙伴在评论区留言说如何集成swagger,最开始没有想透给了对方一个似是而非的回答.实际上后来下来想了一下,用.NET5 提供的Source Generator其实可以很方便的实现接口集成.今 ...

  5. 网络编程-基于Websocket聊天室(IM)系统

    目录 一.HTML5 - Websocket协议 二.聊天室(IM)系统的设计 2.1.使用者眼中的聊天系统 2.2.开发者眼中的聊天系统 2.3.IM系统的特性 2.4.心跳机制:解决网络的不确定性 ...

  6. NET/ASP.NET Routing路由(深入解析路由系统架构原理)(转载)

    NET/ASP.NET Routing路由(深入解析路由系统架构原理) 阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模 ...

  7. 基于 HTML5 WebGL 的地铁站 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  8. 基于 HTML5 + WebGL 实现 3D 可视化地铁系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  9. 基于 HTML5 + WebGL 的地铁 3D 可视化系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

随机推荐

  1. VJ train1 I-彼岸

    一道递推题(我这个菜鸡刚开始以为是排列组合) 题目: 突破蝙蝠的包围,yifenfei来到一处悬崖面前,悬崖彼岸就是前进的方向,好在现在的yifenfei已经学过御剑术,可御剑轻松飞过悬崖.现在的问题 ...

  2. kafka消息队列、环境搭建与使用(.net framework)

    一:kafka介绍 kafka(官网地址:http://kafka.apache.org)是一种高吞吐量的分布式发布订阅的消息队列系统,具有高性能和高吞吐率. 1.1 术语介绍 BrokerKafka ...

  3. Linux-压缩/解压缩命令

    目录 Linux系统中常见的压缩包格式 gzip 压缩命令 zip 压缩命令 tar 压缩命令(归档) Linux系统中常见的压缩包格式 格式 压缩工具 .zip zip压缩工具 .gz gzip压缩 ...

  4. SQL优化汇总

    今天面某家公司,然后问我SQL优化,感觉有点忘了,今天特此总结一下: 总结得是分两方面:索引优化和查询优化: 一. 索引优化: 1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的 ...

  5. C、C++语言中参数的压栈顺序

    要回答这个问题,就不得不谈一谈printf()函数,printf函数的原型是:printf(const char* format,-) 没错,它是一个不定参函数,那么我们在实际使用中是怎么样知道它的参 ...

  6. 使用nodejs爬取图片

    在运行代码前,请确保本机是否有nodejs环境 1 D:\ > node -v 2 v12.1.0 //版本号 需要用到的包 axios //请求页面 cheerio // 把get请求的页面 ...

  7. Windows中VS code无法查看C++ STL容器的值 - 解决方法

    Windows中VS code debug时无法查看C++ STL容器内容 首先,你很可能用的是x64版本的Windows. 我发现一个有效的解决方法,但在x64版本的Windows上安装MinGW时 ...

  8. SVG in Action

    SVG in Action HTML5 semantic HTML5 Semantic Elements / HTML5 Semantic Tags figure object <figure& ...

  9. web components in action

    web components in action web components css-doodle.js https://alligator.io/workflow/ https://d33wubr ...

  10. Github history viewer

    Github history viewer https://github.githistory.xyz/ https://github.com/pomber/git-history https://c ...