海思MPP

1 系统概述

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

1.1 系统架构

海思MPP_第1张图片
系统软件架构可以分为四层:

  1. 最底层是硬件驱动层。
  2. 操作系统层;海思支持linux和liteos,此文只涉及linux部分。
  3. 媒体层;此层是海思平台软件架构的核心,海思平台将媒体相关的功能都抽象到了这一层,如音视频输入输出、isp图像处理、编解码等,最关键的是独立的内存管理机制,物理内存、虚拟内存都有独立的机制进行分配和回收,减少了与操作系统层的关联。包含的软件有各种媒体相关的驱动、库的支持,还有整套的媒体开发平台。本文要介绍的MPP就是媒体软件处理平台。
  4. 最上层是应用层。

1.2 处理流程

海思媒体处理平台的主要内部处理流程分为视频输入(VI)、视频处理(VPSS)、视频编码(VENC)、 视频解码(VDEC)、 视频输出(VO)、视频拼接(AVS)、音频输入(AI)、音频输出(AO)、音频编码(AENC)、音频解码(ADEC)、区域管理(REGION)等模块。
海思MPP_第2张图片

  • VI 模块捕获视频图像,可对其做剪切、 去噪等处理,并输出多路不同分辨率的图像数据。
  • 解码模块对编码后的视频码流进行解码,并将解析后的图像数据送 VPSS 进行图像处理, 再送 VO 显示。可对 H.265/H.264/JPEG 格式的视频码流进行解码。
  • VPSS 模块接收 VI 和解码模块发送过来的图像,可对图像进行图像增强、锐化等处理,并实现同源输出多路不同分辨率的图像数据用于编码、预览或抓拍。
  • 编码模块接收 VI 捕获并经 VPSS 处理后输出的图像数据,可叠加用户通过 Region模块设置的 OSD 图像,然后按不同协议进行编码并输出相应码流。
  • VO 模块接收 VPSS 处理后的输出图像,可进行播放控制等处理,最后按用户配置的输出协议输出给外围视频设备。
    上图也包含很多典型的视频流的处理流程。sensor负责采集图像,是海思平台的输入,图像经过海思内部VI、VPSS、VENC和VO后,经由hdmi输出到显示屏上,sdk提供的sample_vio中有几个case就是这个典型的流程,同时sample_vio也是最常用到的samle。

2 MPP部署

在一般的嵌入式开发中,只要将uboot,kernel,rootfs下载到开发板上,就可以进行程序开发了。但是海思又进一步把与多媒体相关的内容整合到MPP平台中,SDK中推荐使用mount nfs的方法先部署起mpp。

  1. 搭建nfs服务器,开发板作为nfs客户端。
  2. 挂载nfs文件系统
  3. mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xx.xx.xx.xx:/your-nfs-path /mnt,然后就可以在/mnt目录访问nfs服务器上的文件。
  4. 加载驱动
    cd mpp/ko
    ./ load3519v100 -i -sensor0 imx334
  5. 运行sample程序
    cd mpp/sample /vio
    ./sample_vio 0 0

3 视频输入

视频输入单元 VI(Video Input),可以通过 MIPI Rx(包含 MIPI、LVDS、HiSPi、SLVS-EC)接口、BT.656/601、BT.1120 接口和 DC(Digital Camera)接收视频数据,存入指定的内存区域。VI 内嵌 ISP 图像处理单元,可以直接对接外部原始数据(BAYER RGB 数据),VI 的功能框图如下图所示。 VI 分成两个物理子模块:捕获子模块 VICAP 和处理子模块 VIPROC 组成。

海思MPP_第3张图片
海思SDK对VI的功能框架进行了封装,VI内部结构对于开发者来说是黑盒,并且黑盒内部的代码不进行开源。黑盒外部进行了软件级的封装,因此VI在软件层次上划分4个部分,输入设备(DEV)、输入 PIPE、物理通道(PHY_CHN)和扩展通道(EXT_CHN),如下图所示,开发者也只需要关注软件架构上的这四个层级即可。
海思MPP_第4张图片

此处只针对VI进行了讲解,其他模块也需要参考海思手册,此处不再一一写出了。

4 开发

4.1 预览与拍照

下图是双 pipe 离线模式拍照的数据通路,上面的pipe是preview通路,下面的pipe是capture通路,一般相机的通路都是如此,preview对图像质量要求略低,capture对图像质量要求高。当然,此图是海思平台的双pipe离线模式,还有在线模式、单pipe模式等,大体意思相近,不同模式的选择需要根据芯片的处理能力和图像的质量需求进行。
海思MPP_第5张图片

4.2 新sensor开发

准备工作

  • 确认主芯片规格。支持 Master 模式,支持的线性、WDR 接口模式,支持输入频率上限。
  • sensor datasheet。确认图像传输接口模式,输出频率。确认曝光时间、增益如何设置,帧率如何修改。确认在 WDR 模式下的以上两项。
  • mipi/并口。确认接口,并确认时序。
  • initialize settings。获取 Sensor Initialize Settings,一般至少要准备最大规格和标准分辨率两种序列。

内核层

  • pinmux的配置
  • power的检查
  • clock的配置
  • 控制通路i2c/spi的检查

应用层

sensor_ctl.c,sensor的配置,需要结合datasheet完善initialize settings。

cmos.c,isp的基本功能。按如下函数顺序进行实现。

  1. cmos_set_image_mode(), cmos_set_wdr_mode()。
  2. sensor_global_init()。
  3. sensor_init(), sensor_exit()。
  4. cmos_get_isp_default(),cmos_get_isp_black_level()。

sensor点亮后还需要进行ae功能的完善,自动配置增益、曝光时间、帧率等。
之后还有白平衡的配置,配置完成后,颜色基本就正常了。
到此处,添加的新sensor基本就可用了,后续就是AF和各种图像质量调优相关的工作了。

你可能感兴趣的:(Multimedia)