海思SDK学习:000-海思HI35xx平台软件开发快速⼊门之背景知识
背景
参考⾃:《HiMPP V3.0 媒体处理软件开发参考.pdf》
sdk
由于在⾳视频处理领域,海思芯⽚占有全球市场的很⼤份额。当我们选择使⽤海思芯⽚开发时,程序开发模型主要是围绕HIMPP(Hisi Media Process Platform)提供的API进⾏。这⾥围绕主⾓HIMPP详细介绍与它相关的专业词汇与背景知识,对HIMPP有充分了解之后,我们就可以利⽤它实现⾳视频编解码等业务逻辑。
本⽂主要讲述HIMPP平台处理流程,以快速⼊门海思HI35xx平台⾳视频编解码编程。
HIMPP平台架构简介
海思提供的媒体处理软件平台(Hisi Media Process Platform,简称HIMPP),可⽀持软件快速开发。该平台对应⽤软件屏蔽了芯⽚相关复杂的底层原理,并对应⽤软件直接提供MPI(MPPProgram Interface)接⼝完成相应功能。
该平台⽀持应⽤软件快速开发以下功能:输⼊视频捕获、H.264/MJPEG/JPEG/MPEG4编码、H.264/MJ
PEG/JPEG/MPEG4解码、视频输出显⽰、视频图像前处理(包括去燥、增强、锐化、Deinterlace)、编码码流叠加OSD、视频侦测分析、智能分析、⾳频捕获及输出、⾳频编解码等功能。
HIMPP平台典型架构分层
HIMPP平台主要是衔接了操作系统层与应⽤层,典型软件架构体系⽰意图如下:
应⽤层
媒体软件处理平其他驱动
操作系统层
硬件层
1、硬件层
硬件层由Hi35xx芯⽚加上必要的外围器件构成。外围器件包括Flash、DDR(Double Data-Rate)、视频Sensor或AD、⾳频AD等。
2、操作系统层
基于Linux的操作系统。
系统版本号芯⽚
Linux 3.10.y Hi3536/Hi3521A/Hi3520DV300/Hi3531A
Linux 3.18.y Hi3536CV100/Hi3531DV100/Hi3521DV100
Linux 4.9.y Hi3536DV100
3、媒体处理平台层
基于操作系统层,控制芯⽚完成相应的媒体处理功能。它对应⽤层屏蔽了硬件处理细节,并为应⽤层提供API接⼝完成相应功能。
4、其他驱动层
除了媒体处理平台外,海思为HI35xx芯⽚的其他硬件处理单元提供了相应的驱动,包括GMAC、SDIO、I2C、USB、SSP等驱动。
5、应⽤层
基于海思媒体处理平台及其他驱动,由⽤户开发的应⽤软件系统。
⼩结:从这个HIMPP平台典型架构中可以看出,在海思HI35xx平台⾳视频编解码编程我们只需要关⼼应⽤层逻辑和媒体软件处理平台就好了。
HIMPP平台业务逻辑处理流程
海思媒体处理平台主要流程分为视频处理及⾳频处理两条路线。
这⾥还有必要了解⼀下与HIMPP内容相关的专业名词,主要部分分为:
视频输⼊(VI)、视频处理⼦系统(VPSS)、视频编码(VENC)、视频解码(VDEC)、视频输出(VO)、视频侦测分析(VDA)等模块
⾳视频输⼊(AI)、⾳视频输出(AO)、⾳频编码(AENC)、⾳视频解码(ADEC)等模块
区域管理(REGION)模块
对于各个模块的解读:
VI 模块捕获视频图像,可对其做剪切、缩放、镜像等处理,并输出多路不同分辨率的图像数据。
VDEC 解码模块对编码后的视频码流进⾏解码,并将解析后的图像数据送 VPSS 进⾏图像处理或直接送 VO 显⽰。可对 H.264/H.265/VC1/MPEG4/MPEG2/AVS 格式的视频码流进⾏解码。
VPSS 模块接收 VI 和解码模块发送过来的图像,可对图像进⾏去噪、图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据⽤于编码、预览或抓拍。
VENC 编码模块接收 VI 捕获并经 VPSS 处理后输出的图像数据,可叠加⽤户通过 Region 模块设置的 OSD 图像,然后按不同协议进⾏编码并输出相应码流。
VDA 模块接收 VI 的输出图像,并进⾏移动侦测和遮挡侦测,最后输出侦测分析结果。
VO 模块接收 VPSS 处理后的输出图像,可进⾏播放控制等处理,最后按⽤户配置的输出协议输出给外围视频设备。
AI 模块捕获⾳频数据,然后 AENC 模块⽀持按多种⾳频协议对其进⾏编码,最后输出⾳频码流。
⽤户从⽹络或外围存储设备获取的⾳频码流可直接送给 ADEC 模块,ADEC ⽀持解码多种不同的⾳频格式码流,解码后数据送给 AO 模块即可播放声⾳。
了解上图有什么意义呢:
假设:有⼀个MPEG解码要实现播放MPEG样例视频的⽰例,可以⾛MPEG⽂件->HARD DISK->VDEC->VPSS->VO->显⽰器这个流程;不管怎样,流程⼀定要熟悉牢记,代码实现都是围绕这条主线来编写的。
视频处理路线
视频处理路线起点包括AD和HARD DISK两种。
AD即前端对COMS或CDD传感器进⾏AD采集得到最原始的图像数据,⾄于如何采集并编码为H264或H265数据,HIMPP已经帮我们做好了,直接调⽤API就好,接着将H264或H265数据推⾄VI,这个模型适合实时预览应⽤场景开发;
⽽ HARD DISK 则源于我们已经保存在硬盘的录好视频⽂件,我们需要的操作是读取⽂件然后将数据推⾄ VDEC 进⾏解码,这个模型则适合监控回放场景开发。VPSS作为编解码的中转站,可以实现对图像数据进⾏处理,其中最重要的就是不同分辨率的裁剪以及抓拍,调⽤VPSS相关的API可以实现对图像视频进⾏操控,经过VPSS可以输出到REGION、VDA、VO处理,这⾥重点讲述VO,VO作为联系视频流与显⽰的纽带,它接收VPSS的数据然后推送⾄HDMI或VGA进⾏显⽰。VO是多图层设备,
基于此可以时间⽤户GUI操作与视频层分离,也可以实现画中画等功能,VO的配置还包括图像输出刷新频率、图像颜⾊效果等。
⾳频处理
⾳频的处理流程就⽐较简单,录⾳路线则由麦等模拟设备输⼊到AI,接着推送到AENC进⾏⾳频编码,如常⽤的G711、G726、ADPCM等格式。播放路线则反过来,由录⾳⽂件提供声⾳源,经过ADEC进⾏解码后形成⾳频流数据,再推送⾄AO进⾏播放。
⾳频的操作相对就简单很多,我们⼀般只关⼼⾳频采样频率的控制和⾳量调节等API,⽐如配置AI进⾏8K/16K/24K/32K/48K频率8位采样等。
⼩结,海思HI35xx平台⾳视频编解码编程⼀定要熟悉HIMPP各个模块的功⽤,并⼗分熟悉⾳视频处理流程,程序中也是需要严格按照此流程进⾏设计的。
系统控制
系统控制根据 Hi35xx 芯⽚特性,完成硬件各个部件的复位、基本初始化⼯作,同时负责完成 MPP(Media Process Platform 媒体处理平台)系统各个业务模块的初始化、去初始化以及管理 MPP 系统各个业务模块的⼯作状态、提供当前 MPP 系统的版本信息、提供⼤块物理内存管理等功能。
应⽤程序启动 MPP 业务前,必须完成 MPP 系统初始化⼯作。同理,应⽤程序退出 MPP 业务后,也要完成 MPP 系统去初始化⼯作,释放资源。
视频缓存池
由于 MPP 系统的正常运⾏依赖于缓存池,所以有关这个内容也需要掌握。
视频缓存池主要向媒体业务提供⼤块物理内存管理功能,负责内存的分配和回收,充分发挥内存缓存池的作⽤,让物理内存资源在各个媒体处理模块中合理使⽤。
⼀组⼤⼩相同、物理地址连续的缓存块组成⼀个视频缓存池。
视频输⼊通道需要使⽤公共视频缓存池。所有的视频输⼊通道都可以从公共视频缓存池中获取视频缓存块⽤于保存采集的图像(如图中所⽰从公共视频缓存池 B 中获取视频缓存块 Bm)。由于视频输⼊通道不提供创建和销毁公共视频缓存池功能,因此,在系统初始化之前,必须为视频输⼊通道配置公共视频缓存池。
根据业务的不同,公共缓存池的数量、缓存块的⼤⼩和数量不同。图中所⽰缓存块的⽣存期是指经过 VPSS 通道传给后续模块的情形(图实线路径)。如果该缓存块完全没有经过 VPSS 通道传给其他模块,则将在 VPSS 模块处理后被放回公共缓存池(图虚线路径)。
系统绑定
MPP 提供系统绑定接⼝(HI_MPI_SYS_Bind),即:通过数据接收者绑定数据源来建⽴两者之间的关联关系(只允许数据接收者绑定数据源)。
绑定后,数据源⽣成的数据将⾃动发送给接收者。
⽬前 MPP ⽀持的绑定关系如表所⽰。
数据源数据接收者
VI VO 、VENC、VDA 、VPSS、PCIV
VPSS VO、VENC、VDA 、VPSS 、PCIV
VDEC VPSS 、VO(只能是标清设备或 single 模式分割)、VDA 、PCIV
VO(WBC)VO 、VENC 、VPSS 、PCIV
AI AENC 、AO
ADEC AO
VI/VPSS 离/在线模式
离/在线模式是针对 VI/VPSS 协作模式来说的。
VI 和 VPSS 的协作模式分为离线模式与在线模式:
上述2种模式切换由 load 脚本参数控制,在API 只能获取。对应 sys 模块参数 vi_vpss_online。
VI/VPSS 离线模式是指 VI 进⾏时序解析后将图像数据写出到 DDR, VPSS 从DDR 中载⼊ VI 采集的数据进⾏图像处理,是传统 Hi3518/Hi3520D 等芯⽚的VI/VPSS 的协作模式。
VI/VPSS 在线模式是指 VI 进⾏时序解析后直接在芯⽚内部将数据传递到 VPSS,中间⽆ DDR 写出的过程。在线模式可以省⼀定的带宽和内存,降低端到端的延时。
需要注意的是:在线模式时,因为 VI 不写出数据到 DDR,⽆法进⾏CoverEx、 OverlayEx、 Rotate、 LDC 等操作,需要在 VPSS 各通道写出后再进⾏Rotate/LDC 等处理,⽽且有些功能只在离线下能⽀持,⽐如 DIS。
视频输⼊
视频输⼊(VI)模块实现的功能:将芯⽚外的视频数据通过 ITU-R BT656/601/1120 接⼝或 Digital Camera 接⼝接收,存⼊到指定的内存区域。在此过程中,VI 可以对接收到的原始视频图像数据进⾏裁剪(Crop)、⽔平垂直缩⼩(Down Scaling)和⽔平垂直翻转(Mirror、Flip)等处理,并实现⼀路或多路原始视频图像输⼊,输出⼀路或多路视频图像功能。
重要概念:
视频输⼊设备:⽀持标准 BT.656、标准 BT.1120、⾃定义时序等若⼲种时序输⼊,负责对时序进⾏解析。
视频物理通道:负责将输⼊设备解析后得到的视频数据输出到 DDR。在真正将数据输出到 DDR 之前,它可以实现裁剪、遮挡、⽔平垂直缩⼩和⽔平垂直翻转等功能,具体功能见各芯⽚的详细描述。
掩码⽤于指⽰ VI 设备的视频数据来源。
级联:指芯⽚的视频输出端通过 BT1120 时序将视频数据传送到另⼀颗芯⽚的视频输⼊端。
视频输出
VOU(Video Output Unit)模块主动从内存相应位置读取视频和图形数据,并通过相应的显⽰设备输出。
重要概念:
⾼清和标清显⽰设备:SDK 将⾼清和标清显⽰设备分别标⽰为 DHDx 和 DSDx。其中,x 为索引号,从 0 开始取值,表⽰第⼏路⾼清/标清显⽰设备,例如第 0 路⾼清设备标⽰为 DHD0,第 0 路标清显⽰设备标⽰为 DSD0。所有⾼清和标清显⽰设备⼜可分别简称为 HD 和 SD 设备。⾼清设备上可能会同时绑定两个视频层。
视频层:对于固定在每个设备上⾯对应的视频层,SDK 也对应采取 VHDx 和 VSDx 来标⽰,对于可以动态绑定视频层,⽤ PIP 来表⽰。
通道: SDK 将通道归属于视频层管理。对于⼀个视频层,它上⾯的通道都是独⽴的。同时,不同的视频层上的通道也是独⽴的。对于通道的排号上⾯不存在跨层的连续。
例如,处理电⼦放⼤的场景时,视频层 VHD0 上⾯的通道 0 作为电⼦放⼤的显⽰的画⾯,视频层 PIP 上⾯的通道 0 作为全场景显⽰的画⾯。这两个通道没有关联。对于系统绑定,应该⽤视频层和通道号来进⾏绑定配置;同时,对于回写的图像作为绑定源时,需要将回写内容所在的设备号和 0 通道号作为绑定源设置。
视频处理⼦系统
VPSS(Video Process Sub-System)⽀持对⼀幅输⼊图像进⾏统⼀预处理,如去噪、去隔⾏等,然后再对各通道分别进⾏缩放、锐化等处理,最后输出多种不同分辨率的图像。
VPSS 单元⽀持的具体图像处理功能包括 FRC(Frame Rate Control)、Crop、PreScale、 NR(Noise Reduce)、DEI(De-interlace)、ES(Edge Smooth)、IE(Image Enhance)、 DCI(Dynamic Contrast Improvement)、Cover/Overlay/Mosaic、Scale、LTI(Luma Transition Improvement)/CTI(Chroma Transition Improvement)、Aspect Ratio、Border 等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。