下面随笔系列将对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. c语言实现--双向循环链表操作

    1,双向链表相当于两个单向循环链表. 2,双向链表的结点定义. 1 struct DULNode 2 { 3 int data; 4 struct DULNode * prior; 5 struct ...

  2. Detect the Virus ZOJ - 3430 AC自动机

    One day, Nobita found that his computer is extremely slow. After several hours' work, he finally fou ...

  3. .net core面试题

    第1题,什么是ASP net core? 首先ASP net core不是 asp net的升级版本.它遵循了dot net的标准架构, 可以运行于多个操作系统上.它更快,更容易配置,更加模块化,可扩 ...

  4. ef学习记录

    EF Core (EntityFramework Core)是实体关系映射(O/RM)数据库访问框架.这个模式的好处就是让开发人员可以用对象模型来操作数据库,这是一种对开发人员较为友好的方式. O/R ...

  5. Python:装饰器是如何调用的

    应用举例:(1)装饰器 # 装饰器的调用: # 一旦用上装饰器会: # 第一步:调outer函数 # 第二步:被装饰的函数play_game会被当作参数fn给outer # 第三步:最后调用play_ ...

  6. k8s-0-集群

    Docker回顾 docker容器封装应用程序好处 内核在3.8以上,才能完整使用docker隔离功能(所有centos6不推荐用) Docker容器化封装应用程序缺点 容器编排工具有哪些 一: K8 ...

  7. MySQL 多实例及其主从复制

    目录 Mysql 实例 Mysql 多实例 创建多实例目录 编辑配置文件 初始化多实例数据目录 授权目录 启动多实例 连接多实例并验证 Mysql 多实例设置密码 设置密码后连接 Mysql 多实例主 ...

  8. HDU 4280 Island Transport(HLPP板子)题解

    题意: 求最大流 思路: \(1e5\)条边,偷了一个超长的\(HLPP\)板子.复杂度\(n^2 \sqrt{m}\).但通常在随机情况下并没有isap快. 板子: template<clas ...

  9. docker-compose -----单机多容器管理

    Compose是用于定义和运行多容器Docker应用程序的工具.通过Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用一个命令,就可以从配置中创建并启动所有服务. Docker-C ...

  10. HDU 4628 Pieces(状压DP)题解

    题意:n个字母,每次可以删掉一组非连续回文,问你最少删几次 思路:把所有回文找出来,然后状压DP 代码: #include<set> #include<map> #includ ...