美文网首页
海思芯片开发学习

海思芯片开发学习

作者: xqiiitan | 来源:发表于2024-11-13 15:19 被阅读0次

GPIO复用接口
app/demo/init/app_io_init.c --》 app_io_init();

码流信息:
VI-> VENC+osd信息 -> H264码流/MJPEG码流/JPEG码流/MEPG4码流。
1、VI部分
视频输入设备
视频输入设备支持标准 BT.656、标准 BT.1120、自定义时序等若干种时序输入,负责对时序进行解析。
2、VPSS
VPSS(Video Process Sub-System)支持对一幅输入图像进行统一预处理,
如去噪、去隔行等,然后再对各通道分别进行缩放、锐化等处理,最后输出多种不同分辨率的图像。

一、MPP是什么?
MPP是海思提供的媒体处理软件平台(Media Process Platform,简称 MPP),
该平台对应用软件屏蔽了芯片相关的复杂的底层处理,并对应用软件直接提供 MPI(MPP Program Interface)接口完成相应功能。
该平台支持应用软件快速开发以下功能:
输入视频捕获、H.265/H.264/JPEG 编码、H.265/H.264/JPEG 解码、视频输出显 示、视频图像前处理(包括去噪、增强、锐化)、图像拼接、图像几何矫正、智能、音频捕获及输出、音频编解码等功能。

  • 应用程序启动 MPP 业务前,必须完成 MPP 系统初始化工作
  • 应用程序退出 MPP 业务后,也要完成 MPP 系统去初始化工作,释放资源

MPP包括:
视频输入(VI)、视频 处理(VPSS)、
视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频拼接 (AVS)、音频输入(AI)、
音频输出(AO)、音频编码(AENC)、音频解码(ADEC)、区域管理(REGION)等模块。

VI模块:捕获视频图像,可对其做剪切、去噪等处理,并输出多路不同分辨率的图像数据。

VDEC模块:解码模块对编码后的视频码流进行解码,并将解析后的图像数据送 VPSS 进行图像处理,再送 VO 显示。可对 H.265/H.264/JPEG 格式的视频码流进行解码。

VPSS模块:接收 VI 和解码模块发送过来的图像,可对图像进行图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览或抓拍。

VENC模块:编码模块接收 VI 捕获并经 VPSS 处理后输出的图像数据,可叠加用户通过 Region
模块设置的 OSD 图像,然后按不同协议进行编码并输出相应码流。

VO模块:接收 VPSS 处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议输出给外围视频设备。

AVS模块:接收多路VI采集的图像,进行拼接合成全景图像(这里的AVS是指“视频拼接子系统”,我之前一直以为是编解码的AVS标准)。

AI模块:捕获音频数据,然后AENC模块支持按多种音频协议对其进行编码,最后输出音频码流。

ADEC模块:用户从网络或外围存储设备获取的音频码流可直接送给ADEC模块,ADEC支持解码多种不同的音频格式码流,解码后数据送给AO模块即可播放声音。

从视频编解码的角度来看,整个流程是sensor开始采集视频,然后交给VI做一些类似于预处理的工作,VI再将数据交给VPSS再处理一次,然后编码器接受VPSS的数据进行编码并生成码流,虽然VENC可以直接接受VI处理后的数据,但是一个完整的流程就是这样,后面的解码和音频等我这边就暂不研究了,不过从图中可以看到VDEC的输入是SD卡,后面可以参考一下官方例程是怎么从文件域拿数据的。

二、系统绑定(Bind)
通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。

三、工作模式
VI 和 VPSS 各自的工作模式分为在线,离线,并行模式。

VI
在线模式:VI_CAP 与 VI_PROC 之间在线 数据流传输,此模式下 VI_CAP 不会写出 RAW 数据到 DDR, 而是直接把数据流送给 VI_PROC;
离线模式:VI_CAP 写出 RAW 数据到DDR,然后 VI_PROC 从 DDR 读取 RAW 数据进行后处理;
并行模式:当对接大数据量的时序,,需要 VI_CAP 与 两个 VI_PROC 处于并行模式,VI_CAP 直接把一帧数据送给两 个 VI_PROC 并行处理。

VPSS

  • 在线模式:VI_PROC 与 VPSS 之间的在线数据流传输,在此模式下 VI_PROC 不会写出 YUV 数据到 DDR,而 是直接把数据流送给 VPSS;

  • 离线模式:VI_PROC 写出 YUV 数据到DDR,然后 VPSS 从 DDR 读取YUV 数据进行后处理;

  • 并行模式:当对接大数据量的时序,需要 VI_CAP 与 两个 VI_PROC 处于并行模式, 同时两个 VPSS 也分别与 VI_PROC 处于并行模式, VI_CAP 直接把一帧数据送给两 个 VI_PROC 并行处理,再给 VPSS 并行处理。

VI_CAP模块可以接收并处理多达8个摄像头的输入信号,同时支持多种图像格式,包括YUV、RGB等。
VI_PROC模块可用于图像处理、视频编码、人脸识别等应用场景。能够增强图像的质量,使得用户能够用更高的效率处理数据。

在hisi平台vi模块中,存在sensor -> dev -> pipe -> phy_chn -> ext_chn的关系

系统绑定
MPP提供系统绑定接口(HI_MPI_SYS_Bind),即通过数据接收者绑定数据源来建立两者之间的关联关系(只允许数据接收者绑定数据源)。绑定后,数据源生成的数据将自动发送给接收者。目前MPP支持的绑定关系如下:

数据源VI, 数据接收者:VO、VENC、VPSS、PCIV、VI(虚拟PIPE)

数据源VPSS, 数据接收者:VO、VENC、VPSS、PCIV、VI(虚拟PIPE)、AVS

数据源VDEC, 数据接收者:VO、VENC、VPSS、PCIV、VI(虚拟PIPE)

数据源VO(WBC), 数据接收者:VO、VENC、VPSS、PCIV、VI(虚拟PIPE)

数据源AVS, 数据接收者:VO、VENC、VPSS、PCIV、VI(虚拟PIPE)

数据源AI, 数据接收者:AO、AENC

数据源ADEC, 数据接收者:AO

HI_MPI_SYS_Bind是数据源到数据接收者的绑定接口,语法为:

HI_S32 HI_MPI_SYS_Bind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn);
HI_S32 HI_MPI_SYS_UnBind(const MPP_CHN_S *pstSrcChn, const MPP_CHN_S *pstDestChn); // 解绑

其中 pstSrcChn指源通道指针,pstDestChn指目的通道指针,该API需求的头文件为:hi_comm_sys.h、mpi_sys.h,需求的库文件为:libmpi.a

注意事项:
系统目前支持的绑定关系见上文;

·同一个数据接收者只能绑定一个数据源;
·绑定是指数据源和数据接收者建立关联关系。绑定后,数据源生成的数据将自动发送给接收者。
·VI 和 VDEC 作为数据源,是以通道为发送者,向其他模块发送数据,用户将设备号置为0,SDK不检查输入的设备号;
·VO 作为数据源发送回写(WBC)数据时,是以设备为发送者,向其他模块发送数据,用户将通道号置为0,SDK不检查输入的通道号;
·VPSS作为数据接收者时,是以设备(GROUP)为接收者,接收其他模块发来的数据,用户将通道号置为0;
·VENC 作为数据接收者时,是以通道号为接收者,接收其他模块发过来的数据用户将设备号置为0,SDK不检查输入的设备号;
·AVS 作为数据接收者时,是以设备(GROUP)、通道(PIPE)为接收者;
·其他情况均需指定设备号和通道号。

SAMPLE_COMM_VI_UnBind_VENC()
SAMPLE_COMM_VI_Bind_VENC()

VI和VPSS的工作模式

相关文章

网友评论

      本文标题:海思芯片开发学习

      本文链接:https://www.haomeiwen.com/subject/ihzhjjtx.html