目录

  • 海思video input模块架构介绍
  • 海思video input模块功能介绍
  • 结构体说明
  • 函数调用关系
  • 流程分析
    • step 1: mipi configure
    • step 2: configure sensor and ISP(include WDR mode)
    • step 3: run isp thread
    • step 4 : config & start vicap dev
    • Step 5: config & start vicap chn (max 1)

海思3518的sample中,创建好视频缓存池及初始化完毕后,就进入第三步,开启vedio in device和channel

海思video input模块架构介绍

海思的3518E的内部ISP单元是隶属于VI模块的,海思的video input模块包含三大部分

  • 和sensor的接口对接
  • ISP
  • device,用来采集图像的硬件单元,也是视频通道的入口

海思video input模块功能介绍


有的sensor内部有AD转换,数字信号出来之后,就到device,也就是海思VI的第三部分
有的sensor没有内置AD转换器,需要外界一个AD转换

主要实现的功能
将sensor采集到的数字视频信号进行isp处理,再进行镜头畸变矫正(LDC)、动态对比度调节(DCI)、DIS(消抖)模块处理,最后通过dev将处理好的视频丢进通道,和其他模块进行交互

结构体说明

    /******************************************step 3: start vi dev & chn to capture******************************************/stViConfig.enViMode   = SENSOR_TYPE;stViConfig.enRotate   = ROTATE_NONE;stViConfig.enNorm     = VIDEO_ENCODING_MODE_AUTO;stViConfig.enViChnSet = VI_CHN_SET_NORMAL;stViConfig.enWDRMode  = WDR_MODE_NONE;s32Ret = SAMPLE_COMM_VI_StartVi(&stViConfig);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("start vi failed!\n");goto END_VENC_1080P_CLASSIC_1;}

主要的结构体为
SAMPLE_VI_CONFIG_S stViConfig
SAMPLE_VI_CONFIG_S如下

其中

  • stViConfig.enViMode为makefile中配置的sensor
  • stViConfig.enRotate为NULL即不旋转
  • stViConfig.enNorm为自动选择编码制式
  • stViConfig.enViChnSet为无翻转
  • stViConfig.enWDRMode为不选用WDR

函数调用关系

完整函数关系图

流程分析

SAMPLE_COMM_VI_StartVi函数中,首先执行的是IsSensorInput,此函数的功能为判断输入的视频是否是由sensor采集的,输入参数为makefile中配置的sensor类型

HI_BOOL IsSensorInput(SAMPLE_VI_MODE_E enViMode)
{HI_BOOL bRet = HI_TRUE;switch(enViMode){case SAMPLE_VI_MODE_1_D1:case SAMPLE_VI_MODE_BT1120_1080P:case SAMPLE_VI_MODE_BT1120_720P:bRet = HI_FALSE;break;default:break;}return bRet;
}

如代码所示,若makefile中配置的是D1、BT1120,则判定为不是sensor采集的视频,这两个是老式电视的标准。

enViMode = pstViConfig->enViMode;if(!IsSensorInput(enViMode)){s32Ret = SAMPLE_COMM_VI_StartBT656(pstViConfig);}else{s32Ret = SAMPLE_COMM_VI_StartIspAndVi(pstViConfig);}

如果是传统的电视标准,则走的是startBT656这一条,若是用sensor采集的,就用startIspAndVi这一路。

显然,我们要研究的是走sensor的这条路

于是进入SAMPLE_COMM_VI_StartIspAndVi函数

step 1: mipi configure


mipi是sensor和3518e的接口

常用Sensor的接口有三种:

  • MIPI
  • LVDS
  • DC
/******************************************step 1: mipi configure******************************************/s32Ret = SAMPLE_COMM_VI_StartMIPI(pstViConfig);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("%s: MIPI init failed!\n", __FUNCTION__);return HI_FAILURE;}

这部分只有一个SAMPLE_COMM_VI_StartMIPI函数,这个函数中有一个SAMPLE_COMM_VI_SetMipiAttr,作用是设置sensor的一些属性

SAMPLE_COMM_VI_SetMipiAttr中,首先打开mipi驱动加载进去后/dev底下生成的文件

接着根据不同的sensor为SAMPLE_COMM_VI_SetMipiAttr填充不同的参数

最后通过ioctl将参数设置给sensor

step 2: configure sensor and ISP(include WDR mode)

这一步也可以跳过,就看你要不要用3518处理你的图像

/******************************************step 2: configure sensor and ISP (include WDR mode).note: you can jump over this step, if you do not use Hi3516A interal isp. ******************************************/s32Ret = SAMPLE_COMM_ISP_Init(pstViConfig->enWDRMode);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("%s: Sensor init failed!\n", __FUNCTION__);return HI_FAILURE;}

第一步先注册sensor的回调,为什么这么做,需要结合sensor和isp处理来看
第二部注册AE(自动曝光),进行自动曝光
第三步初测AWB,进行自动白平衡
第四步注册AF,自动对焦
第五步申请isp单元所用内存
第六步设置WDR宽动态相关属性,属性由参数传入
第七步设置sensor的pub属性,不同sensor的阵列不同,参考详解相机的sensor工作原理,设置完毕后,由HI_MPI_ISP_SetPubAttr将属性写入
第八步最终初始化,将上面设置好的属性进行落实

step 3: run isp thread

  • SAMPLE_COMM_ISP_Run();
    • pthread_create(&gs_IspPid, &attr, (void* ()(void))
    • Test_ISP_Run, NULL)
    • Test_ISP_Run(HI_VOID *param)
    • HI_MPI_ISP_Run(IspDev);

上一步所有isp相关的属性设置完毕后,将isp放在一个线程里面跑

思考:为什么海思不把isp全部做好? 因为它支持多种sensor,每个sensor参数不同,所以需要用户自己配置。海思方案是做好算法,做好数据结构,让用户进行填充。
工作中,有一种情况是可以和厂商沟通,定好sensor后isp部分由厂商完成

这一部分是isp相关操作,isp方向需要重点研究

step 4 : config & start vicap dev


isp在线程中跑起来之后,进入这一步start device
device,用来采集图像的硬件单元,也是视频通道的入口
首先HI_MPI_VI_SetDevAttr,将sensor采集图像的起始点、图像尺寸进行设置
然后HI_MPI_ISP_GetWDRMode获取WDR模式
获取之后HI_MPI_VI_SetWDRAttr进行设置
最后将HI_MPI_VI_EnableDevVI enable

Step 5: config & start vicap chn (max 1)


在之前通过sensor判断已经定好了通道的数量
这边就依次将通道打开
在函数SAMPLE_COMM_VI_StartChn中,通过SDK提供的API可以对channel的属性、旋转进行设置,最后将通道enable

至此,海思VI模块完毕,后续的操作都是对通道进行操作

海思3518E开发笔记2.5——海思VI(video input)模块详解相关推荐

  1. 海思3518E开发笔记2.7——海思VENC(Video Encode)模块详解

    目录 海思Video Encode模块架构介绍 海思Video Encode相关概念 码率控制 海思Video Encode模块功能介绍 编码通道 ROI 裁剪编码 函数调用关系 相关数据结构 流程分 ...

  2. 海思3518E开发笔记1.6——rootfs及其启动流程分析

    3518E的根文件系统 /etc/fstab fs-version group profile udev init rcS S00devs S01udev S80network S90hibernat ...

  3. 海思3518E开发笔记1.5——flash分区及uboot、kernel、rootfs烧写并部署

    目录 规划分区 烧写流程 tftp更新并重新烧写uboot的命令序列 tftp更新并重新烧写kernel的命令序列 tftp更新并重新烧写rootfs的命令序列: 裸机烧录uboot 什么是裸机 烧录 ...

  4. 海思3518E开发笔记1.1——HI3518E方案整体架构介绍

    目录 前言 硬件 软件 前言 在做一个项目之前,需要对这个项目在一个比较高的高度进行了解. 如,硬件构成.软件是裸机的还是带操作系统的,带操作系统的是怎么样一个开发流程. 得对项目由打到校进行了解,知 ...

  5. 海思3518E开发笔记4.2——sensor数据交互接口(MIPI、LVDS、DVP并口),以AR0130和OV9712为例

    目录 前言 DVP(并口) LVDS MIPI(MIPI-CSI2) 总结 前言 摄像头是一个独立的芯片,和主控芯片是弧线独立的,两者通过接口进行交互,交互的信息有控制信号和数据信号 控制信号常用I2 ...

  6. 【Android游戏开发十二】(保存游戏数据 [上文])详解SharedPreference 与 FIleInputStream/FileOutputStream将数据存储到SD卡中!

     李华明Himi 原创,转载务必在明显处注明: 转载自 [黑米GameDev街区] 原文链接:  http://www.himigame.com/android-game/327.html 很多童鞋说 ...

  7. 海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

    文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全:开发技术集合( ...

  8. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  9. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)

    Java Web 开发 Java Web 开发概念 搭建过程 详解 在eclipse创建Dynamic Web Project 创建时选择Tomcat的版本 创建项目成功 eclipse环境下如何配置 ...

最新文章

  1. 无人值守u盘安装linux,从U盘无人值守安装linux操作系统(纯实践笔记)
  2. Python基础语法06--文件
  3. input type 属性
  4. python_day6.2
  5. 1108轮播图和定时器this问题
  6. Deploying Kubernetes with CoreDNS using kubeadm
  7. Android和JS之间互相调用方法并传递参数
  8. [Android] DownloadManager下载管理类2.3新增API介绍
  9. python bind sock_python SOCKET编程详细介绍
  10. 数据库面试 - 如何设计才可以让系统从未分库分表动态切换到分库分表上?
  11. 5.2.1 标准原子类型
  12. #上位机开发大师之路# 串口控制模块开发
  13. springmvc学习一初始化源码
  14. MATLAB求解夏普利值
  15. 小米手机计算机usb连接,小米5手机怎么连接电脑 USB调试方法教程
  16. CKeditor 3.1 精简版带SyntaxHighlighter插件
  17. OpenGL基本图元
  18. GSI计算机,DAT或者GSI水准数据用科傻(COSA)软件平差
  19. Ubuntu下mentohust的配置
  20. 算法设计与分析基础知识点

热门文章

  1. 一些实用的电脑软件推荐
  2. 102.1 html radio单选框默认选中
  3. 面试必问的线程池,你懂了吗?
  4. 一个更加牛逼的科技媒体将如何崛起
  5. 通过Tunnels连上不同域的数据库
  6. php操作常用class集合,[PHP]经常用到的实用函数集合
  7. 十大免费软件替换盗版软件--转载
  8. 编译原理实验一PL/0词法分析器c++
  9. Groovy基本使用
  10. Tomcat服务器的启动及启动失败可能的原因