SDI 软件框架 on S32V234

关键字 :NXPS32V234SDI

一、 SDI 框架概述

1. SDI 是什么

根据 VSDK1.7 的 doc 文档《SDI User Guide》说明,SDI(Sensor Data Interface)是 S32V234 的一个应用层的函数库,这个库专门用于控制图像数据输入、ISP 子系统的处理,是S32V234 SoC的一个组成部分。也就是说,从视频数据输入接口(MIPI CSI/VIU)的配置,到图像的处理(ISP),都可以用这个库里面的 API 来进行。

2. SDI 框架的组成

  1. source code
/libs/io/sdi/src/sdi.cpp : 最上层的库,提供sdi_grabber对象,定义了适用于大多数 HW 的操作接口;
/libs/io/sdi/src/sdi_io.cpp : 被 sdi.cpp 调用,定义了可在ISP图中使用的各种ISP引擎(MIPI、VIU、FDMA、DDR、H264Dec、JPEGDec 等)配置的输入/输出对象。在内部使用来自sdi_graph.cpp的功能;
/libs/io/sdi/src/sdi_graph.cpp:定义了和 graph 图相关的操作,可以实现运行时对 graph 进行修改。

  1. OAL 操作系统抽象层

SDI 是应用层的一个库,它想要操作驱动层的硬件,那就需要通过 OAL 提供的 API 来进行。OAL 是 SDI 框架中驱动层和应用层的一个操作系统抽象层,它可以给多个线程的共享数据上锁、进行 SRAM/DDR 内存分配、调用内核层的 driver (OAL_DriverInCall)等。

  1. CGL 各种摄像头通用的配置框架

SDI 的框架只有一个,但是 sensoer data 可以是很多种 sensor 的data,不同 sensor 的输入接口可能是 CSI,也可能是 VIU,CSI 的比特率、lanes 也会不一样。用户通过 SDI 的Prestart 函数把所有 camera 相关的信息(cgl_System_t)告诉 CGL,SDI 会根据需求调用 CGL 框架的各个 API,去进行相应的配置。CGL 最终会调用到 i2c 的读写接口去配置 sensor,会调用到 oal 的 API 去调用 soc 的 csi driver。



  1. opencv

为了方便的图像数据存储和管理,SDI库采用SUMat图像数据容器作为帧缓冲器。由于vsdk::SUMat是cv::UMat的1:1克隆,因此来自SUMat的输入和输出数据可以直接用作OCV函数参数。

3. 在s32v234软件体系中的SDI位置和交互(from《SDI User Guide》):

SDI in S32V234
注:截图来源于 S32V234 的 VSDK1.7 doc 文档《SDI_Software_User_Guide.pdf》

二、 APP、SDI、CGL、opencv 和 OAL之间的调用关系

基本上每个文件都会用到 oal。
各层的调用关系

以上便是 S32V234 中的 SDI 框架的概览。

参考文献:

《SDI User Guide》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论