MI SYS API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
3.0 | 12/05/2020 | |
3.1 | 01/06/2021 | |
3.2 | 04/21/2021 | |
3.3 | 04/27/2021 | |
3.4 | 06/02/2021 | |
3.5 | 06/29/2021 | |
3.6 | 07/22/2021 | |
08/25/2021 | ||
3.7 | 11/05/2021 | |
3.8 | 11/26/2021 | |
3.9 | 11/30/2021 | |
12/08/2021 | ||
04/20/2022 | ||
3.10 | 05/16/2022 |
1. 概述¶
1.1. 模块说明¶
MI_SYS 是整个 MI 系统的基础模块修改模块debug_level,它给其他MI 模块的运行提供了基础。
图1-1 MI_SYS系统框架图
MI_SYS主要功能概述如下:
-
实现MI系统初始化、MMA内存缓冲池管理。
-
提供各模块注册设备节点,proc 系统的建立的通用接口。
-
提供各模块建立绑定关系的接口,管理各模块之间数据流动。
-
提供各模块申请MMA连续物理内存的接口,管理内存分配,映射虚拟地址,内存回收。
-
提供各模块建立工作线程的接口,管理各模块线程的创建,运行,销毁。
MI_SYS模块对应的ko文件为mi_sys.ko,库文件为libmi_sys.so、libmi_sys.a,头文件为mi_sys.h、mi_sys_datatype.h。具体功能请查阅API接口说明。
1.2. 文档格式约束¶
正体:用于文档正文内容的书写,其中代码段的书写需要用等宽字体。
正体 + 加粗:用于文档正文中重要内容的书写。
斜体:用于文档中Tips部分的书写。
斜体 + 加粗:用于文档中Tips部分重要内容的书写。
1.3. 关键字说明¶
ID: Identity document 的缩写,表示唯一编码。
MI: SStar SDK Middle Interface的缩写,本文中,如果出现“MI_SYS”类似的结构表示的是MI的SYS模块,如果是单纯的“MI”,泛指整个SDK。
Hex: 十六进制。
Kernl Mode: 指的是工作在Kernel环境下的代码,代码具有直接操作硬件的控制权限,比如ko中的函数和线程等。
User Mode: 指的是工作在User环境下的,比如用户的应用程序,系统调用等。
APP: Application的缩写,此处主要指调用MI API的应用程序。
API: Application Programming Interface,应用程序接口。
NVR: 全称Network Video Recorder,即网络视频录像机。
DVR: 全称Digital Video Recorder,即数字视频录像机或数字硬盘录像机。
XVR: 全称X(代表任何一种或多种功能) Video Recorder,目前sstar实现是NVR+DVR。
IPC: 全称IP Camera,即网络摄像机。
HW: 全称hardware,即硬件。
Dev: 全称Device,本文中表示MI模块设备,详见1.4.1。
Chn: 全称Channel,本文中表示MI模块设备的某个通道,详见1.4.1。
Port: 本文中表示MI模块设备通道中的某个端口,详见1.4.1。
Soc: 全称 System on Chip,即系统级芯片,也称片上系统,主芯片。
SocId: 本文中指的是描述特定Soc的序列号。某些平台会通过PCIE进行多芯片级联,此时需要用SocId进行区分。MI_SYS仅有部分接口支持跨Soc设置,这些接口都带有SocId参数。 如下图所示,通过PCIE桥接Soc1和Soc2。Soc1作为Master芯片,运行Linux环境、MI SDK和用户业务程序,Soc2作为Slave芯片,仅运行Linux环境和MI SDK,而没有业务程序。但是可以通过调用携带SocId参数的API选择对Soc1或Soc2进行操作。
图1-2 PCIE级联Soc模型
补充说明:
-
如无单独说明,本文中MI_SYS 和SYS,MI_DISP和DISP是相同意思,其余模块名称类似。
-
本文中出现的所有模块名称可以在MI_ModuleId_e中查阅其功能描述。
1.4. 流程框图¶
1.4.1. Dev/Chn/Port的关系¶
一个典型的MI 模块都会有Dev/Chn/Port三级结构如图1-3。
Dev
一个MI 模块会有一个或多个Dev,一般来说不同的Dev表示该模块设备需要调用不同的HW资源,或者工作在不同的工作模式。比如说,VENC 在编码H264/H265时和编码Jpeg时,需要调用不同的HW资源,这个时候Dev就要分开了。
Chn
一个Dev 会有一个或多个Chn(通道),一般来说不同的Chn表示该通道虽然和同Dev下的其他Chn共享HW资源,但是数据来源或者工作模式是不一样的。比如码流来源不同,Chn一般也不一样。
Port
一个Chn 会有一个或多个Port(端口),分为InputPort(数据流入的端口)和OutputPort(数据流出的端口)。一般来说不同的Port表示该通道虽然和同Dev同Chn下的其他Port共享HW资源和数据来源,但是需要设置的参数是不一样的,比如分辨率不同。
一般来说,Port才是用户操作MI模块的最小独立单位,因为它明确了所有的信息:HW资源、数据来源、参数属性。
Tips:
一个Chn并不是总是必须有InputPort和OutputPort的,其InputPort和OutputPort的数量取决于该模块的行为。
图1-3 MI模块的三级结构
图1-3 列出了MI_SYS中单个Chn下Port排列的不同场景:
-
只有InputPort,用于需要数据输入,但是无需输出的模块。比如,Disp这样的模块,只需要InputPort,无需OutputPort,它直接把结果显示到了Panel上。
-
只有OutputPort,用于无数据输入,或者数据输入不经过MI_SYS的模块。比如,Vdec这样的模块,数据来源可以是用户调用Vdec接口直接送入Vdec RingPool,不经过InputPort。
-
一个InputPort,一个OutputPort,用于单个数据输入,单个数据输出的模块。比如,Ldc这样的模块,先接收一个数据输入,然后硬件处理后,输入对应的结果。
-
一个InputPort,多个OutputPort,用于单个数据输入,但是会有不同的处理,输出不同数据的模块。比如,Scl这样的模块,共享一个数据源,然后会按照不同的OutputPort设置的参数来进行处理,输出不同的结果。
Tips:
Chn和Port的界限并不是总是能区分清楚,如果某模块API文档的解释和上文的解释有差异,调用该模块请以它的API文档为准。
1.4.2. 一个典型的NVR数据流¶
图 1-4是一个典型的NVR数据流模型。流动过程如下:
-
建立Vdec->Disp的绑定关系;
-
用户接收码流数据存盘并写入到Vdec的RingPool;
-
Vdec解码,写入解码后的数据到Vdec OutpuPort申请的内存,送入下一级;
-
Disp 将接收到的数据显示出来。
图1-4 一个典型的NVR数据流模型
Tips:
实际上,Vdec工作在不同模式下,OutputPortBuf中存储的不一定是真实的解码后帧数据。此处区别,用户无需过多关注。
1.4.3. 一个典型的IPC数据流¶
图 1-5是一个典型的IPC数据流模型,流动过程如下:
-
建立Vif->Isp->Scl->Venc的绑定关系;
-
Sensor 将数据送入vif处理;
-
Vif 将处理后的数据写入Output Port申请的内存,送入下一级;
-
Isp接收数据,进行处理,将结果写入Output Port申请的内存,送入下一级;
-
Scl 接收数据,进行处理,将结果写入Output Port申请的内存,送入下一级;
-
Venc接收数据,送入编码器进行编码处理,将编码后的数据写入RingPool内存区;
-
用户调用Venc的接口取流,送入用户业务层App,通过网络转送。
图1-5 一个典型的IPC数据流模型
1.4.4. 一个典型的DVR数据流¶
图1-6是一个典型的DVR数据流模型,根据输入数据流类型及应用场景不同分为两种情况:
-
第一种情况,输入源为从磁盘读取的H264/H265编码数据类型的回放场景,流动过程如下:
-
建立Vdec->Disp的绑定关系;
-
用户写入码流到Vdec的RingPool;
-
Vdec解码,写入解码后的数据到Vdec OutpuPort申请的内存,送入下一级;
-
Disp 将接收到的数据显示出来。
-
-
第二种情况,输入源为sensor,流动过程如下:
-
建立Vif->Isp->Scl->Disp的绑定关系;
-
Sensor 将数据送入vif处理;
-
Vif 将处理后的数据写入Output Port申请的内存,送入下一级;
-
Isp接收数据,进行处理,将结果写入Output Port申请的内存,送入下一级;
-
Scl 接收数据,进行处理,将结果写入Output Port申请的内存,送入下一级;
-
Venc接收数据,送入编码器进行编码处理,将编码后的数据写入RingPool内存区;
-
Disp将接收到的数据进行预览显示;
-
用户调用Venc的接口取流,送入用户业务层App,存入磁盘。
-
图1-6 一个典型的DVR数据流模型
1.4.5. 一个典型的XVR数据流¶
XVR同时具备NVR和DVR的功能,可自由在两种设备功能间自由切换,其数据流也是如此。
1.5. Bind和帧率控制场景说明¶
下面列出了一些常见的数据流场景来说明帧率的工作机制,图中成员的定义如下:
图1-7 Bind场景成员定义
Tips:
为了保证接口易用性,MI_SYS 内部会自动校准前级Output的帧率。
用户设置的u32SrcFrmrate和MI_SYS内部计算值有偏差时,以MI_SYS内部计算值替代u32SrcFrmrate来做帧率控制。但是MI_SYS内部计算需要时间,当帧率发生较大变化时,会出现1-2秒的抖动。
因此,使用MI_SYS_BindXXX接口时,请尽量保证这两个帧率设置准确。并且帧率有变化时,主动调用MI_SYS_BindXXX更新帧率。
下文中假定用户设置的u32SrcFrmrate是准确的前级帧率,u32DstFrmrate是客户想要的后级帧率。
1.5.1. 一对一Bind¶
图1-8 一对一Bind场景
对应前级Chnport 的Output 一对一bind 后级Chnport Input的场景,由Bind Type决定帧率控制策略。
如果是 FRAME_BASE模式,前级Output帧率控制起效,把输出帧率控制到目标值,后级Input帧率控制不起效。如果是 REALTIME/HW_RING模式,前级Output帧率控制不起效,后级Input帧率控制直接控制到目标值。
以图示为例:
Case1 设置Bind FRC: (30,5) ,Bind Type:FRAME_BASE, 此时前级ISP的输出帧率就被控制到5FPS。
Case2 设置Bind FRC: (30,5) Bind Type:REALTIME, 此时前级ISP的输出帧率维持30FPS不变,后端SCL的输入帧率被控制到5FPS。
Tips:
对于 REALTIME/HW_RING模式,无论是哪种场景下,前级Output帧率控制都不起效的,此时只能控制后级Input帧率,这是硬件工作机制决定的,下文不再复述。
1.5.2. 一对多Bind¶
图1-9 一对多Bind场景
对应前级Chnport 的Output 一对多bind 后级Chnport Input的场景,Bind Type和Bind FRC 共同决定帧率控制策略。
如果是 FRAME_BASE模式,由于前级ISP同时Bind多个后级,只能把帧率控制到能满足所有后级bind模块的帧率需求,然后在后级Input分别再做帧率控制。如果是 REALTIME/HW_RING模式,前级Output帧率控制不起效,后级Input分别做帧率控制。
以图示为例:
在该场景中,对ISP ChnPort0 的两次bind帧率分别是(30,5)(30,10),因此,ISP ChnPort0 的Output 帧率为10FPS。
SCL ChnPort0 的input需要进一步把帧率从10FPS 控制到5FPS。SCL ChnPort1 则无需再进行帧率控制。
1.5.3. Bind的同时设置了UserDepth¶
图1-10 Bind的同时设置了UserDepth
对应Bind后级的同时,前级Output端同时设置了UserDepth的场景,帧率控制策略是固定且唯一的。 调用MI接口设置的UserDepth,表明用户需要拿输出数据去使用,这个时候前级Output总是倾向把最新的数据给到用户,因此对前端输出不做帧率控制。
假如有bind后级,则在后级Input做帧率控制。假如没有bind后级,帧率控制就完全不起效了,此时数据输出就由数据产生和消费的速度来决定。我们会在说明Depth概念时,再详细解释。
以图示为例:
在该场景中,对ISP ChnPort0 的两次bind帧率分别是(30,5)(30,10),但是设置了ISP ChnPort0 的Output Depth为(1, 4)。因此,ISP ChnPort0 的Output 帧率为30FPS。SCL ChnPort0 的input把帧率从30FPS 控制到5FPS。SCL ChnPort1 把帧率从30FPS 控制到10FPS。
1.5.4. NVR场景下Vdec帧率控制的补充¶
图1-11 对于NVR场景下Vdec帧率控制的补充
对应 Vdec Chnport 的Output 一对一bind 后级 Chnport Input 的场景,由BindFRC决定帧率控制策略。
由于NVR 需要用户输入码流到Vdec,很难严格保证送码流的速度是均衡的,这一点和IPC这种数据源由中断严格控制时序的场景是不一样的。如果用户无法保证送入的帧率稳定,可以使用MI提供的自动计算送帧速度的功能,该功能在u32SrcFrmrate设置为-1时自动开启,此时MI会严格按照 u32DstFrmrate 来决定是否分配 Buffer 给Vdec。
此外,由于NVR 会提供倍速播放的功能,当后级Disp的Timing跟不上,就需要在输入Disp之前主动丢帧。如果Vdec解码速度快于Disp显示Timing,可使用MI提供的按比例丢帧功能,通过设置u32SrcFrmrate和u32DstFrmrate的比例来做达到想要的帧率。
以图示为例:
Case1 设置 Bind FRC: (-1,30) Bind Type:FRAME_BASE,假设前级Vdec Output输出帧率是30,此时 Vdec Output 每 1000ms/30 = 33.3ms才能得到 MI 分配的Buffer。
Case2 设置Bind FRC: (60, 30) Bind Type:FRAME_BASE,比例为 60/30 = 2/1,假设前级Vdec Output输出帧率是60,此时 Vdec Output每解码两张,只有一张会推送到Disp的Input。
Tips:
对于NVR产品,可以通过MI_VDEC的API接口查询当前ChnPort的遗留帧来动态选择两种策略,以达到更好的效果,此处不再赘述。
对于Vdec Bind 后级时,自动校准前级Output的真实帧率功能不再起效。
1.6. insmod参数说明¶
使用insmod mi_sys.ko 后面可以带的参数使用情况如下表所示。
表 1-1:insmod mi_sys.ko可加参数列表
参数 | 含义 | 取值 |
---|---|---|
bEnableMmu | 是否使能MMU | 1:enable mmu 0:disable mmu 由于需要底层逻辑的配合,设置成1不一定会enable MMU。设置成0会disable MMU。默认值是1。 Ex: bEnableMmu=1,表示使能mmu bEnableMmu=0,表示禁止mmu |
logBufSize | 缓存log的内存长度 | 默认为4KByte,单位:Byte Ex: logBufSize=4096,表示设置4096Byte,即4KByte |
entrySize | enable mmu后配置这个才有效 | Tiramisu支援128/256/512,单位:Kbyte entrySize的默认值是0,默认会使用系统配置的size,不同IC用的size有可能不一样。 Ex: entrySize=128,表示设置128KByte |
cmdQBufSize | cmdq 内存大小 | 由产品规格决定,单位:Kbyte cmdQBufSize的默认值在linux是1024,在RTK针对不同的IC可能会不一样。 Ex: cmdQBufSize=256,表示设置256KByte |
2. API 参考¶
2.1. API描述格式说明¶
本手册使用 8个参考域描述 API 的相关信息,它们作用如下表所示。
标签 | 功能 |
---|---|
功能 | 简要描述API的主要功能。 |
语法 | 列出调用API应包括的头文件以及API的原型声明。 |
参数 | 列出API的参数、参数说明及参数属性。 |
返回值 | 列出API所有可能的返回值及其含义。 |
依赖 | 列出API包含的头文件和API编译时要链接的库文件。 |
注意 | 列出使用API时应注意的事项。 |
举例 | 列出使用API的实例。 |
相关主题 | 调用上下文中有关联的接口。 |
2.2. 功能模块API列表¶
如前文所述,我们可以粗略的把MI_SYS的API分为三大类:系统功能类、数据流类、内存管理类。
Tips: MI_SYS仅有部分接口支持跨Soc设置,这些接口都带有u16SocId参数,没有携带此参数的接口默认不支持跨Soc设置。
API名 | 功能 |
---|---|
系统功能类 | |
MI_SYS_Init | 初始化MI_SYS系统 |
MI_SYS_Exit | 析构MI_SYS系统 |
MI_SYS_GetVersion | 获取MI 的系统版本号 |
MI_SYS_GetCurPts | 获取MI系统当前时间戳 |
MI_SYS_InitPtsBase | 初始化MI系统基准时间戳 |
MI_SYS_SyncPts | 同步MI系统时间戳 |
MI_SYS_SetReg | 设置寄存器的值,调试用 |
MI_SYS_GetReg | 获取寄存器的值,调试用 |
MI_SYS_ReadUuid | 获取Chip的Unique ID |
MI_SYS_EnableChnOutputPortLowLatency | 打开或者关闭通道output端口的低延迟输出功能,默认关闭 |
数据流类 | |
MI_SYS_BindChnPort | 数据源输出端口到接收者输入端口的绑定 |
MI_SYS_BindChnPort2 | 数据源输出端口到接收者输入端口的绑定,需要指定工作模式 |
MI_SYS_UnBind_ChnPort | 数据源输出端口到接收者输入端口的解绑定 |
MI_SYS_GetBindbyDest | 查询数据接收者输入端口的对应的源输出端口 |
MI_SYS_ChnInputPortGetBuf | 获取通道inputPort的buf |
MI_SYS_ChnInputPortPutBuf | 将通道inputPort的buf加到待处理队列 |
MI_SYS_ChnOutputPortGetBuf | 获取通道outputPort的buf |
MI_SYS_ChnOutputPortPutBuf | 释放通道outputPort的buf |
MI_SYS_ChnInputPortGetBufPa | 分配通道input端口对应的buf object,仅提供MIU物理地址 |
MI_SYS_ChnInputPortPutBufPa | 把通道input端口对应的buf object加到待处理队列,与MI_SYS_ChnInputPortGetBufPa成对使用 |
MI_SYS_ChnOutputPortGetBufPa | 分配通道output端口对应的buf object,仅提供MIU物理地址 |
MI_SYS_ChnOutputPortPutBufPa | 释放通道output端口对应的buf object,与MI_SYS_ChnOutputPortGetBufPa成对使用 |
MI_SYS_SetChnOutputPortDepth | 设置通道OutputPort的深度 |
MI_SYS_ChnPortInjectBuf | 向模块通道inputPort注入outputPort Buf数据 |
MI_SYS_GetFd | 获取output Port等待事件的文件描述符 |
MI_SYS_CloseFd | 关闭output Port对应的文件描述符 |
MI_SYS_DupBuf | 复制一个buf object |
MI_SYS_ChnInputPortSetUserPicture | 按照设定帧率,驱动会重复输入该buf到当前input port,并加到待处理队列 |
MI_SYS_EnableUserPicture | 打开user picture 功能 |
MI_SYS_DisableUserPicture | 关闭user picture 功能 |
MI_SYS_SetChnOutputPortUserFrc | 设置output 用户得到的帧率,在某些情况下可以降低带宽 |
MI_SYS_SetChnOutputPortBufExtConf | 设置outputBuf的宽高对齐 |
MI_SYS_SetChnInputPortFrc | 设置InputPort输入帧率 |
内存管理类 | |
MI_SYS_SetChnMMAConf | 设置模块设备通道输出端口默认分配内存的MMA池名称 |
MI_SYS_GetChnMMAConf | 获取模块设备通道输出端口默认分配内存的MMA池名称 |
MI_SYS_MMA_Alloc | 应用程序从MMA内存管理池申请物理连续内存 |
MI_SYS_MMA_Free | 在用户态释放MMA内存管理池中分配到的内存 |
MI_SYS_Mmap | 映射物理内存到CPU虚拟地址 |
MI_SYS_FlushInvCache | Flush cache CPU虚拟地址 |
MI_SYS_Munmap | 取消物理内存到虚拟地址的映射 |
MI_SYS_MemsetPa | 通过DMA硬件模块,填充整块物理内存 |
MI_SYS_MemcpyPa | 通过DMA硬件模块,把源内存数据拷贝到目标内存上 |
MI_SYS_BufFillPa | 通过DMA硬件模块,填充部分物理内存 |
MI_SYS_BufBlitPa | 通过DMA硬件模块,把源内存数据上的部分区域拷贝到目标内存上的部分区域 |
MI_SYS_ConfigPrivateMMAPool | 为模快配置私有MMA Heap |
MI_SYS_PrivateDevChnHeapAlloc | 从模块通道私有MMA Pool 申请内存 |
MI_SYS_PrivateDevChnHeapFree | 从模块通道私有MMA pool 释放内存 |
MI_SYS_Va2Pa | 将MI内存块的CPU虚拟地址转成内存物理地址 |
2.3. 系统功能类API¶
2.3.1. MI_SYS_Init¶
-
功能
MI_SYS初始化,MI_SYS 模块为系统内其它MI模组提供基础支援,需要早于系统内其它MI模组初始化,否则其它stream类型的模组初始化时会失败。
-
语法
MI_S32 MI_SYS_Init(MI_U16 u16SocId);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
MI_SYS_Init需要早于其他MI模组的Init函数调用。
-
可以在同一进程或多进程中重复调用MI_SYS_InitMI_SYS_Init,但必须和MI_SYS_Exit成对使用,否则会报错。
-
系统在内核启动参数内,需要配置好MMA 内存堆的配置参数。
-
-
举例
系统Init调用Sample
#define ST_DEFAULT_SOC_ID 0 MI_S32 ST_Sys_Init(void) { MI_SYS_Version_t stVersion; MI_U64 u64Pts = 0; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; MI_U64 u64Uuid; STCHECKRESULT(MI_SYS_Init(u16SocId)); memset(&stVersion, 0x0, sizeof(MI_SYS_Version_t)); STCHECKRESULT(MI_SYS_GetVersion(u16SocId , &stVersion)); ST_INFO("u8Version:%s\n", stVersion.u8Version); STCHECKRESULT(MI_SYS_ReadUuid(u16SocId, &u64Uuid)); INFO("u64Uuid:%llx\n", u64Uuid); STCHECKRESULT(MI_SYS_GetCurPts(u16SocId, &u64Pts)); ST_INFO("u64Pts:0x%llx\n", u64Pts); u64Pts = 0xF1237890F1237890; STCHECKRESULT(MI_SYS_InitPtsBase(u16SocId, u64Pts)); u64Pts = 0xE1237890E1237890; STCHECKRESULT(MI_SYS_SyncPts(u16SocId, u64Pts)); return MI_SUCCESS; } MI_S32 ST_Sys_Exit(void) { MI_U16 u16SocId = ST_DEFAULT_SOC_ID; STCHECKRESULT(MI_SYS_Exit(u16SocId)); return MI_SUCCESS; }
Tips:
本示例适用于: MI_SYS_Init / MI_SYS_Exit / MI_SYS_GetVersion / MI_SYS_GetCurPts / MI_SYS_InitPtsBase / MI_SYS_SyncPts / MI_SYS_ReadUuid .
-
相关主题
2.3.2. MI_SYS_Exit¶
-
功能
MI_SYS去初始化,调用MI_SYS_Exit之前,需要确保系统内所有其他模组都已经完成去初始化,所有VBPOOL都已经销毁,否则MI_SYS_Exit会返回失败。
-
语法
MI_S32 MI_SYS_Exit (MI_U16 u16SocId);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
MI_SYS_Exit调用前需要确保系统内所有其他模组都已经完成去初始化。
-
MI_SYS_Exit调用前需要确保系统内所有创建的VBPOOL已经成功销毁。
-
-
举例
参见 系统Init调用Sample举例。
-
相关主题
2.3.3. MI_SYS_GetVersion¶
-
功能
获取MI 的系统版本号。
-
语法
MI_S32 MI_SYS_GetVersion (MI_U16 u16SocId, MI_SYS_Version_t *pstVersion);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstVersion 系统版本号返回数据结构指针 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见 系统Init调用Sample举例。
2.3.4. MI_SYS_GetCurPts¶
-
功能
获取MI系统当前时间戳。
-
语法
MI_S32 MI_SYS_GetCurPts (MI_U16 u16SocId, MI_U64 *pu64Pts);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pu64Pts 系统当前时间戳返回地址 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见系统Init调用Sample举例。
2.3.5. MI_SYS_InitPtsBase¶
-
功能
初始化MI系统时间戳基准。
-
语法
MI_S32 MI_SYS_InitPtsBase (MI_U16 u16SocId, MI_U64 u64PtsBase);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 u64PtsBase 设置的系统时间戳基准 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见系统Init调用Sample举例。
2.3.6. MI_SYS_SyncPts¶
-
功能
微调同步MI系统时间戳。
-
语法
MI_S32 MI_SYS_SyncPts (MI_U16 u16SocId, MI_U64 u64Pts);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 u64Pts 微调后的系统时间戳基准 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见系统Init调用Sample举例。
2.3.7. MI_SYS_SetReg¶
-
功能
设置寄存器的值,调试用。
-
语法
MI_S32 MI_SYS_SetReg (MI_U16 u16SocId, MI_U32 u32RegAddr, MI_U16 u16Value,MI_U16 u16Mask);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 u32RegAddr Register 总线之地址 输入 u16Value 待写入之16bit寄存器值 输入 u16Mask 本次写入寄存器值之Mask遮挡栏位 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
2.3.8. MI_SYS_GetReg¶
-
功能
读取寄存器的值,调试用。
-
语法
MI_S32 MI_SYS_GetReg (MI_U16 u16SocId, MI_U32 u32RegAddr, MI_U16 *pu16Value);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 u32RegAddr Register 总线之地址 输入 pu16Value 待读回16bit寄存器值返回地址 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
2.3.9. MI_SYS_ReadUuid¶
-
功能
获取Chip的Unique ID
-
语法
MI_S32 MI_SYS_ReadUuid (MI_U16 u16SocId, MI_U64 *u64Uuid);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 u64Uuid 获取chip unique ID值的指针 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见系统Init调用Sample举例。
2.3.10. MI_SYS_EnableChnOutputPortLowLatency¶
-
功能
打开或者关闭通道output端口的低延迟输出功能
-
语法
MI_S32 MI_SYS_EnableChnOutputPortLowLatency(MI_U16 u16SocId, MI_SYS_ChnPort_t *pstChnPort,MI_BOOL bEnable , MI_U32 u32Param);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstChnPort 指向模块通道之output端口的指针 输入 bEnable TRUE:打开 FALSE:关闭,默认为FALSE 输入 u32Param Low Latency参数,其含义由具体模块决定 VPE用于设置Line Count,表示写完多少条Line后就Output给User或后级 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
当bEnable 为true时,u32Param必须大于0,否则设置无效
-
举例
MI_SYS_EnableChnOutputPortLowLatency调用Sample
MI_SYS_ChnPort_t stChnPort; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; stChnPort.eModId = E_MI_MODULE_ID_ISP; stChnPort.u32DevId = 0; stChnPort.u32ChnId = 0; stChnPort.u32PortId = 0; //打开ISP 通道0 output端口0 的低延迟输出功能,设定完成100行即可输出 MI_SYS_EnableChnOutputPortLowLatency(u16SocId, &stChnPort,TRUE , 100); //关闭ISP 通道0 output端口0 的低延迟输出功能, MI_SYS_EnableChnOutputPortLowLatency(u16SocId, &stChnPort,FALSE , 0);
2.4. 数据流类 API¶
2.4.1. MI_SYS_BindChnPort¶
-
功能
数据源输出端口到数据接收者输入端口的绑定。
-
语法
MI_S32 MI_SYS_BindChnPort(MI_U16 u16SocId, MI_SYS_ChnPort_t *pstSrcChnPort, MI_SYS_ChnPort_t *pstDstChnPort, MI_SYS_BindAttr_t *pstBindAttr);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstSrcChnPort 源端口配置信息数据结构指针 输入 pstDstChnPort 目标端口配置信息数据结构指针 输入 pstBindAttr 绑定类型参数数据结构体指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
源端口必须是通道输出端口。
-
目标端口必须是通道输入端口。
-
源和目标端口必须之前没有被绑定过。
-
本接口在Version 2.0以上版本不推荐使用,请使用MI_SYS_BindChnPort2替代。
-
-
举例
MI_SYS_BindChnPort调用Sample
MI_SYS_ChnPort_t stSrcChnPort; MI_SYS_ChnPort_t stDstChnPort; MI_SYS_BindAttr_t stBindAttr = {0}; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; stSrcChnPort.eModId = E_MI_MODULE_ID_ISP; stSrcChnPort.u32DevId = 0; stSrcChnPort.u32ChnId = 0; stSrcChnPort.u32PortId = 0; stDstChnPort.eModId = E_MI_MODULE_ID_VENC; stDstChnPort.u32DevId = 0; stDstChnPort.u32ChnId = 0; stDstChnPort.u32PortId = 0; stBindAttr. eBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE; MI_SYS_BindChnPort(u16SocId, &stSrcChnPort, &stDstChnPort, &stBindAttr);
-
相关主题
2.4.2. MI_SYS_BindChnPort2¶
-
功能
数据源输出端口到数据接收者输入端口的绑定,需要额外指定工作模式。
-
语法
MI_S32 MI_SYS_BindChnPort2(MI_U16 u16SocId, MI_SYS_ChnPort_t *pstSrcChnPort, MI_SYS_ChnPort_t *pstDstChnPort,MI_U32 u32SrcFrmrate, MI_U32 u32DstFrmrate, MI_SYS_BindType_e eBindType, MI_U32 u32BindParam);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstSrcChnPort 源端口配置信息数据结构指针。 输入 pstDstChnPort 目标端口配置信息数据结构指针。 输入 u32SrcFrmrate 源端口配置的帧率 输入 u32DstFrmrate 目标端口配置的帧率 输入 eBindType 源端口与目标端口连接的工作模式,参考 MI_SYS_BindType_e 输入 u32BindParam 不同工作模式需带入的额外参数。 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
源端口必须是通道输出端口。
-
目标端口必须是通道输入端口。
-
同一个源端口可以绑定多个目标端口。
-
同一个目标端口只能绑定一个源端口,使用之前必须没有被绑定过。
-
MI_SYS_BindChnPort2在pstSrcChnPort、pstDstChnPort和eBindType相同的情况下可以被多次调用,来重新设置需要修改的u32SrcFrmrate和u32DstFrmrate。
-
旧版本MI SYS不提供此接口,如没有找到,不用设置。
-
各种eBindType和u32BindParam使用场景如下:
eBindType 适用场景 E_MI_SYS_BIND_TYPE_SW_LOW_LATENCY u32BindParam表示低时延值,单位ms E_MI_SYS_BIND_TYPE_HW_RING u32BindParam表示ring buffer depth,目前是只有vpe和venc(h264/h265)支持这种模式,只支持一路 E_MI_SYS_BIND_TYPE_REALTIME u32BindParam未使用,该模式使用场景:jpe imi,只支持一路;vif->isp,支持一路;isp->scl,支持多路 E_MI_SYS_BIND_TYPE_FRAME_BASE u32BindParam未使用,默认是走这种frame mode -
MI_SYS_BindChnPort2 帧率控制策略默认为E_MI_SYS_FRC_STRATEGY_BY_PERIOD,如之前已调用MI_SYS_SetChnInputPortFrc设置了其他帧率策略,将会被覆盖。
-
-
举例
MI_SYS_BindChnPort2调用Sample
MI_SYS_ChnPort_t stSrcChnPort; MI_SYS_ChnPort_t stDstChnPort; MI_U32 u32SrcFrmrate; MI_U32 u32DstFrmrate; MI_SYS_BindType_e eBindType; MI_U32 u32BindParam; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; // a. ISP与venc连接方式为E_MI_SYS_BIND_TYPE_FRAME_BASE,代码如下: stSrcChnPort.eModId = E_MI_MODULE_ID_ISP; stSrcChnPort.u32DevId = 0; stSrcChnPort.u32ChnId = 0; stSrcChnPort.u32PortId = 0; stDstChnPort.eModId = E_MI_MODULE_ID_VENC; stDstChnPort.u32DevId = 0; stDstChnPort.u32ChnId = 0; stDstChnPort.u32PortId = 0; u32SrcFrmrate = 30; u32DstFrmrate = 30; eBindType = E_MI_SYS_BIND_TYPE_FRAME_BASE; u32BindParam = 0; STCHECKRESULT(MI_SYS_BindChnPort2(u16SocId, &stSrcChnPort, &stDstChnPort, u32SrcFrmrate, u32DstFrmrate, eBindType, u32BindParam)); // b. ISP与jpe连接方式为E_MI_SYS_BIND_TYPE_REALTIME,代码如下: stSrcChnPort.eModId = E_MI_MODULE_ID_ISP; stSrcChnPort.u32DevId = 0; stSrcChnPort.u32ChnId = 0; stSrcChnPort.u32PortId = 0; stDstChnPort.eModId = E_MI_MODULE_ID_VENC; stDstChnPort.u32DevId = 1; stDstChnPort.u32ChnId = 0; stDstChnPort.u32PortId = 0; u32SrcFrmrate = 30; u32DstFrmrate = 30; eBindType = E_MI_SYS_BIND_TYPE_REALTIME; u32BindParam = 0; STCHECKRESULT(MI_SYS_BindChnPort2(u16SocId, &stSrcChnPort, &stDstChnPort, u32SrcFrmrate, u32DstFrmrate, eBindType, u32BindParam)); // c. ISP与venc连接方式为E_MI_SYS_BIND_TYPE_HW_RING,代码如下: tSrcChnPort.eModId = E_MI_MODULE_ID_ISP; stSrcChnPort.u32DevId = 0; stSrcChnPort.u32ChnId = 0; stSrcChnPort.u32PortId = 0; stDstChnPort.eModId = E_MI_MODULE_ID_VENC; stDstChnPort.u32DevId = 0; stDstChnPort.u32ChnId = 0; stDstChnPort.u32PortId = 0; u32SrcFrmrate = 30; u32DstFrmrate = 30; eBindType = E_MI_SYS_BIND_TYPE_HW_RING; u32BindParam = 1080;//假设ISP output resolution为1920*1080,设置ring buffer depth为1080 STCHECKRESULT(MI_SYS_BindChnPort2(u16SocId, &stSrcChnPort, &stDstChnPort, u32SrcFrmrate, u32DstFrmrate, eBindType, u32BindParam));
-
相关主题
2.4.3. MI_SYS_UnBind_ChnPort¶
-
功能
数据源输出端口到数据接收者输入端口之间的解绑定。
-
语法
MI_S32 MI_SYS_UnBindChnPort(MI_U16 u16SocId, MI_SYS_ChnPort_t *pstSrcChnPort, MI_SYS_ChnPort_t *pstDstChnPort);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstSrcChnPort 源端口配置信息数据结构指针 输入 pstDstChnPort 目标端口配置信息数据结构指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
源端口必须是通道输出端口。
-
目标端口必须是通道输入端口。
-
源和目标端口之间之前必须已经被绑定过
-
-
相关主题
2.4.4. MI_SYS_GetBindbyDest¶
-
功能
查询数据接收者输入端口的对应的源输出端口。
-
语法
MI_S32 MI_SYS_GetBindbyDest (MI_U16 u16SocId, MI_SYS_ChnPort_t *pstDstChnPort, MI_SYS_ChnPort_t *pstSrcChnPort , MI_SYS_BindType_e *peBindType);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstDstChnPort 目标端口配置信息数据结构指针。 输入 pstSrcChnPort 源端口配置信息数据结构指针。 输出 peBindType 绑定模式 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
目标端口必须是通道输入端口。
-
目标端口之前必须已经被绑定过
-
2.4.5. MI_SYS_ChnInputPortGetBuf¶
-
功能
分配通道input端口对应的buf object。
-
语法
MI_S32 MI_SYS_ChnInputPortGetBuf (MI_SYS_ChnPort_t *pstChnPort,MI_SYS_BufConf_t *pstBufConf, MI_SYS_BufInfo_t *pstBufInfo, MI_SYS_BUF_HANDLE *phHandle , MI_S32 s32TimeOutMs);
-
形参
参数名称 描述 输入/输出 pstChnPort 指向模块通道之input端口的指针 输入 pstBufConf 待分配内存配置信息 输入 pstPortBuf 返回之buf 指针 输出 phHandle 获取的intputPort Buf的handle句柄 输出 s32TimeOutMs 等待超时的毫秒数,>=0时为具体时间;<0时会采用默认值20ms 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
MI_SYS_ChnInputPortGetBuf调用Sample
MI_SYS_ChnPort_t stIspChnInput; MI_SYS_BUF_HANDLE hHandle = 0; MI_SYS_BufConf_t stBufConf; MI_SYS_BufInfo_t stBufInfo; MI_SYS_ChnPortFrcAttr_t stFrcAttr; struct timeval stTv; MI_U16 u16Width = 1920, u16Height = 1080; FILE *fp = NULL; memset(&stIspChnInput, 0x0, sizeof(MI_SYS_ChnPort_t)); memset(&stBufConf, 0x0, sizeof(MI_SYS_BufConf_t)); memset(&stBufInfo, 0x0, sizeof(MI_SYS_BufInfo_t)); stIspChnInput.eModId = E_MI_MODULE_ID_ISP; stIspChnInput.u32DevId = 0; stIspChnInput.u32ChnId = 0; stIspChnInput.u32PortId = 0; fp = fopen("/mnt/ispport0_1920x1080_pixel0_737.raw","rb"); if(fp == NULL) { printf("file %s open fail\n", "/mnt/ispport0_1920x1080_pixel0_737.raw"); return 0; } stFrcAttr. eType = E_MI_SYS_FRC_TYPE_USERINJECT; stFrcAttr. eStrategy = E_MI_SYS_FRC_STRATEGY_BY_RATIO; stFrcAttr. u32SrcFrameRate = 30; stFrcAttr. u32DstFrameRate = 15; if(MI_SUCCESS != MI_SYS_SetChnInputPortFrc(&stIspChnInput, &stFrcAttr)) { printf ("MI_SYS_SetChnInputPortFrc failed\n "); return 0; } while(1) { stBufConf.eBufType = E_MI_SYS_BUFDATA_FRAME; gettimeofday(&stTv, NULL); stBufConf.u64TargetPts = stTv.tv_sec*1000000 + stTv.tv_usec; stBufConf.stFrameCfg.eFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; stBufConf.stFrameCfg.eFrameScanMode = E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE; stBufConf.stFrameCfg.u16Width = u16Width; stBufConf.stFrameCfg.u16Height = u16Height; if(MI_SUCCESS == MI_SYS_ChnInputPortGetBuf(&stIspChnInput,&stBufConf,&stBufInfo,&hHandle,0)) { if(fread(stBufInfo.stFrameData.pVirAddr[0], u16Width*u16Height*2, 1, fp) <= 0) { fseek(fp, 0, SEEK_SET); } MI_SYS_ChnInputPortPutBuf(hHandle,&stBufInfo, FALSE); } }
-
相关主题
2.4.6. MI_SYS_ChnInputPortPutBuf¶
-
功能
把通道input端口对应的buf object加到待处理队列。
-
语法
MI_S32 MI_SYS_ChnInputPortPutBuf (MI_SYS_BUF_HANDLE hHandle, MI_SYS_BufInfo_t *pstBufInfo, MI_BOOL bDropBuf);
-
形参
参数名称 描述 输入/输出 hHandle 当前buf的Handle句柄 输入 pstBufInfo 待提交的buf 指针 输入 bDropBuf 是否将buf直接丢弃而不用提交到待处理队列上 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.4.7. MI_SYS_ChnOutputPortGetBuf¶
-
功能
分配通道output端口对应的buf object。
-
语法
MI_S32 MI_SYS_ChnOutputPortGetBuf (MI_SYS_ChnPort_t *pstChnPort, MI_SYS_BufInfo_t *pstBufInfo , MI_SYS_BUF_HANDLE *phHandle);
-
形参
参数名称 描述 输入/输出 pstChnPort 指向模块通道之output端口的指针 输入 pstBufInfo 返回之buf 指针 输出 phHandle 获取的outputPort Buf的handle句柄 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
MI_SYS_ChnOutputPortGetBuf调用Sample
MI_SYS_ChnPort_t stChnPort; MI_SYS_BufInfo_t stBufInfo; MI_SYS_BUF_HANDLE stBufHandle; MI_SYS_FrameBufExtraConfig_t stBufExtraConf = {0}; MI_S32 s32Ret = MI_SUCCESS; MI_S32 s32Fd = 0; fd_set read_fds; struct timeval TimeoutVal; char szFileName[128]; int fd = 0; MI_U32 u32GetFramesCount = 0; MI_BOOL _bWriteFile = TRUE; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; stChnPort.eModId = E_MI_MODULE_ID_SCL; stChnPort.u32DevId = 0; stChnPort.u32ChnId = SCL_CHN_FOR_VDF; stChnPort.u32PortId = 0; s32Ret = MI_SYS_GetFd(&stChnPort, &s32Fd); if(MI_SUCCESS != s32Ret) { ST_ERR("MI_SYS_GetFd 0, error, %X\n", s32Ret); return NULL; } stBufExtraConf. u16BufHAlignment = 16; stBufExtraConf. u16BufVAlignment = 2; s32Ret = MI_SYS_SetChnOutputPortBufExtConf(&stChnPort, &stBufExtraConf); if (MI_SUCCESS != s32Ret) { ST_ERR("MI_SYS_SetChnOutputPortBufExtConf err:%x, chn:%d,port:%d\n", s32Ret, stChnPort.u32ChnId, stChnPort.u32PortId); return NULL; } s32Ret = MI_SYS_SetChnOutputPortUserFrc(&stChnPort, 30, 15); if (MI_SUCCESS != s32Ret) { ST_ERR("MI_SYS_ SetChnOutputPortUserFrc err:%x, chn:%d,port:%d\n", s32Ret, stChnPort.u32ChnId, stChnPort.u32PortId); return NULL; } sprintf(szFileName, "scl%d.es", stChnPort.u32ChnId); printf("start to record %s\n", szFileName); fd = open(szFileName, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd < 0) { ST_ERR("create %s fail\n", szFileName); } while (1) { FD_ZERO(&read_fds); FD_SET(s32Fd, &read_fds); TimeoutVal.tv_sec = 1; TimeoutVal.tv_usec = 0; s32Ret = select(s32Fd + 1, &read_fds, NULL, NULL, &TimeoutVal); if(s32Ret < 0) { ST_ERR("select failed!\n"); // usleep(10 * 1000); continue; } else if(s32Ret == 0) { ST_ERR("get scl frame time out\n"); //usleep(10 * 1000); continue; } else { if(FD_ISSET(s32Fd, &read_fds)) { s32Ret = MI_SYS_ChnOutputPortGetBuf(&stChnPort, &stBufInfo, &stBufHandle); if(MI_SUCCESS != s32Ret) { //ST_ERR("MI_SYS_ChnOutputPortGetBuf err, %x\n", s32Ret); continue; } // save one Frame YUV data if (fd > 0) { if(_bWriteFile) { write(fd, stBufInfo.stFrameData.pVirAddr[0], stBufInfo.stFrameData.u16Height * stBufInfo.stFrameData.u32Stride[0] + stBufInfo.stFrameData.u16Height * stBufInfo.stFrameData.u32Stride[1] /2); } } ++u32GetFramesCount; printf("channelId[%u] u32GetFramesCount[%u]\n", stChnPort.u32ChnId, u32GetFramesCount); MI_SYS_ChnOutputPortPutBuf(stBufHandle); } } } if (fd > 0) { close(fd); fd = -1; } MI_SYS_SetChnOutputPortDepth(u16SocId, &stChnPort, 0, 3); printf("exit record\n"); return NULL;
-
相关主题
2.4.8. MI_SYS_ChnOutputPortPutBuf¶
-
功能
释放通道output端口对应的buf object。
-
语法
MI_S32 MI_SYS_ChnOutputPortPutBuf (MI_SYS_BUF_HANDLE hBufHandle);
-
形参
参数名称 描述 输入/输出 hBufHandle 待提交的buf 的 handle句柄 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.4.9. MI_SYS_ChnInputPortGetBufPa¶
-
功能
分配通道input端口对应的buf object,仅提供MIU物理地址。
-
语法
MI_S32 MI_SYS_ChnInputPortGetBufPa (MI_SYS_ChnPort_t *pstChnPort,MI_SYS_BufConf_t *pstBufConf, MI_SYS_BufInfo_t *pstBufInfo, MI_SYS_BUF_HANDLE *phHandle , MI_S32 s32TimeOutMs);
-
形参
参数名称 描述 输入/输出 pstChnPort 指向模块通道之input端口的指针 输入 pstBufConf 待分配内存配置信息 输入 pstPortBuf 返回之buf 指针 输出 phHandle 获取的inputPort Buf的handle句柄 输出 s32TimeOutMs 等待超时的毫秒数,>=0时为具体时间;<0时会采用默认值20ms 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
与MI_SYS_ChnInputPortGetBuf区别:MI_SYS_ChnInputPortGetBufPa获取的pstBufInfo中只能使用物理地址phyAddr,而MI_SYS_ChnInputPortGetBuf获取的pstBufInfo中物理地址phyAddr和虚拟地址pVirAddr都可以使用。
-
举例
MI_SYS_ChnInputPortGetBufPa调用Sample
MI_SYS_ChnPort_t stIspChnInput; MI_SYS_BUF_HANDLE hHandle = 0; MI_SYS_BufConf_t stBufConf; MI_SYS_BufInfo_t stBufInfo; struct timeval stTv; MI_U16 u16Width = 1920, u16Height = 1080; FILE *fp = NULL; void *pVirAddr = NULL; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; memset(&stIspChnInput, 0x0, sizeof(MI_SYS_ChnPort_t)); memset(&stBufConf, 0x0, sizeof(MI_SYS_BufConf_t)); memset(&stBufInfo, 0x0, sizeof(MI_SYS_BufInfo_t)); stIspChnInput.eModId = E_MI_MODULE_ID_ISP; stIspChnInput.u32DevId = 0; stIspChnInput.u32ChnId = 0; stIspChnInput.u32PortId = 0; fp = fopen("/mnt/ispport0_1920x1080_pixel0_737.raw", "rb"); if (fp == NULL) { printf("file %s open fail\n", "/mnt/ispport0_1920x1080_pixel0_737.raw"); return 0; } while (1) { stBufConf.eBufType = E_MI_SYS_BUFDATA_FRAME; gettimeofday(&stTv, NULL); stBufConf.u64TargetPts = stTv.tv_sec * 1000000 + stTv.tv_usec; stBufConf.stFrameCfg.eFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; stBufConf.stFrameCfg.eFrameScanMode = E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE; stBufConf.stFrameCfg.u16Width = u16Width; stBufConf.stFrameCfg.u16Height = u16Height; if (MI_SUCCESS == MI_SYS_ChnInputPortGetBufPa(&stIspChnInput, &stBufConf, &stBufInfo, &hHandle, 0)) { pVirAddr = MI_SYS_Mmap(stBufInfo.stFrameData.phyAddr[0], stBufInfo.stFrameData.u32BufSize, &pVirAddr, TRUE); assert(pVirAddr); if (fread(pVirAddr, u16Width * u16Height * 2, 1, fp) <= 0) { fseek(fp, 0, SEEK_SET); } MI_SYS_Munmap(pVirAddr, stBufInfo.stFrameData.u32BufSize); MI_SYS_ChnInputPortPutBufPa(hHandle, &stBufInfo, FALSE); } }
-
相关主题
2.4.10. MI_SYS_ChnInputPortPutBufPa¶
-
功能
把通道input端口对应的buf object加到待处理队列,与MI_SYS_ChnInputPortGetBufPa成对使用。
-
语法
MI_S32 MI_SYS_ChnInputPortPutBufPa (MI_SYS_BUF_HANDLE hHandle, MI_SYS_BufInfo_t *pstPortBuf, MI_BOOL bDropBuf);
-
形参
|参数名称 |描述|输入/输出| |hHandle |当前buf的Handle句柄 输入| |pstPortBuf |待提交的buf 指针| 输入| |bDropBuf |直接放弃对buf的修改不提交 |输入|
-
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
与MI_SYS_ChnInputPortPutBuf区别:MI_SYS_ChnInputPortPutBufPa提交的pstBufInfo中只能使用物理地址phyAddr,而MI_SYS_ChnInputPortPutBuf提交的pstBufInfo中物理地址phyAddr和虚拟地址pVirAddr都可以使用。
-
举例
参见 MI_SYS_ChnInputPortGetBufPa调用Sample 举例。
-
相关主题
2.4.11. MI_SYS_ChnOutputPortGetBufPa¶
-
功能
分配通道output端口对应的buf object,仅提供MIU物理地址。
-
语法
MI_S32 MI_SYS_ChnOutputPortGetBufPa (MI_SYS_ChnPort_t *pstChnPort, MI_SYS_BufInfo_t *pstBufInfo, MI_SYS_BUF_HANDLE *phHandle);
-
形参
|参数名称 | 描述 |输入/输出| |pstChnPort |指向模块通道之output端口的指针 |输入| |pstBufInfo| 返回之buf 指针| 输出| |phHandle| 获取的outputPort Buf的handle句柄| 输出|
-
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
与MI_SYS_ChnOutputPortGetBuf区别:MI_SYS_ChnOutputPortGetBufPa获取的pstBufInfo中只能使用物理地址phyAddr,而MI_SYS_ChnOutputPortGetBuf获取的pstBufInfo中物理地址phyAddr和虚拟地址pVirAddr都可以使用。
-
举例
MI_SYS_ChnOutputPortGetBufPa调用Sample
MI_SYS_ChnPort_t stChnPort; MI_SYS_BufInfo_t stBufInfo; MI_SYS_BUF_HANDLE stBufHandle; MI_S32 s32Ret = MI_SUCCESS; MI_S32 s32Fd = 0; fd_set read_fds; struct timeval TimeoutVal; char szFileName[128]; int fd = 0; MI_U32 u32GetFramesCount = 0; MI_BOOL _bWriteFile = TRUE; void *pVirAddr = NULL; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; stChnPort.eModId = E_MI_MODULE_ID_SCL; stChnPort.u32DevId = 0; stChnPort.u32ChnId = SCL_CHN_FOR_VDF; stChnPort.u32PortId = 0; s32Ret = MI_SYS_GetFd(&stChnPort, &s32Fd); if (MI_SUCCESS != s32Ret) { ST_ERR("MI_SYS_GetFd 0, error, %X\n", s32Ret); return NULL; } s32Ret = MI_SYS_SetChnOutputPortDepth(u16SocId, &stChnPort, 2, 3); if (MI_SUCCESS != s32Ret) { ST_ERR("MI_SYS_SetChnOutputPortDepth err:%x, chn:%d,port:%d\n", s32Ret, stChnPort.u32ChnId, stChnPort.u32PortId); return NULL; } sprintf(szFileName, "scl%d.es", stChnPort.u32ChnId); printf("start to record %s\n", szFileName); fd = open(szFileName, O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); if (fd < 0) { ST_ERR("create %s fail\n", szFileName); } while (1) { FD_ZERO(&read_fds); FD_SET(s32Fd, &read_fds); TimeoutVal.tv_sec = 1; TimeoutVal.tv_usec = 0; s32Ret = select(s32Fd + 1, &read_fds, NULL, NULL, &TimeoutVal); if (s32Ret < 0) { ST_ERR("select failed!\n"); // usleep(10 * 1000); continue; } else if (s32Ret == 0) { ST_ERR("get scl frame time out\n"); //usleep(10 * 1000); continue; } else { if (FD_ISSET(s32Fd, &read_fds)) { s32Ret = MI_SYS_ChnOutputPortGetBufPa(&stChnPort, &stBufInfo, &stBufHandle); if (MI_SUCCESS != s32Ret) { //ST_ERR("MI_SYS_ChnOutputPortGetBuf err, %x\n", s32Ret); continue; } pVirAddr = MI_SYS_Mmap(stBufInfo.stFrameData.phyAddr[0], stBufInfo.stFrameData.u32BufSize, &pVirAddr, TRUE); assert(pVirAddr); // save one Frame YUV data if (fd > 0) { if (_bWriteFile) { write(fd, pVirAddr, stBufInfo.stFrameData.u16Height * stBufInfo.stFrameData.u32Stride[0] + stBufInfo.stFrameData.u16Height * stBufInfo.stFrameData.u32Stride[1] / 2); } } ++u32GetFramesCount; printf("channelId[%u] u32GetFramesCount[%u]\n", stChnPort.u32ChnId, u32GetFramesCount); MI_SYS_Munmap(pVirAddr, stBufInfo.stFrameData.u32BufSize); MI_SYS_ChnOutputPortPutBufPa(stBufHandle); } } } if (fd > 0) { close(fd); fd = -1; } MI_SYS_SetChnOutputPortDepth(u16SocId, &stChnPort, 0, 3); printf("exit record\n"); return NULL;
-
相关主题
2.4.12. MI_SYS_ChnOutputPortPutBufPa¶
-
功能
释放通道output端口对应的buf object,与MI_SYS_ChnOutputPortGetBufPa成对使用。
-
语法
MI_S32 MI_SYS_ChnOutputPortPutBufPa (MI_SYS_BUF_HANDLE hBufHandle);
-
形参
参数名称 描述 输入/输出 hBufHandle 待提交的buf 的handle句柄 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
与MI_SYS_ChnOutputPortPutBuf区别:MI_SYS_ChnOutputPortPutBufPa提交的handle对应的pstBufInfo中只能使用物理地址phyAddr,而MI_SYS_ChnOutputPortPutBuf提交的handle对应的pstBufInfo中物理地址phyAddr和虚拟地址pVirAddr都可以使用。
-
举例
参见 MI_SYS_ChnOutputPortGetBufPa调用Sample 举例。
-
相关主题
2.4.13. MI_SYS_SetChnOutputPortDepth¶
-
功能
设置通道output端口对应的系统buf 数量和用户可以拿到的buf数量。
-
语法
MI_S32 MI_SYS_SetChnOutputPortDepth(MI_U16 u16SocId, MI_SYS_ChnPort_t *pstChnPort, MI_U32 u32UserFrameDepth, MI_U32 u32BufQueueDepth);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstChnPort 指向模块通道之output端口的指针 输入 u32UserFrameDepth 设置该output用户可以拿到的buf最大数量 输入 u32BufQueueDepth 设置该output系统buf最大数量 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
u32UserFrameDepth 默认为0,u32BufQueueDepth默认为4。
-
在使用完OutputPortBuf(MI_SYS_ChnOutputPortGetBuf / MI_SYS_ChnOutputPortPutBuf 不再需要被调用)之后,建议把u32UserFrameDepth设置为0,可以减少output buf的缓存个数,节省内存。
-
u32UserFrameDepth 必须小于或者等于u32BufQueueDepth。
-
当u32UserFrameDepth等于u32BufQueueDepth,并且user fifo queue缓存的个数等于u32BufQueueDepth时,当前output port将会停止工作。
-
如果output port 没有绑定后级,想让当前output port工作,必须设置u32UserFrameDepth 大于0。
-
如果output port 通过realtime mode或者ring mode方式绑定,当前output port的u32UserFrameDepth必须设置为0。其他使用限制可参考vif/isp/scl/venc/jpd API文档介绍。
-
-
举例
2.4.14. MI_SYS_ChnPortInjectBuf¶
-
功能
把获取的outputPort buf插到指定的inputPort Buf Queue中
-
语法
MI_S32 MI_SYS_ChnPortInjectBuf(MI_SYS_BUF_HANDLE hHandle, MI_SYS_ChnPort_t *pstChnPort);
-
形参
参数名称 描述 输入/输出 hHandle 获取的outputPort Buf的handle句柄 输入 pstChnPort 指向模块通道之input端口的指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
调用MI_SYS_ChnPortInjectBuf 后,user不能再显式的release handle了。
-
一般不会调用MI_SYS_ChnInputPortGetBuf 拿到buf,然后调用MI_SYS_ChnPortInjectBuf 给到指定的inputPort Buf Queue。
-
-
举例
-
相关主题
2.4.15. MI_SYS_GetFd¶
-
功能
获取当前output Port等待事件的文件描述符
-
语法
MI_S32 MI_SYS_GetFd(MI_SYS_ChnPort_t *pstChnPort, MI_S32 *ps32Fd);
-
形参
参数名称 描述 输入/输出 pstChnPort 端口信息结构体指针 输入 ps32Fd 等待事件的文件描述符 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
需要与MI_SYS_CloseFd 成对使用。
-
推荐使用使用fd + select 的方式取数据,这样MI_SYS只有在fd对应的port口有数据的时候才会唤醒线程,效率比采用while+sleep循环取数据的效率要高。
-
-
举例
-
相关主题
2.4.16. MI_SYS_CloseFd¶
-
功能
关闭Output Port对应的文件描述符
-
语法
MI_S32 MI_SYS_CloseFd(MI_S32 s32ChnPortFd);
-
形参
参数名称 描述 输入/输出 s32ChnPortFd 等待事件的文件描述符 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
需要与MI_SYS_GetFd 成对使用。
-
举例
-
相关主题
2.4.17. MI_SYS_DupBuf¶
-
功能
复制一个buf object。
-
语法
MI_S32 MI_SYS_DupBuf(MI_SYS_BUF_HANDLE srcBufHandle , MI_SYS_BUF_HANDLE *pDupTargetBufHandle);
-
形参
参数名称 描述 输入/输出 srcBufHandle 源buf object 输入 pDupTargetBufHandle 返回复制的buf object 指针 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
MI_SYS_DupBuf调用Sample
int test0() { MI_SYS_ChnPort_t stChnPort; MI_SYS_BufInfo_t stBufInfo; MI_SYS_BUF_HANDLE bufHandle ,DupTargetBufHandle; MI_S32 s32Ret; stChnPort.eModId = E_MI_MODULE_ID_ISP; stChnPort.u32DevId = 0; stChnPort.u32ChnId = 0; stChnPort.u32PortId = 0; s32Ret = MI_SYS_ChnOutputPortGetBuf (&stChnPort,&stBufInfo,&bufHandle); if(s32Ret != MI_SUCCESS) return 0; s32Ret = MI_SYS_DupBuf(bufHandle, &DupTargetBufHandle); if(s32Ret != MI_SUCCESS) { MI_SYS_ChnOutputPortPutBuf(bufHandle); return 0; } stChnPort.eModId = E_MI_MODULE_ID_SCL; stChnPort.u32DevId = 0; stChnPort.u32ChnId = 0; stChnPort.u32PortId = 0; MI_SYS_ChnPortInjectBuf(DupTargetBufHandle , &stChnPort); /*************************** 可以继续操作stBufInfo ***************************/ MI_SYS_ChnOutputPortPutBuf(bufHandle); return 1; } int test1() { MI_SYS_ChnPort_t stChnPort; MI_SYS_BufInfo_t stBufInfo; MI_SYS_BufConf_t stBufConf; MI_SYS_BUF_HANDLE bufHandle ,DupTargetBufHandle; MI_S32 s32Ret; stChnPort.eModId = E_MI_MODULE_ID_SCL; stChnPort.u32DevId = 0; stChnPort.u32ChnId = 0; stChnPort.u32PortId = 0; memset(&stBufConf , 0 , sizeof(stBufConf)); stBufConf.eBufType = E_MI_SYS_BUFDATA_FRAME; stBufConf.stFrameCfg.eFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_422; stBufConf.stFrameCfg.u16Height = 1080; stBufConf.stFrameCfg.u16Width = 1920; stBufConf.stFrameCfg.eFrameScanMode = E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE; s32Ret = MI_SYS_ChnInputPortGetBuf (&stChnPort,&stBufConf,&stBufInfo,&bufHandle ,0); if(s32Ret != MI_SUCCESS) return 0; /*************************** 填充stBufInfo ***************************/ s32Ret = MI_SYS_DupBuf(bufHandle, &DupTargetBufHandle); if(s32Ret != MI_SUCCESS) { MI_SYS_ChnInputPortPutBuf(bufHandle); return 0; } MI_SYS_ChnInputPortPutBuf(DupTargetBufHandle , & stChnPort , FALSE); /*************************** 可以继续操作stBufInfo ***************************/ return 1; }
-
相关主题
2.4.18. MI_SYS_ChnInputPortSetUserPicture¶
-
功能
按照设定帧率驱动会重复输入该buf到当前input port,并加到待处理队列。
-
语法
MI_S32 MI_SYS_ChnInputPortSetUserPicture(MI_SYS_BUF_HANDLE BufHandle , MI_SYS_BufInfo_t *pstBufInfo, MI_SYS_UserPictureInfo_t *pstUserPictureInfo);
-
形参
参数名称 描述 输入/输出 BufHandle 当前buf的Handle句柄 输入 pstBufInfo 待提交的buf 指针 输入 pstUserPictureInfo 向驱动设定帧率信息的指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
开启user picture功能的Input port不能被绑定且需要被开启。
-
举例
MI_SYS_ChnInputPortSetUserPicture调用Sample
int test0() { MI_SYS_ChnPort_t stChnPort; MI_SYS_BufConf_t stBufConf; MI_SYS_BufInfo_t stBufInfo; MI_SYS_BUF_HANDLE bufHandle; MI_SYS_UserPictureInfo_t stUserPictureInfo; memset(&stChnPort , 0 , sizeof(stChnPort)); memset(&stBufConf, 0 , sizeof(stBufConf)); memset(&stBufInfo, 0 , sizeof(stBufInfo)); stChnPort.eModId = E_MI_MODULE_ID_ISP; stChnPort.u32DevId = 0; stChnPort.u32ChnId = 0; stChnPort.u32PortId =0; stBufConf.eBufType = E_MI_SYS_BUFDATA_FRAME; stBufConf.stFrameCfg.u16Width = 1920; stBufConf.stFrameCfg.u16Height = 1080; stBufConf.stFrameCfg.eFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; MI_SYS_ChnInputPortGetBuf(&stChnPort , & stBufConf , & stBufInfo , & bufHandle , 100); /*************************** 向stBufInfo里填充相应数据 ***************************/ stUserPictureInfo.u32SrcFrc = 30;//每秒30帧 MI_SYS_ChnInputPortSetUserPicture( bufHandle , & stBufInfo , & stUserPictureInfo); MI_SYS_EnableUserPicture(bufHandle); …….. …….. …….. MI_SYS_DisableUserPicture(bufHandle); return 0; }
-
相关主题
2.4.19. MI_SYS_EnableUserPicture¶
-
功能
打开user picture 功能。
-
语法
MI_S32 MI_SYS_EnableUserPicture(MI_SYS_BUF_HANDLE BufHandle);
-
形参
参数名称 描述 输入/输出 BufHandle 通过MI_SYS_ChnInputPortSetUserPicture 向驱动设定bufinfo 的Handle句柄 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.4.20. MI_SYS_DisableUserPicture¶
-
功能
关闭user picture 功能,并释放buf。
-
语法
MI_S32 MI_SYS_ DisableUserPicture (MI_SYS_BUF_HANDLE hHandle);
-
形参
参数名称 描述 输入/输出 BufHandle 通过MI_SYS_ChnInputPortSetUserPicture 向驱动设定的bufinfo 的Handle句柄 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.4.21. MI_SYS_SetChnOutputPortUserFrc¶
-
功能
设置output port输出帧率。
-
语法
MI_S32 MI_SYS_SetChnOutputPortUserFrc((MI_SYS_ChnPort_t *pstChnPort, MI_U32 u32SrcFrmrate, MI_U32 u32DstFrmrate);
-
形参
参数名称 描述 输入/输出 pstChnPort 端口信息结构体指针 输入 u32SrcFrmrate 设定buf源的输出帧率 输入 u32DstFrmrate 设定OutPutPort buf输入的帧率 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.4.22. MI_SYS_SetChnOutputPortBufExtConf¶
-
功能
设置outputBuf的对齐方式。
-
语法
MI_S32 MI_SYS_SetChnOutputPortBufExtConf(MI_SYS_ChnPort_t *pstChnPort, MI_SYS_FrameBufExtraConfig_t *pstBufExtraConf);
-
形参
参数名称 描述 输入/输出 pstChnPort 端口信息结构体指针 输入 pstBufExtraConf 设定OutPutPort buf的宽高对齐结构体指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
u16BufHAlignment需要满足16对齐。
-
如需取消用户设置,将u16BufHAlignment、u16BufVAlignment设置为0,调用接口再设置一次即可。
-
-
举例
-
相关主题
2.4.23. MI_SYS_SetChnInputPortFrc¶
-
功能
设置InputPort输入帧率。
-
语法
MI_S32 MI_SYS_SetChnInputPortFrc(MI_SYS_ChnPort_t *pstChnPort, MI_SYS_ChnPortFrcAttr_t *pstFrcAttr);
-
形参
参数名称 描述 输入/输出 pstChnPort 端口信息结构体指针 输入 pstFrcAttr 帧率参数结构体指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
此接口在MI_SYS_BindChnPort2之后调用将会覆盖其默认帧率控制策略。
-
设置帧率控制类型为E_MI_SYS_FRC_TYPE_USERINJECT前,请确保InputPort没有与其他OutputPort存在绑定。
-
-
举例
-
相关主题
2.5. 内存管理类API¶
2.5.1. MI_SYS_SetChnMMAConf¶
-
功能
设置模块设备通道输出默认分配内存的MMA池名称。
-
语法
MI_S32 MI_SYS_SetChnMMAConf (MI_U16 u16SocId, MI_ModuleId_e eModId, MI_U32 u32DevId, MI_U32 u32ChnId, MI_U8 *pu8MMAHeapName);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 eModId 待配置的模块ID 输入 u32DevId 待配置的设备ID 输入 u32ChnId 待配置的通道号 输入 pu8MMAHeapName MMA heap name 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
若不调用MI_SYS_SetChnMMAConf接口设置或者设置pu8MMAHeapName值为NULL时,则使用默认的MMA池名称mma_heap_name0。
-
举例
MI_ModuleId_e eVifModeId = E_MI_MODULE_ID_VIF; MI_VIF_DEV vifDev = 0; MI_VIF_CHN vifChn = 0; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; MI_SYS_SetChnMMAConf(u16SocId, eVifModeId, vifDev, vifChn, "mma_heap_name0");
2.5.2. MI_SYS_GetChnMMAConf¶
-
功能
获取模块设备通道输出端口默认分配内存的MMA池名称。
-
语法
MI_S32 MI_SYS_GetChnMMAConf (MI_U16 u16SocId, MI_ModuleId_e eModId, MI_U32 u32DevId, MI_U32 u32ChnId, void *pu8MMAHeapName, MI_U32 u32Length);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 eModId 待配置的模块ID 输入 u32DevId 待配置的设备ID 输入 u32ChnId 待配置的通道号 输入 pu8MMAHeapName 要获取的MMA heap name 输出 u32Length pu8MMAHeapName 指向内存的长度,最大为64Byte 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
相关主题
2.5.3. MI_SYS_MMA_Alloc¶
-
功能
直接向MMA内存管理器申请分配内存。
-
语法
MI_S32 MI_SYS_MMA_Alloc(MI_U16 u16SocId, MI_U8 *pstMMAHeapName, MI_U32 u32BlkSize ,MI_PHY *phyAddr);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstMMAHeapName 目标MMA heapname 输入 u32BlkSize 待分配的块字节大小 输入 phyAddr 返回的内存块物理地址 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
pstMMAHeapName为NULL时,从默认Heap申请。
-
举例
MI_SYS_MMA_Alloc调用Sample
MI_PHY phySrcBufAddr = 0; void *pVirSrcBufAddr = NULL; MI_U32 srcBuffSize = 1920 * 1980 * 3 / 2; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; srcBuffSize = ALIGN_UP(srcBuffSize, 4096); ret = MI_SYS_MMA_Alloc(u16SocId, NULL, srcBuffSize, &phySrcBufAddr); if(ret != MI_SUCCESS) { printf("alloc src buff failed\n"); return -1; } ret = MI_SYS_Mmap(phySrcBufAddr, srcBuffSize, &pVirSrcBufAddr, TRUE); if(ret != MI_SUCCESS) { MI_SYS_MMA_Free(u16SocId, phySrcBufAddr); printf("mmap src buff failed\n"); return -1; } memset(pVirSrcBufAddr, 0, srcBuffSize); MI_SYS_FlushInvCache(pVirSrcBufAddr,srcBuffSize); MI_SYS_Munmap(pVirSrcBufAddr, srcBuffSize); MI_SYS_MMA_Free(u16SocId, phySrcBufAddr);
-
相关主题
2.5.4. MI_SYS_MMA_Free¶
-
功能
直接向MMA内存管理器释放之前分配的内存。
-
语法
MI_S32 MI_SYS_MMA_Free(MI_U16 u16SocId, MI_U64 phyAddr);
-
形参
参数名称 描述 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 phyAddr 待释放之内存的物理地址 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
-
相关主题
2.5.5. MI_SYS_Mmap¶
-
功能
映射任意物理内存到当前用户态进程的 CPU虚拟地址空间。
-
语法
MI_S32 MI_SYS_Mmap(MI_U64 u64PhyAddr, MI_U32 u32Size , void **ppVirtualAddress ,MI_BOOL bCache);
-
形参
参数名称 描述 输入/输出 u64PhyAddr 待映射的物理地址 输入 u32Size 待映射的物理地址长度 输入 ppVirtualAddress 存储CPU虚拟地址指针的指针 输出 bCache 是否map成cache还是un-cache 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
注意物理地址是SStar内存控制器地址。
-
物理地址建议4KByte对齐。
-
物理地址长度建议4KByte对齐。
-
物理内存必须完整的落在MMA管理的内存范围内或者linux kenrel管理的内存之外。
-
-
举例
参见 MI_SYS_MMA_Alloc调用Sample 举例。
-
相关主题
2.5.6. MI_SYS_FlushInvCache¶
-
功能
Flush cache。
-
语法
MI_S32 MI_SYS_FlushInvCache(MI_VOID *pVirtualAddress, MI_U32 u32Size);
-
形参
参数名称 描述 输入/输出 pVirtualAddress 之前MI_SYS_Mmap 返回的CPU 虚拟地址 输入 u32Size 待flush的cache长度 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
待flush cache的物理地址建议4KByte对齐。
-
待flush cache的映射长度建议4KByte对齐。
-
待flush cache的映射内存范围必须是之前通过MI_SYS_Mmap API获取到的。
-
待flush cache的映射内存应该是MI_SYS_Mmap时采用cache方式进行的,nocache的方式无需flush cache。
-
-
举例
参见 MI_SYS_MMA_Alloc调用Sample举例。
-
相关主题
2.5.7. MI_SYS_Munmap¶
-
功能
取消物理内存到虚拟地址的映射。
-
语法
MI_S32 MI_SYS_UnMmap(MI_VOID *pVirtualAddress, MI_U32 u32Size);
-
形参
参数名称 描述 输入/输出 pVirtualAddress 之前MI_SYS_Mmap 返回的CPU 虚拟地址 输入 u32Size 待取消映射的映射长度 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
待取消映射的虚拟地址建议4KByte对齐。
-
待取消映射的映射长度建议4KByte对齐
-
待取消的映射内存范围必须是之前通过MI_SYS_Mmap API获取到的。
-
-
举例
参见MI_SYS_MMA_Alloc调用Sample 举例。
-
相关主题
2.5.8. MI_SYS_MemsetPa¶
-
功能
通过DMA硬件模块,填充整块物理内存.
-
语法
MI_S32 MI_SYS_MemsetPa(MI_U16 u16SocId, MI_PHY phyPa, MI_U32 u32Val, MI_U32 u32Lenth);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 phyPa 填充的物理地址 输入 u32Val 填充值(注意是4字节) 输入 u32Lenth 填充大小,单位为byte 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
MI_SYS_MemsetPa调用Sample
MI_PHY phySrcBufAddr = 0; MI_PHY phyDstBufAddr = 0; void *pVirSrcBufAddr = NULL; void *pVirDstBufAddr = NULL; MI_U32 buffSize = 1920 * 1980 * 3 / 2; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; buffSize = ALIGN_UP(buffSize, 4096); ret = MI_SYS_MMA_Alloc(u16SocId, NULL, buffSize, &phySrcBufAddr); if(ret != MI_SUCCESS) { printf("alloc src buff failed\n"); return -1; } ret = MI_SYS_MMA_Alloc(u16SocId, NULL, buffSize, &phyDstBufAddr); if(ret != MI_SUCCESS) { MI_SYS_MMA_Free(u16SocId, phySrcBufAddr); printf("alloc dts buff failed\n"); return -1; } MI_SYS_MemsetPa(u16SocId, phySrcBufAddr, 0xffffffff, buffSize); MI_SYS_MemsetPa(u16SocId, phyDstBufAddr, 0x00, buffSize); MI_SYS_MemcpyPa(u16SocId, phyDstBufAddr, phySrcBufAddr, buffSize); MI_SYS_MMA_Free(u16SocId, phySrcBufAddr); MI_SYS_MMA_Free(u16SocId, phyDstBufAddr);
-
相关主题
2.5.9. MI_SYS_MemcpyPa¶
-
功能
通过DMA硬件模块,把源内存数据拷贝到目标内存上.
-
语法
MI_S32 MI_SYS_MemcpyPa(MI_U16 u16SocId, MI_PHY phyDst, MI_PHY phySrc, MI_U32 u32Lenth);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 phyDst 目的物理地址 输入 phySrc 源物理地址 输入 u32Lenth 拷贝大小,单位为byte 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
举例
参见MI_SYS_MemsetPa 举例。
-
相关主题
2.5.10. MI_SYS_BufFillPa¶
-
功能
通过DMA硬件模块,填充部分物理内存。
-
语法
MI_S32 MI_SYS_BufFillPa(MI_U16 u16SocId, MI_SYS_FrameData_t *pstBuf, MI_U32 u32Val, MI_SYS_WindowRect_t *pstRect);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstBuf 填充的帧数据描述之结构体 输入 u32Val 填充值 输入 pstRect 填充的数据范围 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
pstRect数据范围是以pstBuf所描述的首地址为(0,0)点开始,宽高都是以pstBuf中的ePixelFormat来计算每一个pixel所移动的内存数据大小来进行部分填充。
-
pstBuf中u16Width、u16Height、phyAddr、u32Stride、ePixelFormat为必填,其余数值无意义。
-
-
举例
MI_SYS_BufFillPa调用Sample
MI_S32 ret = 0; MI_SYS_WindowRect_t rect; MI_SYS_FrameData_t stSysFrame; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; memcpy(&stSysFrame, &buf->stFrameData, sizeof(MI_SYS_FrameData_t)); if(pRect) { rect.u16X = pRect->left; rect.u16Y = pRect->top; rect.u16Height = pRect->bottom-pRect->top; rect.u16Width = pRect->right-pRect->left; } else { rect.u16X = 0; rect.u16Y = 0; rect.u16Height = stSysFrame.u16Height; rect.u16Width = stSysFrame.u16Width; } DBG_INFO("rect %d %d %d %d \n", rect.u16X, rect.u16Y , rect.u16Width, rect.u16Height); ret = MI_SYS_BufFillPa(u16SocId, &stSysFrame, u32ColorVal, &rect); return ret;
-
相关主题
2.5.11. MI_SYS_BufBlitPa¶
-
功能
通过DMA硬件模块,把源内存数据上的部分区域拷贝到目标内存上的部分区域。
-
语法
MI_S32 MI_SYS_BufBlitPa(MI_U16 u16SocId, MI_SYS_FrameData_t *pstDstBuf, MI_SYS_WindowRect_t *pstDstRect, MI_SYS_FrameData_t *pstSrcBuf, MI_SYS_WindowRect_t *pstSrcRect);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstDstBuf 目标内存物理首地址 输入 pstDstRect 目标内存拷贝的区域 输入 pstSrcBuf 源内存物理首地址 输入 pstSrcRect 源内存拷贝的区域 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
pstDstRect/pstSrcRect数据范围是以pstDstBuf/pstSrcBuf所描述的首地址为(0,0)点开始,宽高都是以其中的ePixelFormat来计算每一个pixel所移动的内存数据大小来进行部分填充。
-
pstDstBuf/pstSrcBuf中u16Width、u16Height、phyAddr、u32Stride、ePixelFormat为必填,其余数值无意义。
-
源内存或者目标内存的区域部分超过了其本来的范围,则只会拷贝其未超过部分上的数据。
-
-
举例
MI_SYS_BufBlitPa调用Sample
MI_S32 ret = MI_SUCCESS; vdisp_copyinfo_plane_t *plane; MI_SYS_FrameData_t stSrcFrame, stDstFrame; MI_SYS_WindowRect_t stSrcRect, stDstRect; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; plane = ©info->plane[0]; stSrcFrame.ePixelFormat = E_MI_SYS_PIXEL_FRAME_I8; stSrcFrame.phyAddr[0] = plane->src_paddr; stSrcFrame.u16Width = plane->width; stSrcFrame.u16Height = plane->height; stSrcFrame.u32Stride[0] = plane->src_stride; stDstFrame.ePixelFormat = E_MI_SYS_PIXEL_FRAME_I8; stDstFrame.phyAddr[0] = plane->dst_paddr; stDstFrame.u16Width = plane->width; stDstFrame.u16Height = plane->height; stDstFrame.u32Stride[0] = plane->dst_stride; stSrcRect.u16X = 0; stSrcRect.u16Y = 0; stSrcRect.u16Height = stSrcFrame.u16Height; stSrcRect.u16Width = stSrcFrame.u16Width; stDstRect.u16X = 0; stDstRect.u16Y = 0; stDstRect.u16Height = stDstFrame.u16Height; stDstRect.u16Width = stDstFrame.u16Width; ret = MI_SYS_BufBlitPa(u16SocId, &stDstFrame, &stDstRect, &stSrcFrame, &stSrcRect); return ret;
-
相关主题
2.5.12. MI_SYS_ConfigPrivateMMAPool¶
-
功能
为模块配置私有MMA Heap.
-
语法
MI_S32 MI_SYS_ConfigPrivateMMAPool(MI_U16 u16SocId, MI_SYS_GlobalPrivPoolConfig_t *pstGlobalPrivPoolConf);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 pstGlobalPrivPoolConf 配置私有Mma Pool结构体指针 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
-
设备私有MMA Heap与通道私有MMA Heap不能共存。
-
建议在MI_SYS_Init后就为各模块创建好私有MMA heap。
-
当pstGlobalPrivPoolConf->bCreate 为TRUE时,创建私有POOL,为FALSE时,销毁私有POOL
-
各种eConfigType使用场景如下:
eConfigType 适用场景 E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL 为绑定为E_MI_SYS_BIND_TYPE_HW_RING模式的scl与venc端口设置私有ring heap pool。如果是mi_sys v2.0,则表示vpe与venc端口的设置。 E_MI_SYS_PRE_CHN_PRIVATE_POOL 为模块通道设置私有heap pool E_MI_SYS_PRE_DEV_PRIVATE_POOL 为模块设备设置私有heap pool E_MI_SYS_PER_CHN_PORT_OUTPUT_POOL 为模块output port设置heap pool,设置后该port口的output buf优先从其中分配
-
-
举例
假设场景为:IPC 下两路流,一路Main Stream H265最大分辨率1920*1080,一路Sub Stream H264最大分辨率720*576。
VENC 创建MMA Heap:
//Main Sream: //为通道1创建大小为38745760的私有MMA heap MI_SYS_GlobalPrivPoolConfig_t stConfig; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; memset(&stConfig , 0 ,sizeof(stConfig)); stConfig.eConfigType = E_MI_SYS_PER_CHN_PRIVATE_POOL; stConfig.bCreate = TRUE; stConfig.uConfig.stPreChnPrivPoolConfig.eModule = E_MI_MODULE_ID_VENC; stConfig.uConfig.stPreChnPrivPoolConfig.u32Devid = 0; stConfig.uConfig.stPreChnPrivPoolConfig.u32Channel= 1; stConfig.uConfig.stPreChnPrivPoolConfig.u32PrivateHeapSize = 38745760; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig); //Sub Stream: //为通道2创建大小为805152的私有MMA Heap stConfig.eConfigType = E_MI_SYS_PER_CHN_PRIVATE_POOL; stConfig.bCreate = TRUE; stConfig.uConfig.stPreChnPrivPoolConfig.eModule = E_MI_MODULE_ID_VENC; stConfig.uConfig.stPreChnPrivPoolConfig.u32Devid = 0; stConfig.uConfig.stPreChnPrivPoolConfig.u32Channel= 2; stConfig.uConfig.stPreChnPrivPoolConfig.u32PrivateHeapSize = 805152; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
VENC 销毁MMA Heap:
// Main Sream: //销毁通道1的私有MMA heap stConfig.eConfigType = E_MI_SYS_PER_CHN_PRIVATE_POOL; stConfig.bCreate = FALSE; stConfig.uConfig.stPreChnPrivPoolConfig.eModule = E_MI_MODULE_ID_VENC; stConfig.uConfig.stPreChnPrivPoolConfig.u32Devid = 0; stConfig.uConfig.stPreChnPrivPoolConfig.u32Channel= 1; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig); //Sub Stream: //销毁通道2的私有MMA Heap stConfig.eConfigType = E_MI_SYS_PER_CHN_PRIVATE_POOL; stConfig.bCreate = FALSE; stConfig.uConfig.stPreChnPrivPoolConfig.eModule = E_MI_MODULE_ID_VENC; stConfig.uConfig.stPreChnPrivPoolConfig.u32Devid = 0; stConfig.uConfig.stPreChnPrivPoolConfig.u32Channel= 2; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
ISP 创建MMA Heap:
//为设备0创建大小为0x4f9200的私有MMA Heap stConfig.eConfigType = E_MI_SYS_PER_DEV_PRIVATE_POOL; stConfig.bCreate = TRUE; stConfig.uConfig.stPreDevPrivPoolConfig.eModule = E_MI_MODULE_ID_ISP; stConfig.uConfig.stPreDevPrivPoolConfig.u32Devid = 0; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
ISP 销毁MMA Heap:
//销毁设备0的私有MMA Heap stConfig.eConfigType = E_MI_SYS_PER_DEV_PRIVATE_POOL; stConfig.bCreate = FALSE; stConfig.uConfig.stPreDevPrivPoolConfig.eModule = E_MI_MODULE_ID_ISP; stConfig.uConfig.stPreChnPrivPoolConfig.u32Devid = 0; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
创建SCL与VENC之间的ring MMA Heap:
stConfig.eConfigType = E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL; stConfig.bCreate = TRUE; stConfig.uConfig.stPreVpe2VencRingPrivPoolConfig.u32VencInputRingPoolStaticSize = 8*1024*1024; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
销毁SCL与VENC之间的ring MMA Heap:
stConfig.eConfigType = E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL; stConfig.bCreate = FALSE; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
不同分辨率或开启不同功能size大小都不一样,详细参数请根据使用的场景和规格计算。
-
相关主题
2.5.13. MI_SYS_PrivateDevChnHeapAlloc¶
-
功能
从模块通道私有MMA Pool 申请内存.
-
语法
MI_S32 MI_SYS_PrivateDevChnHeapAlloc(MI_U16 u16SocId, MI_ModuleId_e eModule, MI_U32 u32Devid, MI_S32 s32ChnId, MI_U8 *pu8BufName, MI_U32 u32blkSize, MI_PHY *pphyAddr, MI_BOOL bTailAlloc);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 eModule 模块ID 输入 u32Devid 模块的设备ID 输入 s32ChnId 模块的通道ID 输入 pu8BufName 申请私有内存的名字,传Null时,使用 "app-privAlloc"作为默认的名字 输入 u32blkSize 申请私有内存的大小 输入 pphyAddr 分配出的私有内存的物理地址 输出 bTailAlloc 是否从通道私有pool的尾部申请 0-否,1-是 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
使用该接口时,请确定已经先使用MI_SYS_ConfigPrivateMMAPool申请了E_MI_SYS_PRE_CHN_PRIVATE_POOL类型的私有内存池。
-
举例
MI_SYS_PrivateDevChnHeapAlloc调用Sample
MI_PHY *pphyAddr = NULL; MI_SYS_GlobalPrivPoolConfig_t stConfig; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; Memset(&stConfig , 0 ,sizeof(stConfig)); stConfig.eConfigType = E_MI_SYS_PER_CHN_PRIVATE_POOL; stConfig.bCreate = TRUE; stConfig.uConfig.stPreChnPrivPoolConfig. eModule = E_MI_MODULE_ID_VENC; stConfig.uConfig.stPreChnPrivPoolConfig. u32Devid = 0; stConfig.uConfig.stPreChnPrivPoolConfig. u32Channel= 1; stConfig.uConfig.stPreChnPrivPoolConfig. u32PrivateHeapSize = 38745760; MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig); ret = MI_SYS_PrivateDevChnHeapAlloc(u16SocId, E_MI_MODULE_ID_VENC, 0, 1, NULL, 4096, pphyAddr, FALSE); if(ret != MI_SUCCESS) { MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig); printf("alloc buff from chn private heap failed\n"); return -1; } //do something... MI_SYS_PrivateDevChnHeapFree(u16SocId, E_MI_MODULE_ID_VENC, 0, 1, *pphyAddr); MI_SYS_ConfigPrivateMMAPool(u16SocId, &stConfig);
-
相关主题
2.5.14. MI_SYS_PrivateDevChnHeapFree¶
-
功能
从模块通道私有MMA Pool 释放内存.
-
语法
MI_S32 MI_SYS_PrivateDevChnHeapFree(MI_U16 u16SocId, MI_ModuleId_e eModule, MI_U32 u32Devid, MI_S32 s32ChnId, MI_PHY phyAddr);
-
形参
参数名称 参数含义 输入/输出 u16SocId 指定执行本操作的目标Soc 输入 eModule 模块ID 输入 u32Devid 模块的设备ID 输入 s32ChnId 模块的通道ID 输入 phyAddr 需要释放的内存对应的物理地址 输入 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
使用该接口时,请确定已经先使用MI_SYS_ConfigPrivateMMAPool申请了E_MI_SYS_PRE_CHN_PRIVATE_POOL类型的私有内存池。如果没有配置对应的私有池,默认会在mma_heap_name0申请内存。
-
举例
-
相关主题
2.5.15. MI_SYS_Va2Pa¶
-
功能
将MI内存块的CPU虚拟地址转成内存物理地址.
-
语法
MI_S32 MI_SYS_Va2Pa (void *pVirtualAddress, MI_PHY *pPhyAddr);
-
形参
参数名称 参数含义 输入/输出 pVirtualAddress CPU虚拟地址指针 输入 pPhyAddr 存储内存块物理地址的指针 输出 -
返回值
-
0 成功。
-
非0 失败,参照错误码。
-
-
依赖
-
头文件:mi_sys_datatype.h、mi_sys.h
-
库文件:libmi_sys.a / libmi_sys.so
-
-
注意
使用该接口时,请确定输入的CPU虚拟地址有效且指向MI中分配的地址空间。
-
举例
MI_SYS_Va2Pa调用Sample
MI_PHY phySrcBufAddr = 0; MI_PHY phyAddrVa2Pa = 0; void *pVirSrcBufAddr = NULL; MI_U32 srcBuffSize = 1920 * 1980 * 3 / 2; MI_U16 u16SocId = ST_DEFAULT_SOC_ID; srcBuffSize = ALIGN_UP(srcBuffSize, 4096); ret = MI_SYS_MMA_Alloc(u16SocId, NULL, srcBuffSize, &phySrcBufAddr); if(ret != MI_SUCCESS) { printf("alloc src buff failed\n"); return -1; } ret = MI_SYS_Mmap(phySrcBufAddr, srcBuffSize, &pVirSrcBufAddr, TRUE); if(ret != MI_SUCCESS) { MI_SYS_MMA_Free(u16SocId, phySrcBufAddr); printf("mmap src buff failed\n"); return -1; } MI_SYS_Va2Pa(pVirSrcBufAddr, &phyAddrVa2Pa); assert(phySrcBufAddr == phyAddrVa2Pa); memset(pVirSrcBufAddr, 0, srcBuffSize); MI_SYS_FlushInvCache(pVirSrcBufAddr,srcBuffSize); MI_SYS_Munmap(pVirSrcBufAddr, srcBuffSize); MI_SYS_MMA_Free(u16SocId, phySrcBufAddr);
-
相关主题
3. 数据类型¶
3.1. 数据结构描述格式说明¶
本手册使用 5个参考域描述数据类型的相关信息,它们作用如 个参考域描述数据类型的相关信息,它们作用如 表 3-1所示。
表3-1 数据结构描述格式说明
标签 | 功能 |
---|---|
说明 | 简要描述数据类型的主要功能 |
定义 | 列出数据类型的定义语句 |
成员 | 列出数据结构的成员及含义 |
注意事项 | 列出使用数据类型时应注意的事项 |
相关数据类型及接口 | 列出与本数据类型相关联的其他数据类型和接口 |
3.2. 数据结构列表¶
相关数据类型、数据结构定义如下:
3.2.1. MI_ModuleId_e¶
-
说明
定义模块ID枚举类型。
-
定义
typedef enum { E_MI_MODULE_ID_IVE = 0, E_MI_MODULE_ID_VDF = 1, E_MI_MODULE_ID_VENC = 2, E_MI_MODULE_ID_RGN = 3, E_MI_MODULE_ID_AI = 4, E_MI_MODULE_ID_AO = 5, E_MI_MODULE_ID_VIF = 6, E_MI_MODULE_ID_VPE = 7, E_MI_MODULE_ID_VDEC = 8, E_MI_MODULE_ID_SYS = 9, E_MI_MODULE_ID_FB = 10, E_MI_MODULE_ID_HDMI = 11, E_MI_MODULE_ID_DIVP = 12, E_MI_MODULE_ID_GFX = 13, E_MI_MODULE_ID_VDISP = 14, E_MI_MODULE_ID_DISP = 15, E_MI_MODULE_ID_OS = 16, E_MI_MODULE_ID_IAE = 17, E_MI_MODULE_ID_MD = 18, E_MI_MODULE_ID_OD = 19, E_MI_MODULE_ID_SHADOW = 20, E_MI_MODULE_ID_WARP = 21, E_MI_MODULE_ID_UAC = 22, E_MI_MODULE_ID_LDC = 23, E_MI_MODULE_ID_SD = 24, E_MI_MODULE_ID_PANEL = 25, E_MI_MODULE_ID_CIPHER = 26, E_MI_MODULE_ID_SNR = 27, E_MI_MODULE_ID_WLAN =28, E_MI_MODULE_ID_IPU = 29, E_MI_MODULE_ID_MIPITX = 30, E_MI_MODULE_ID_GYRO = 31, E_MI_MODULE_ID_JPD = 32, E_MI_MODULE_ID_ISP = 33, E_MI_MODULE_ID_SCL = 34, E_MI_MODULE_ID_WBC = 35, E_MI_MODULE_ID_DSP = 36, E_MI_MODULE_ID_PCIE = 37, E_MI_MODULE_ID_DUMMY = 38, //E_MI_MODULE_ID_SED = 29, E_MI_MODULE_ID_MAX, } MI_ModuleId_e;
-
成员
模块ID 模块ID HEX值 成员名称 模块 0 0x00 E_MI_MODULE_ID_IVE 图像智能算子IVE的模块ID 1 0x01 E_MI_MODULE_ID_VDF 视频智能算法框架模块VDF的模块ID 2 0x02 E_MI_MODULE_ID_VENC 视频编码模块VENC的模块ID 3 0x03 E_MI_MODULE_ID_RGN OSD叠加和遮挡模块REG的模块ID 4 0x04 E_MI_MODULE_ID_AI 音频输入模块AI的模块ID 5 0x05 E_MI_MODULE_ID_AO 音频输出模块AO的模块ID 6 0x06 E_MI_MODULE_ID_VIF 视频输入VIF的模块ID 7 0x07 E_MI_MODULE_ID_VPE 视频图像处理模块VPE的模块ID 8 0x08 E_MI_MODULE_ID_VDEC 视频解码VEDC的模块ID 9 0x09 E_MI_MODULE_ID_SYS 系统模块SYS的模块ID 10 0x0A E_MI_MODULE_ID_FB SStar UI显示FrameBuffer Device 模块的模块ID 11 0x0B E_MI_MODULE_ID_HDMI HMDI模块ID 12 0x0C E_MI_MODULE_ID_DIVP 视频DI及后处理模块DIVP的模块ID 13 0x0D E_MI_MODULE_ID_GFX 2D图形处理加速模块GFX的模块ID 14 0x0E E_MI_MODULE_ID_VDISP 图像拼图模块VDISP的模块ID 15 0x0F E_MI_MODULE_ID_DISP 视频显示模块DISP的模块ID 16 0x10 E_MI_MODULE_ID_OS RTOS系统模块ID 17 0x11 E_MI_MODULE_ID_IAE 音频智能算子IAE的模块ID 18 0x12 E_MI_MODULE_ID_MD 移动侦测模块MD的模块ID 19 0x13 E_MI_MODULE_ID_OD 遮挡侦测模块OD的模块ID 20 0x14 E_MI_MODULE_ID_SHADOW 虚拟MI框架SHADOW的模块ID 21 0x15 E_MI_MODULE_ID_WARP 图像畸形校正算法WARP的模块ID 22 0x16 E_MI_MODULE_ID_UAC USB Aduio Class专用ALSA设备的模块ID 23 0x17 E_MI_MODULE_ID_LDC 图像畸形校正算法LDC的模块ID 24 0x18 E_MI_MODULE_ID_SD 图像缩放功能的模块ID 25 0x19 E_MI_MODULE_ID_PANEL 屏显示PANEL的模块ID 26 0x1A E_MI_MODULE_ID_CIPHER 芯片加密CIPHER的模块ID 27 0x1B E_MI_MODULE_ID_SNR Sensor传感器模块ID 28 0x1C E_MI_MODULE_ID_WLAN 无线通信网络WLAN的模块ID 29 0x1D E_MI_MODULE_ID_IPU 图像识别处理IPU的模块ID 30 0x1E E_MI_MODULE_ID_MIPITX 使用MIPI协议发送数据模块ID 31 0x1F E_MI_MODULE_ID_GYRO 陀螺仪的模块ID 32 0x20 E_MI_MODULE_ID_JPD JPD处理的模块ID 33 0x21 E_MI_MODULE_ID_ISP 图像信号处理的模块ID 34 0x22 E_MI_MODULE_ID_SCL 图像缩放处理的模块ID 35 0x23 E_MI_MODULE_ID_WBC 视频回写的模块ID 36 0X24 E_MI_MODULE_ID_DSP DSP模块ID 37 0X25 E_MI_MODULE_ID_PCIE PCIE模块ID 38 0X26 E_MI_MODULE_ID_DUMMY 内部测试模块ID
3.2.2. MI_SYS_PixelFormat_e¶
-
说明
定义像素枚举类型。
-
定义
typedef enum { E_MI_SYS_PIXEL_FRAME_YUV422_YUYV = 0, E_MI_SYS_PIXEL_FRAME_ARGB8888, E_MI_SYS_PIXEL_FRAME_ABGR8888, E_MI_SYS_PIXEL_FRAME_BGRA8888, E_MI_SYS_PIXEL_FRAME_RGB565, E_MI_SYS_PIXEL_FRAME_ARGB1555, E_MI_SYS_PIXEL_FRAME_ARGB4444, E_MI_SYS_PIXEL_FRAME_I2, E_MI_SYS_PIXEL_FRAME_I4, E_MI_SYS_PIXEL_FRAME_I8, E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_422, E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420, E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420_NV21, E_MI_SYS_PIXEL_FRAME_YUV_TILE_420, E_MI_SYS_PIXEL_FRAME_YUV422_UYVY, E_MI_SYS_PIXEL_FRAME_YUV422_YVYU, E_MI_SYS_PIXEL_FRAME_YUV422_VYUY, E_MI_SYS_PIXEL_FRAME_YUV422_PLANAR, E_MI_SYS_PIXEL_FRAME_YUV420_PLANAR, E_MI_SYS_PIXEL_FRAME_FBC_420, E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE, E_MI_SYS_PIXEL_FRAME_RGB_BAYER_NUM = E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE + E_MI_SYS_DATA_PRECISION_MAX*E_MI_SYS_PIXEL_BAYERID_MAX-1, E_MI_SYS_PIXEL_FRAME_RGB888, E_MI_SYS_PIXEL_FRAME_BGR888, E_MI_SYS_PIXEL_FRAME_GRAY8, E_MI_SYS_PIXEL_FRAME_RGB101010, E_MI_SYS_PIXEL_FRAME_RGB888_PLANAR, E_MI_SYS_PIXEL_FRAME_FORMAT_MAX, } MI_SYS_PixelFormat_e;
-
成员
成员名称 描述 E_MI_SYS_PIXEL_FRAME_YUV422_YUYV YUV422_YUYV格式 E_MI_SYS_PIXEL_FRAME_ARGB8888 ARGB8888格式 E_MI_SYS_PIXEL_FRAME_ABGR8888 ABGR8888格式 E_MI_SYS_PIXEL_FRAME_BGRA8888 BGRA8888格式 E_MI_SYS_PIXEL_FRAME_RGB565 RGB565格式 E_MI_SYS_PIXEL_FRAME_ARGB1555 ARGB1555格式 E_MI_SYS_PIXEL_FRAME_ARGB4444 ARGB4444格式 E_MI_SYS_PIXEL_FRAME_I2 2 bpp格式 E_MI_SYS_PIXEL_FRAME_I4 4 bpp格式 E_MI_SYS_PIXEL_FRAME_I8 8 bpp格式 E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_422 YUV422 semi-planar格式 E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420 YUV420sp nv12格式 E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420_NV21 YUV420sp nv21格式 E_MI_SYS_PIXEL_FRAME_YUV_TILE_420 内部自定义TILE格式 E_MI_SYS_PIXEL_FRAME_YUV422_UYVY YUV422_UYVY格式 E_MI_SYS_PIXEL_FRAME_YUV422_YVYU YUV422_YVYU格式 E_MI_SYS_PIXEL_FRAME_YUV422_VYUY YUV422_VYUY格式 E_MI_SYS_PIXEL_FRAME_YUV422_PLANAR YUV422_PLANAR格式 E_MI_SYS_PIXEL_FRAME_YUV420_PLANAR YUV420_PLANAR格式 E_MI_SYS_PIXEL_FRAME_FBC_420 内部自定义格式 E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE RGB raw data 组合格式的起始值 E_MI_SYS_PIXEL_FRAME_RGB_BAYER_NUM RGB raw data 组合格式的最大值 E_MI_SYS_PIXEL_FRAME_RGB888 RGB888格式 E_MI_SYS_PIXEL_FRAME_BGR888 BGR888格式 E_MI_SYS_PIXEL_FRAME_GRAY8 8bit 灰度格式 E_MI_SYS_PIXEL_FRAME_RGB101010 RGB101010 格式 E_MI_SYS_PIXEL_FRAME_RGB888_PLANAR RGB888_PLANER格式 E_MI_SYS_PIXEL_FRAME_FORMAT_MAX 枚举的最大值 -
注意事项
-
E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE, E_MI_SYS_PIXEL_FRAME_RGB_BAYER_NUM 是提供给RGB raw data 组合格式使用的。此格式下,sensor提供的bit位ePixPrecision和排列顺序eBayerId,通过RGB_BAYER_PIXEL宏对其组合生成RGB raw data 组合格式的enum值。
-
RGB_BAYER_PIXEL宏定义:#define RGB_BAYER_PIXEL(BitMode, PixelID) (E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE + BitMode * E_MI_SYS_PIXEL_BAYERID_MAX + PixelID),其取值范围为: (E_MI_SYS_PIXEL_FRAME_RGB_BAYER_BASE, E_MI_SYS_PIXEL_FRAME_RGB_BAYER_NUM)。
下面提供了一个使用的小例子,更详细的信息请参考对应模块的API文档。
static MI_SYS_PixelFormat_e getRawType(STUB_SensorType_e sensorType) { MI_SYS_PixelFormat_e eRawType = E_MI_SYS_PIXEL_FRAME_RGB_BAYER_NUM; MI_SNR_PlaneInfo_t stSnrPlane0Info; memset(&stSnrPlane0Info, 0x0, sizeof(MI_SNR_PlaneInfo_t)); MI_SNR_GetPlaneInfo(E_MI_SNR_PAD_ID_0, 0, &stSnrPlane0Info); eRawType = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId); return eRawType; }
-
3.2.3. MI_SYS_CompressMode_e¶
-
说明
定义压缩方式枚举类型。
-
定义
typedef enum { E_MI_SYS_COMPRESS_MODE_NONE,//no compress E_MI_SYS_COMPRESS_MODE_SEG,//compress unit is 256 bytes as a segment E_MI_SYS_COMPRESS_MODE_LINE,//compress unit is the whole line E_MI_SYS_COMPRESS_MODE_FRAME,//compress unit is the whole frame E_MI_SYS_COMPRESS_MODE_TO_8BIT, E_MI_SYS_COMPRESS_MODE_TO_6BIT, E_MI_SYS_COMPRESS_MODE_AFBC, E_MI_SYS_COMPRESS_MODE_SFBC0, E_MI_SYS_COMPRESS_MODE_SFBC1, E_MI_SYS_COMPRESS_MODE_SFBC2, E_MI_SYS_COMPRESS_MODE_BUTT, //number } MI_SYS_CompressMode_e;
-
成员
成员名称 描述 E_MI_SYS_COMPRESS_MODE_NONE 非压缩的视频格式 E_MI_SYS_COMPRESS_MODE_SEG 段压缩的视频格式 E_MI_SYS_COMPRESS_MODE_LINE 行压缩的视频格式,按照一行为一段进行压缩 E_MI_SYS_COMPRESS_MODE_FRAME 帧压缩的视频格式,将一帧数据进行压缩 E_MI_SYS_COMPRESS_MODE_TO_8BIT Pixel 压缩到8bit E_MI_SYS_COMPRESS_MODE_TO_6BIT Pixel 压缩到6bit E_MI_SYS_COMPRESS_MODE_AFBC Arm frame buffer compression E_MI_SYS_COMPRESS_MODE_SFBC0 Sigmastar 压缩方式0 E_MI_SYS_COMPRESS_MODE_SFBC1 Sigmastar 压缩方式1 E_MI_SYS_COMPRESS_MODE_SFBC2 Sigmastar 压缩方式2 E_MI_SYS_COMPRESS_MODE_BUTT 视频压缩方式的数量
3.2.4. MI_SYS_FrameTileMode_e¶
-
说明
定义Tile格式枚举类型。
-
定义
typedef enum { E_MI_SYS_FRAME_TILE_MODE_NONE = 0, E_MI_SYS_FRAME_TILE_MODE_16x16, // tile mode 16x16 E_MI_SYS_FRAME_TILE_MODE_16x32, // tile mode 16x32 E_MI_SYS_FRAME_TILE_MODE_32x16, // tile mode 32x16 E_MI_SYS_FRAME_TILE_MODE_32x32, // tile mode 32x32 E_MI_SYS_FRAME_TILE_MODE_128x32, // tile mode 128x32 E_MI_SYS_FRAME_TILE_MODE_128x64, // tile mode 128x64 E_MI_SYS_FRAME_TILE_MODE_MAX } MI_SYS_FrameTileMode_e;
-
成员
成员名称 描述 E_MI_SYS_FRAME_TILE_MODE_NONE None E_MI_SYS_FRAME_TILE_MODE_16x16 16x16 mode E_MI_SYS_FRAME_TILE_MODE_16x32 16x32 mode E_MI_SYS_FRAME_TILE_MODE_32x16 32x16 mode E_MI_SYS_FRAME_TILE_MODE_32x32 32x32 mode E_MI_SYS_FRAME_TILE_MODE_128x32 128x32 mode E_MI_SYS_FRAME_TILE_MODE_128x64 128x64 mode
3.2.5. MI_SYS_FieldType_e¶
-
说明
定义枚举类型。
-
定义
typedef enum { E_MI_SYS_FIELDTYPE_NONE, //< no field. E_MI_SYS_FIELDTYPE_TOP, //< Top field only. E_MI_SYS_FIELDTYPE_BOTTOM, //< Bottom field only. E_MI_SYS_FIELDTYPE_BOTH, //< Both fields. E_MI_SYS_FIELDTYPE_NUM } MI_SYS_FieldType_e;
-
成员
成员名称 描述 E_MI_SYS_FIELDTYPE_NONE None E_MI_SYS_FIELDTYPE_TOP Top field only E_MI_SYS_FIELDTYPE_BOTTOM Bottom field only E_MI_SYS_FIELDTYPE_BOTH Both fields
3.2.6. MI_SYS_BufDataType_e¶
-
说明
定义模块ID枚举类型。
-
定义
typedef enum { E_MI_SYS_BUFDATA_RAW = 0, E_MI_SYS_BUFDATA_FRAME, E_MI_SYS_BUFDATA_META, E_MI_SYS_BUFDATA_MULTIPLANE, E_MI_SYS_BUFDATA_FBC, E_MI_SYS_BUFDATA_MAX } MI_SYS_BufDataType_e;
-
成员
成员名称 描述 E_MI_SYS_BUFDATA_RAW Raw数据类型 E_MI_SYS_BUFDATA_FRAME Frame数据类型 E_MI_SYS_BUFDATA_META Meta数据类型 E_MI_SYS_BUFDATA_MULTIPLANE MultiPlane数据类型 E_MI_SYS_BUFDATA_FBC FBC数据类型 E_MI_SYS_BUFDATA_MAX 数据类型数目
3.2.7. MI_SYS_FrameIspInfoType_e¶
-
说明
定义frame data携带的ISP info枚举类型。
-
定义
typedef enum { E_MI_SYS_FRAME_ISP_INFO_TYPE_NONE, E_MI_SYS_FRAME_ISP_INFO_TYPE_GLOBAL_GRADIENT } MI_SYS_FrameIspInfoType_e;
-
成员
成员名称 描述 E_MI_SYS_FRAME_ISP_INFO_TYPE_NONE NONE E_MI_SYS_FRAME_ISP_INFO_TYPE_GLOBAL_GRADIENT ISP的全局梯度数据类型
3.2.8. MI_SYS_ChnPort_t¶
-
说明
定义模块设备通道结构体。
-
定义
typedef struct MI_SYS_ChnPort_s { MI_ModuleId_e eModId; MI_U32 u32DevId; MI_U32 u32ChnId; MI_U32 u32PortId; } MI_SYS_ChnPort_t;
-
成员
成员名称 描述 eModId 模块号 u32DevId 设备号 u32ChnId 通道号 u32PortId 端口号
3.2.9. MI_SYS_MetaData_t¶
-
说明
定义码流MetaData的结构体。
-
定义
typedef struct MI_SYS_MetaData_s { void* pVirAddr; MI_PHY phyAddr;//notice that this is miu bus addr,not cpu bus addr. MI_U32 u32Size; MI_U32 u32ExtraData; /*driver special flag*/ MI_ModuleId_e eDataFromModule; } MI_SYS_MetaData_t;
-
成员
成员名称 描述 pVirAddr 数据存放虚拟地址。 phyAddr 数据存放物理地址 u32Size 数据大小 u32ExtraData driver special flag eDataFromModule 来自哪个模块的数据
3.2.10. MI_SYS_RawData_t¶
-
说明
定义码流RawData的结构体。
-
定义
typedef struct MI_SYS_RawData_s { void* pVirAddr; MI_PHY phyAddr;//notice that this is miu bus addr,not cpu bus addr. MI_U32 u32BufSize; MI_U32 u32ContentSize; MI_BOOL bEndOfFrame; MI_U64 u64SeqNum; } MI_SYS_RawData_t;
-
成员
成员名称 描述 pVirAddr 码流包的虚拟地址 phyAddr 码流包的物理地址 u32BufSize Buf大小 u32ContentSize 数据实际占用buf大小 bEndOfFrame 当前帧是否结束。(预留参数)当前只支持帧模式下按帧传送。 u64SeqNum 当前帧的帧序号 -
注意事项
-
当前只支持按帧传送数据,每次需完整传送一帧数据。
-
码流帧数据附带PTS时,解码后输出数据输出相同PTS。当PTS=-1时,不参考系统时钟输出数据帧。
-
3.2.11. MI_SYS_WindowRect_t¶
-
说明
定义window坐标的结构体。
-
定义
typedef struct MI_SYS_WindowRect_s { MI_U16 u16X; MI_U16 u16Y; MI_U16 u16Width; MI_U16 u16Height; } MI_SYS_WindowRect_t;
-
成员
成员名称 描述 u16X window起始位置的水平方向的值。 u16Y window起始位置的垂直方向的值。 u16Width window宽度。 u16Height window高度。
3.2.12. MI_SYS_FrameData_t¶
-
说明
定义码流FrameData的结构体。
-
定义
//N.B. in MI_SYS_FrameData_t should never support u32Size, //for other values are enough,and not support u32Size is general standard method. typedef struct MI_SYS_FrameData_s { MI_SYS_FrameTileMode_e eTileMode; MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompressMode; MI_SYS_FrameScanMode_e eFrameScanMode; MI_SYS_FieldType_e eFieldType; MI_SYS_FrameData_PhySignalType ePhylayoutType; MI_U16 u16Width; MI_U16 u16Height; //in case ePhylayoutType equal to REALTIME_FRAME_DATA, pVirAddr would be MI_SYS_REALTIME_MAGIC_PADDR and phyAddr would be MI_SYS_REALTIME_MAGIC_VADDR void* pVirAddr[3]; MI_PHY phyAddr[3];//notice that this is miu bus addr,not cpu bus addr. MI_U32 u32Stride[3]; MI_U32 u32BufSize;//total size that allocated for this buffer,include consider alignment. MI_U16 u16RingBufStartLine;//Valid in case RINGBUF_FRAME_DATA, u16RingBufStartLine must be LGE than 0 and less than u16Height MI_U16 u16RingBufRealTotalHeight;///Valid in case RINGBUF_FRAME_DATA, u16RingBufStartLine must be LGE than u16Height MI_SYS_FrameIspInfo_t stFrameIspInfo;//isp info of each frame MI_SYS_WindowRect_t stContentCropWindow; } MI_SYS_FrameData_t;
-
成员
成员名称 描述 eTileMode Tile模式 ePixelFormat 像素格式 eCompressMode 压缩格式 eFrameScanMode Frame scan模块 eFieldType File类型 ePhylayoutType frame data隶属的buffer的类型 u16Width Frame宽度 u16Height Frame高度 pVirAddr 虚拟地址 phyAddr 物理地址 u32Stride 图片每行所占字节数 u32BufSize Sys分配给当前frame的实际buf大小 u16RingBufStartLine ring mode时,frame data开始于ring buffer的行数 u16RingBufRealTotalHeight ring mode时,frame data的真实高度 stFrameIspInfo ISP info struct stContentCropWindow Crop info struct
3.2.13. MI_SYS_BufInfo_t¶
-
说明
定义码流信息的结构体。
-
定义
typedef struct MI_SYS_BufInfo_s { MI_U64 u64Pts; MI_U64 u64SidebandMsg; MI_SYS_BufDataType_e eBufType; MI_U32 u32SequenceNumber; MI_U32 bEndOfStream : 1; MI_U32 bUsrBuf : 1; MI_U32 bDrop : 1; MI_U32 bCrcCheck : 1; MI_U32 u32IrFlag : 2; // For Window Hello Usage: 0x00/off, 0x01/on, 0x02/invalid MI_U32 u32Reserved : 26; union { MI_SYS_FrameData_t stFrameData; MI_SYS_RawData_t stRawData; MI_SYS_MetaData_t stMetaData; MI_SYS_FrameDataMultiPlane_t stFrameDataMultiPlane; MI_SYS_FbcData_t stFbcData; }; } MI_SYS_BufInfo_t;
-
成员
成员名称 描述 u64Pts 时间戳 u64SidebandMsg 带外数据 eBufType Buf类型 u32SequenceNumber 序列号 Bit field Bit 0 bEndOfStream 是否已发完所有信息 Bit 1 bUsrBuf 是否是用户使用buf Bit 2 bDrop 是否需要丢弃buf Bit 3 bCrcCkeck 是否开启CRC check Bit 4-5 u32IrFlag Ir标志位 Bit 6-31 u32Reserved 保留位 Union stFrameData Frame数据格式结构体 stRawData Raw数据格式结构体 stMetaData Meta数据格式结构体 stFrameDataMultiPlane 多Frame集合数据格式结构体 stFbcData Frame buffer压缩数据结构体
3.2.14. MI_SYS_FrameBufExtraConfig_t¶
-
说明
定义码流Frame buffer额外配置的结构体。
-
定义
typedef struct MI_SYS_FrameBufExtraConfig_s { //Buf alignment requirement in horizontal MI_U16 u16BufHAlignment; //Buf alignment requirement in vertical MI_U16 u16BufVAlignment; //Buf alignment requirement in chroma MI_U16 u16BufChromaAlignment; // Buf alignment requirement after compress MI_U16 u16BufCompressAlignment; // Buf Extra add after alignment MI_U16 u16BufExtraSize; //Clear padding flag MI_BOOL bClearPadding; } MI_SYS_FrameBufExtraConfig_t;
-
成员
成员名称 描述 u16BufHAlignment 水平方向对齐值 u16BufVAlignment 垂直方向对齐值 u16BufChromaAlignment 色度buffer size对齐值 u16BufCompressAlignment 压缩模式buffer size对齐值 u16BufExtraSize buffer size额外分配值 bClearPadding 是否对buffer的边缘进行涂黑
3.2.15. MI_SYS_BufFrameConfig_t¶
-
说明
定义码流Frame buffer配置的结构体。
-
定义
typedef struct MI_SYS_BufFrameConfig_s { MI_U16 u16Width; MI_U16 u16Height; MI_SYS_FrameScanMode_e eFrameScanMode;// MI_SYS_PixelFormat_e eFormat; MI_SYS_CompressMode_e eCompressMode; } MI_SYS_BufFrameConfig_t;
-
成员
成员名称 描述 u16Width Frame宽度 u16Height Frame高度 eFrameScanMode Frame Scan Mode eFormat Frame像素格式 eCompressMode Frame 压缩模式
3.2.16. MI_SYS_BufRawConfig_t¶
-
说明
定义码流raw buffer配置的结构体。
-
定义
typedef struct MI_SYS_BufRawConfig_s { MI_U32 u32Size; } MI_SYS_BufRawConfig_t;
-
成员
成员名称 描述 u32Size Buf大小
3.2.17. MI_SYS_MetaDataConfig_t¶
-
说明
定义码流meta buffer配置的结构体。
-
定义
typedef struct MI_SYS_MetaDataConfig_s { MI_U32 u32Size; } MI_SYS_MetaDataConfig_t;
-
成员
成员名称 描述 u32Size Buf大小
3.2.18. MI_SYS_BufConf_t¶
-
说明
定义码流Port Buf配置的结构体。
-
定义
typedef struct MI_SYS_BufConf_s { MI_SYS_BufDataType_e eBufType; MI_U32 u32Flags; //0 or MI_SYS_MAP_VA MI_U64 u64TargetPts; MI_BOOL bDirectBuf; // Direct alloc buffer by Others. MI_BOOL bCrcCheck; union { MI_SYS_BufFrameConfig_t stFrameCfg; MI_SYS_BufRawConfig_t stRawCfg; MI_SYS_MetaDataConfig_t stMetaCfg; MI_SYS_BufFrameMultiPlaneConfig_t stMultiPlaneCfg; MI_SYS_BufFrameMetaConfig_t stFrameMetaCfg; // support frame buffer has alloced by Others. MI_SYS_FbcDataConfig_t stFbcCfg; }; } MI_SYS_BufConf_t;
-
成员
成员名称 描述 eBufType Buf type u32Flags Buf是否map kernel space va u64TargetPts 设置buf 的Pts bDirectBuf Direct alloc buffer by Others bCrcCheck Buf是否开启crc校验 Union stFrameCfg 设置Frame数据格式参数 stRawCfg 设置Raw数据格式参数 stMetaCfg 设置Meta数据格式参数 stMultiPlaneCfg 设置多Frame数据格式参数 stFrameMetaCfg Frame meta data配置 stFbcCfg Fbc数据配置
3.2.19. MI_SYS_Version_t¶
-
说明
定义Sys版本信息结构体。
-
定义
typedef struct MI_SYS_Version_s { MI_U8 u8Version[128]; } MI_SYS_Version_t;
-
成员
成员名称 描述 u8Version[128] 描述sys版本信息的字符串buf
3.2.20. MI_VB_PoolListConf_t¶
-
说明
定义描述VB Pool链表信息的结构体。
-
定义
typedef struct MI_VB_PoolListConf_s { MI_U32 u32PoolListCnt; MI_VB_PoolConf_t stPoolConf[MI_VB_POOL_LIST_MAX_CNT]; } MI_VB_PoolListConf_t;
-
成员
成员名称 描述 u32PoolListCnt VB pool 链表成员数量 stPoolConf VB pool 链表成员配置信息
3.2.21. MI_SYS_BindType_e¶
-
说明
定义前后级工作模式。
-
定义
typedef enum { E_MI_SYS_BIND_TYPE_FRAME_BASE = 0x00000001, E_MI_SYS_BIND_TYPE_SW_LOW_LATENCY = 0x00000002, E_MI_SYS_BIND_TYPE_REALTIME = 0x00000004, E_MI_SYS_BIND_TYPE_HW_AUTOSYNC = 0x00000008, E_MI_SYS_BIND_TYPE_HW_RING = 0x00000010 } MI_SYS_BindType_e;
-
成员
成员名称 描述 E_MI_SYS_BIND_TYPE_FRAME_BASE frame mode,默认工作方式 E_MI_SYS_BIND_TYPE_SW_LOW_LATENCY 低时延工作方式 E_MI_SYS_BIND_TYPE_REALTIME 硬件直连工作方式 E_MI_SYS_BIND_TYPE_HW_AUTOSYNC 前后级handshake,buffer size与图像分辨率一致 E_MI_SYS_BIND_TYPE_HW_RING 前后级handshake,ring buffer depth可以调小于图像分辨率高 -
注意事项
-
旧版本MI SYS不提供此功能,如没有找到,不用设置。
-
FRAME_BASE和HW_RING类型使用的内存为DRAM,REALTIME类型使用的内存为SRAM。
-
由于底层限制,被HW_RING或REALTIME类型bind的input port不能使用MI_SYS_ChnInputPortGetBuf/ MI_SYS_ChnInputPortPutBuf接口,output port不能使用 MI_SYS_ChnOutputPortGetBuf/ MI_SYS_ChnOutputPortPutBuf接口。
-
不同bindtype使用内存大小比较:FRAME_BASE类型 > HW_RING类型 > REALTIME类型。
-
3.2.22. MI_SYS_FrameData_PhySignalType¶
-
说明
描述frame data隶属的buffer类型的枚举类型。
-
定义
typedef enum { REALTIME_FRAME_DATA, RINGBUF_FRAME_DATA, NORMAL_FRAME_DATA, } MI_SYS_FrameData_PhySignalType;
-
成员
成员名称 描述 REALTIME_FRAME_DATA 以E_MI_SYS_BIND_TYPE_REALTIME模式 产生的frame data RINGBUF_FRAME_DATA 以E_MI_SYS_BIND_TYPE_HW_RING模式 产生的frame data NORMAL_FRAME_DATA 以E_MI_SYS_BIND_TYPE_FRAME_BASE模式产生的frame data -
注意事项
旧版本MI SYS不提供此功能,如没有找到,不用设置。
3.2.23. MI_SYS_InsidePrivatePoolType_e¶
-
说明
描述创建的私有MMA POOL类型的枚举类型。
-
定义
typedef enum { E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL = 0, E_MI_SYS_PER_CHN_PRIVATE_POOL=1, E_MI_SYS_PER_DEV_PRIVATE_POOL=2, E_MI_SYS_PER_CHN_PORT_OUTPUT_POOL=3, } MI_SYS_InsidePrivatePoolType_e;
-
成员
成员名称 描述 E_MI_SYS_VPE_TO_VENC_PRIVATE_RING_POOL SCL与VENC 的私有Ring Pool 类型。
mi_sys v2.0表示VPE与VENC。E_MI_SYS_PER_CHN_PRIVATE_POOL 通道私有Pool 类型 E_MI_SYS_PER_DEV_PRIVATE_POOL 设备私有Pool 类型 E_MI_SYS_PER_CHN_PORT_OUTPUT_POOL 输出端口私有Pool类型 -
注意事项
旧版本MI SYS不提供此功能,如没有找到,不用设置。
3.2.24. MI_SYS_PerChnPrivHeapConf_t¶
-
说明
定义描述通道私有MMA Pool的结构体。
-
定义
typedef struct MI_PerChnPrivHeapConf_s { MI_ModuleId_e eModule; MI_U32 u32Devid; MI_U32 u32Channel; MI_U8 u8MMAHeapName[MI_MAX_MMA_HEAP_LENGTH]; MI_U32 u32PrivateHeapSize; } MI_SYS_PerChnPrivHeapConf_t;
-
成员
成员名称 描述 eModule 模块ID u32Devid 设备ID u32Channel 通道ID u8MMAHeapName Mma heap name u32PrivateHeapSize 私有pool 大小
3.2.25. MI_SYS_PerDevPrivHeapConf_t¶
-
说明
定义描述设备私有MMA Pool的结构体。
-
定义
typedef struct MI_PerDevPrivHeapConf_s { MI_ModuleId_e eModule; MI_U32 u32Devid; MI_U32 u32Reserve; MI_U8 u8MMAHeapName[MI_MAX_MMA_HEAP_LENGTH]; MI_U32 u32PrivateHeapSize; } MI_SYS_PerDevPrivHeapConf_t;
-
成员
成员名称 描述 eModule 模块ID u32Devid 设备ID u32Reserve 预留 u8MMAHeapName Mma heap name u32PrivateHeapSize 私有pool 大小
3.2.26. MI_SYS_PerVpe2VencRingPoolConf_t¶
-
说明
定义描述SCL与VENC之间的私有Ring MMA Pool的结构体。mi_sys v2.0表示VPE与VENC。
-
定义
typedef struct MI_SYS_PerVpe2VencRingPoolConf_s { MI_U32 u32VencInputRingPoolStaticSize; MI_U8 u8MMAHeapName[MI_MAX_MMA_HEAP_LENGTH]; } MI_SYS_PerVpe2VencRingPoolConf_t;
-
成员
成员名称 描述 u32VencInputRingPoolStaticSize 私有pool大小 u8MMAHeapName Mma heap name
3.2.27. MI_SYS_PerChnPortOutputPool_t¶
-
说明
定义描述output port的私有MMA Pool的结构体。
-
定义
typedef struct MI_SYS_PerChnPortOutputPool_s { MI_ModuleId_e eModule; MI_U32 u32Devid; MI_U32 u32Channel; MI_U32 u32Port; MI_U8 u8MMAHeapName[MI_MAX_MMA_HEAP_LENGTH]; MI_U32 u32PrivateHeapSize; } MI_SYS_PerChnPortOutputPool_t;
-
成员
成员名称 描述 eModule 模块ID u32Devid 设备ID u32Channel 通道ID u32Port 端口ID u8MMAHeapName Mma heap name u32PrivateHeapSize 私有pool 大小
3.2.28. MI_SYS_GlobalPrivPoolConfig_t¶
-
说明
定义描述配置私有 MMA Pool的结构体。
-
定义
typedef struct MI_SYS_GlobalPrivPoolConfig_s { MI_SYS_InsidePrivatePoolType_e eConfigType; MI_BOOL bCreate; union { MI_SYS_PerChnPrivHeapConf_t stPreChnPrivPoolConfig; MI_SYS_PerDevPrivHeapConf_t stPreDevPrivPoolConfig; MI_SYS_PerVpe2VencRingPoolConf_t stPreVpe2VencRingPrivPoolConfig; MI_SYS_PerChnPortOutputPool_t stPreChnPortOutputPrivPool; }uConfig; } MI_SYS_GlobalPrivPoolConfig_t;
-
成员
成员名称 描述 eConfigType 私有pool类型 bCreate 是否创建私有pool。true:创建 false:销毁 uConfig 不同类型私有pool的结构体
3.2.29. MI_SYS_FrameIspInfo_t¶
-
说明
定义frame data中ISP info的结构体。
-
定义
typedef struct MI_SYS_FrameIspInfo_s { MI_SYS_FrameIspInfoType_e eType; union { MI_U32 u32GlobalGradient; }uIspInfo; } MI_SYS_FrameIspInfo_t;
-
成员
成员名称 描述 eType ISP info type uIspInfo ISP info union
3.2.30. MI_SYS_FbcData_t¶
-
说明
定义frame buffer compress数据结构体。
-
定义
typedef struct MI_SYS_FbcData_s { MI_SYS_FrameTileMode_e eTileMode; MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompressMode; MI_SYS_FrameData_PhySignalType ePhylayoutType; MI_U16 u16Width; MI_U16 u16Height; void* pVirAddr[2]; MI_PHY phyAddr[2]; // notice that this is miu bus addr,not cpu bus addr. MI_U32 u32Stride[2]; MI_U32 u32BufSize; // total size that allocated for this buffer,include consider alignment. /* * ----------------- ---------------- * | | ^ * | | | * u16RingBufStartLine --> | |---- | * | | ^ | * | Ring | | | * | | u16Height | * | Heap | | | * | | | u16RingHeapTotalLines * | | v | * u16RingBufEndLine --> | |---- | * | | | * | | v * ----------------- ---------------- */ MI_U16 u16RingBufStartLine; MI_U16 u16RingBufEndLine; MI_U16 u16RingHeapTotalLines; MI_PHY phyFbcTableAddr[2]; MI_U32 u32FbcTableSize[2]; } MI_SYS_FbcData_t;
-
成员
成员名称 描述 eTileMode Tile格式类型 ePixelFormat 像素枚举类型 eCompressMode 压缩方式类型 ePhylayoutType Frame data隶属的buffer类型 u16Width Frame data的宽 u16Height Frame data的高 pVirAddr[2] Frame data buffer的虚拟地址 phyAddr[2] Frame data buffer 的物理地址 u32Stride[2] Frame data每行所占字节数 u32BufSize Frame data buffer大小 u16RingBufStartLine Ring buffer起始行 u16RingBufEndLine Ring buffer 结束行 u16RingHeapTotalLines Ring buffer 总行数 phyFbcTableAddr[2] 把Fbc data转成nv12的table,目前只支持转到nv12。 u32FbcTableSize[2] Fbc data转成nv12的table大小。
3.2.31. MI_SYS_BufFrameMultiPlaneConfig_t¶
-
说明
定义码流multiplane buffer配置的结构体。
-
定义
typedef struct MI_SYS_BufFrameMultiPlaneConfig_s { MI_U8 u8SubPlaneNum; MI_SYS_BufFrameConfig_t stFrameCfgs[MI_SYS_MAX_SUB_PLANE_CNT]; }MI_SYS_BufFrameMultiPlaneConfig_t;
-
成员
成员名称 描述 u8SubPlaneNum Buf 个数 stFrameCfg 定义码流Frame buffer配置的结构体
3.2.32. MI_SYS_FrameDataSubPlane_t¶
-
说明
定义码流SubPlane FrameData的结构体。
-
定义
typedef struct MI_SYS_FrameDataSubPlane_s { MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompressMode; MI_U64 u64FrameId; MI_U16 u16Width; MI_U16 u16Height; void* pVirAddr[2]; MI_PHY phyAddr[2]; MI_U16 u16Stride[2]; MI_U32 u32BufSize; } MI_SYS_FrameDataSubPlane_t;
-
成员
成员名称 描述 ePixelFormat 像素格式 eCompressMode 压缩格式 u64FrameId Frame id u16Width Frame宽度 u16Height Frame高度 pVirAddr 虚拟地址 phyAddr 物理地址 U16Stride 图片每行所占字节数 u32BufSize Sys分配给当前frame的实际buf大小
3.2.33. MI_SYS_BufFrameMetaConfig_t¶
-
说明
定义frame meta data的结构体。
-
定义
typedef struct MI_SYS_BufFrameMetaConfig_s { MI_U16 u16Width; MI_U16 u16Height; MI_SYS_FrameScanMode_e eFrameScanMode; // MI_SYS_PixelFormat_e eFormat; MI_SYS_CompressMode_e eCompressMode; void* pVirAddr[3]; MI_PHY phyAddr[3]; MI_U16 u32Stride[3]; MI_U32 u32BufSize; } MI_SYS_BufFrameMetaConfig_t;
-
成员
成员名称 描述 u16Width 数据的宽 u16Height 数据的高 eFrameScanMode 逐行扫描或者隔行扫描的模式 eFormat 像素格式 eCompressMode 压缩模式 pVirAddr[3] 虚拟地址 phyAddr[3] 物理地址 u32Stride[3] 图片每行所占字节数 u32BufSize Sys分配给当前frame的实际buf大小
3.2.34. MI_SYS_FrameDataMultiPlane_t¶
-
说明
定义码流MultiPlane FrameData的结构体。
-
定义
typedef struct MI_SYS_FrameDataMultiPlane_s { MI_U8 u8SubPlaneNum; MI_SYS_FrameDataSubPlane_t stSubPlanes[MI_SYS_MAX_SUB_PLANE_CNT]; } MI_SYS_FrameDataMultiPlane_t;
-
成员
成员名称 描述 u8SubPlaneNum Buf个数 stSubPlanes 定义码流MultiPlane FrameData的结构体
3.2.35. MI_SYS_UserPictureInfo_t¶
-
说明
定义描述user picture 信息的结构体。
-
定义
typedef struct MI_SYS_UserPictureInfo_s { MI_U32 u32SrcFrc; } MI_SYS_UserPictureInfo_t;
-
成员
成员名称 描述 u32SrcFrc 设定Input port buf输入的帧率
3.2.36. MI_SYS_FrcStrategy_e¶
-
说明
定义帧率控制策略枚举类型。
-
定义
typedef enum { E_MI_SYS_FRC_STRATEGY_BY_RATIO, E_MI_SYS_FRC_STRATEGY_BY_PERIOD, E_MI_SYS_FRC_STRATEGY_BY_PTS, E_MI_SYS_FRC_STRATEGY_MAX, } MI_SYS_FrcStrategy_e;
-
成员
成员名称 描述 E_MI_SYS_FRC_STRATEGY_BY_RATIO 比例帧率控制模式 E_MI_SYS_FRC_STRATEGY_BY_PERIOD 实时帧率控制模式 E_MI_SYS_FRC_STRATEGY_BY_PTS PTS模式
3.2.37. MI_SYS_FrcType_e¶
-
说明
定义帧率控制类型枚举类型。
-
定义
typedef enum { E_MI_SYS_FRC_TYPE_PIPELINE, E_MI_SYS_FRC_TYPE_USERINJECT, E_MI_SYS_FRC_TYPE_MAX, } MI_SYS_FrcType_e;
-
成员
成员名称 描述 E_MI_SYS_FRC_TYPE_PIPELINE PIPELINE类型 E_MI_SYS_FRC_TYPE_USERINJECT USERINJECT类型 -
注意事项
- 控制存在绑定关系InputPort的帧率为PIPELINE类型;控制由用户输入buf且不存在绑定关系的InputPort帧率类型为USERINJECT类型。
3.2.38. MI_SYS_ChnPortFrcAttr_t¶
-
说明
定义帧率控制参数结构体。
-
定义
typedef struct MI_SYS_ChnPortFrcAttr_s { MI_SYS_FrcType_e eType; MI_SYS_FrcStrategy_e eStrategy; MI_U32 u32SrcFrameRate; MI_U32 u32DstFrameRate; } MI_SYS_ChnPortFrcAttr_t;
-
成员
成员名称 描述 eType 帧率控制类型 eStrategy 帧率控制策略 u32SrcFrameRate 源buf帧率 u32DstFrameRate 目标buf帧率
3.2.39. MI_SYS_BindAttr_t¶
-
说明
定义绑定类型参数数据结构体。
-
定义
typedef struct MI_SYS_BindAttr_s { MI_SYS_BindType_e eBindType; } MI_SYS_BindAttr_t;
-
成员
成员名称 描述 eBindType 前后级工作模式
4. 错误码¶
4.1. 错误码的组成¶
MI 返回的错误码为4字节,共32bits,由表4-1所示五部分组成:
表4-1 错误码的组成
位置 | 所占位数 | 描述 |
---|---|---|
BIT [0-11] | 12bits | 错误类型,表示该错误码的具体错误含义。 |
BIT [12-15] | 4bits | 错误等级,固定返回2。 |
BIT [16-23] | 8bits | 模块ID,表示该错误码是属于哪个模块。 |
BIT [24-31] | 8bits | 固定为0xA0。 |
Tips:
我们可以简单的把错误码看成两个双字节(16bits)做快速解读,以错误码 0xA0092001为例:
“A009”:表示该错误发生在模块ID为9的模块,通过查看“MI_ModuleId_e”的定义可知为MI_SYS模块。
“2001”:表示该错误的错误类型是1,即“设备 ID 超出合法范围”。
4.2. MI_SYS API错误码表¶
MI_SYS模块所有 API 返回的值都为4字节,0表示执行成功,其它值表示执行失败,需要注意的是,所有非0的返回值都应该是表4-2中列出的,否则为非法值。
表4-1 MI_SYS模块 API错误码
错误码 | 宏定义 | 描述 |
---|---|---|
0xA0092001 | MI_ERR_SYS_INVALID_DEVID | 设备 ID 超出合法范围 |
0xA0092002 | MI_ERR_SYS_INVALID_CHNID | 通道组号错误或无效区域句柄 |
0xA0092003 | MI_ERR_SYS_ILLEGAL_PARAM | 参数超出合法范围 |
0xA0092004 | MI_ERR_SYS_EXIST | 重复创建已存在的设备、通道或资源 |
0xA0092005 | MI_ERR_SYS_UNEXIST | 试图使用或者销毁不存在的设 备、通道或者资源 |
0xA0092006 | MI_ERR_SYS_NULL_PTR | 函数参数中有空指针 |
0xA0092007 | MI_ERR_SYS_NOT_CONFIG | 模块没有配置 |
0xA0092008 | MI_ERR_SYS_NOT_SUPPORT | 不支持的参数或者功能 |
0xA0092009 | MI_ERR_SYS_NOT_PERM | 该操作不允许,如试图修改静态配置参数 |
0xA009200C | MI_ERR_SYS_NOMEM | 分配内存失败,如系统内存不足 |
0xA009200D | MI_ERR_SYS_NOBUF | 分配缓存失败,如申请的数据缓冲区太大 |
0xA009200E | MI_ERR_SYS_BUF_EMPTY | 缓冲区中无数据 |
0xA009200F | MI_ERR_SYS_BUF_FULL | 缓冲区中数据满 |
0xA0092010 | MI_ERR_SYS_NOTREADY | 系统没有初始化或没有加载相应模块 |
0xA0092011 | MI_ERR_SYS_BADADDR | 地址非法 |
0xA0092012 | MI_ERR_SYS_BUSY | 系统忙 |
0xA0092013 | MI_ERR_SYS_CHN_NOT_STARTED | 通道没有开始 |
0xA0092014 | MI_ERR_SYS_CHN_NOT_STOPED | 通道没有停止 |
0xA0092015 | MI_ERR_SYS_NOT_INIT | 模块没有初始化 |
0xA0092016 | MI_ERR_SYS_INITED | 模块已经初始化 |
0xA0092017 | MI_ERR_SYS_NOT_ENABLE | 通道或端口没有ENABLE |
0xA0092018 | MI_ERR_SYS_NOT_DISABLE | 通道或端口没有DISABLE |
0xA0092019 | MI_ERR_SYS_TIMEOUT | 超时 |
0xA009201A | MI_ERR_SYS_DEV_NOT_STARTED | 设备没有开始 |
0xA009201B | MI_ERR_SYS_DEV_NOT_STOPED | 设备没有停止 |
0xA009201C | MI_ERR_SYS_CHN_NO_CONTENT | 通道没有资料 |
0xA009201D | MI_ERR_SYS_NOVASAPCE | 映射虚拟地址失败 |
0xA009201E | MI_ERR_SYS_NOITEM | RingPool中没有record记录 |
0xA009201F | MI_ERR_SYS_FAILED | 未明确定义的错误 |
5. PROCFS介绍¶
5.1. common¶
5.1.1. dump_mmap¶
-
调试信息
# /config/dump_mmap
-
调试信息分析
/config/dump_mmap根据文件/config/mmap.ini显示内存相关信息。
-
参数分析
参数 描述 u32TotalSize Dram总大小 u32Miu0Size MIU0的寻址大小 u32Miu1Size MIU1的寻址大小 u32MiuBoundary MIU0 end address u32MmapItemsNum 将Dram mmap的个数,这里是2个,分别是E_LX_MEM和E_MMAP_ID_EMI bIs4kAlign 读写Dram是否需要4K对齐 bMiu1Enable MIU1是否enable E_LX_MEM GID Mmap id Addr Memory address Size Memory size Layer Memory layer Align Memory align MemoryType Memory type MiuNo MIU NO. CMAID CMA id E_MMAP_ID_DUMMY1 同上 E_LX_LOGO_RESERVED_FB 同上 E_MMAP_ID_EMI 同上
5.1.2. dump_config¶
-
调试信息
# /config/dump_config panel cnt:59 PanelName:RM68200_720x1280 Intftype:11 timing:55 PanelName:SAT070AT50H18BH_1024x600 Intftype:0 timing:55 PanelName:BT1120OUTPUT_720p_60HZ Intftype:14 timing:55 PanelName:BT656OUTPUT_576p_50HZ Intftype:12 timing:55 PanelName:ST7789V Intftype:16 timing:55 PanelName:ILI9881C_800x1280 Intftype:11 timing:55 PanelName:ILI9163C_128x128 Intftype:15 timing:55 PanelName:DACOUT_576I Intftype:7 timing:4 PanelName:DACOUT_480I Intftype:7 timing:2 PanelName:DACOUT_1080P_24 Intftype:8 timing:10 PanelName:DACOUT_1080P_25 Intftype:8 timing:11 PanelName:DACOUT_1080P_30 Intftype:8 timing:12 PanelName:DACOUT_1080P_50 Intftype:8 timing:15 PanelName:DACOUT_720P_2997 Intftype:8 timing:6 PanelName:DACOUT_720P_50 Intftype:8 timing:7 PanelName:DACOUT_720P_5994 Intftype:8 timing:8 PanelName:DACOUT_720P_60 Intftype:8 timing:9 PanelName:DACOUT_1080P_2997 Intftype:8 timing:13 PanelName:DACOUT_1080I_50 Intftype:7 timing:14 PanelName:DACOUT_1080P_5994 Intftype:8 timing:16 PanelName:DACOUT_1080I_60 Intftype:7 timing:17 PanelName:DACOUT_1080P_60 Intftype:8 timing:18 PanelName:DACOUT_576P Intftype:8 timing:5 PanelName:DACOUT_480P Intftype:8 timing:3 PanelName:DACOUT_2K2KP_30 Intftype:8 timing:27 PanelName:DACOUT_2K2KP_60 Intftype:8 timing:28 PanelName:DACOUT_4K2KP_24 Intftype:8 timing:33 PanelName:DACOUT_4K2KP_25 Intftype:8 timing:34 PanelName:DACOUT_4K2KP_30 Intftype:8 timing:35 PanelName:DACOUT_4K2KP_50 Intftype:8 timing:36 PanelName:DACOUT_4K2KP_60 Intftype:8 timing:37 PanelName:DACOUT_1440P_50 Intftype:8 timing:19 PanelName:DACOUT_1440P_60 Intftype:8 timing:20 PanelName:VGAOUT_1024x768P_60 Intftype:8 timing:45 PanelName:VGAOUT_1280x1024P_60 Intftype:8 timing:48 PanelName:VGAOUT_1366x768P_60 Intftype:8 timing:46 PanelName:VGAOUT_1440x900P_60 Intftype:8 timing:49 PanelName:VGAOUT_1280x800P_60 Intftype:8 timing:47 PanelName:VGAOUT_1680x1050P_60 Intftype:8 timing:51 PanelName:VGAOUT_1600x1200P_60 Intftype:8 timing:50 PanelName:BT1120OUT_576P_50 Intftype:14 timing:5 PanelName:BT1120OUT_480P_60 Intftype:14 timing:3 PanelName:BT1120OUT_1080P_25 Intftype:14 timing:11 PanelName:BT1120OUT_1080P_30 Intftype:14 timing:12 PanelName:BT1120OUT_1080P_50 Intftype:14 timing:15 PanelName:BT1120OUT_1080P_2997 Intftype:14 timing:13 PanelName:BT1120OUT_1080P_5994 Intftype:14 timing:16 PanelName:BT1120OUT_1080P_60 Intftype:14 timing:18 PanelName:BT1120OUT_720P_50 Intftype:14 timing:7 PanelName:BT1120OUT_720P_5994 Intftype:14 timing:8 PanelName:BT1120OUT_720P_60 Intftype:14 timing:9 PanelName:BT656OUT_576P_50 Intftype:12 timing:5 PanelName:BT656OUT_480P_60 Intftype:12 timing:3 PanelName:BT656OUT_1080P_25 Intftype:12 timing:11 PanelName:BT656OUT_1080P_2997 Intftype:12 timing:13 PanelName:BT656OUT_1080P_30 Intftype:12 timing:12 PanelName:BT656OUT_720P_50 Intftype:12 timing:7 PanelName:BT656OUT_720P_60 Intftype:12 timing:9 PanelName:BT656OUT_720P_5994 Intftype:12 timing:8 pq enable:0 pq table size:25892 DBC Value= 0,0,0 0,0,0 0,0,0 start dump [motion_table](0, 0) end dump start dump [motion_hdmi_dtv_table](0, 0) end dump start dump [motion_comp_pc_table](0, 0) end dump start dump [misc_param_table](0, 0) end dump start dump [misc_luma_table](0, 0) end dump start dump [noise_table](0, 0) end dump start dump [misc_table](0, 0) end dump
-
调试信息分析
./config/dump_config
得到的是/proc/mi_modules/common/
里各文件的信息,含panel size、DBC Value、motion_table、motion_hdmi_dtv_table、motion_comp_pc_table、misc_param_table、misc_luma_table、noise_table、misc_table等。 -
参数分析
参数 描述 panel PanelName LCD屏名称 Intftype LCD屏接口类型:
E_MAPI_PNL_INTF_TTL = 0, ///< TTL type
E_MAPI_PNL_INTF_LVDS, ///< LVDS type
E_MAPI_PNL_INTF_RSDS, ///< RSDS type
E_MAPI_PNL_INTF_MINILVDS, ///< TCON
///< Analog TCON
E_MAPI_PNL_INTF_ANALOG_MINILVDS,
///< Digital TCON
E_MAPI_PNL_INTF_DIGITAL_MINILVDS,
E_MAPI_PNL_INTF_MFC, ///< Ursa (TTL output to Ursa)
E_MAPI_PNL_INTF_DAC_I, ///< DAC output
E_MAPI_PNL_INTF_DAC_P, ///< DAC output
///< For PDP(Vsync use Manually MODE)
E_MAPI_PNL_INTF_PDPLVDS,
E_MAPI_PNL_INTF_EXT, ///< EXT LPLL TYPE
E_MAPI_PNL_INTF_MIPI_DSI,
E_MAPI_PNL_INTF_BT656,
E_MAPI_PNL_INTF_BT601,
E_MAPI_PNL_INTF_BT1120, ///< BT1120
E_MAPI_PNL_INTF_MCU_TYPE, ///< MCU Type
E_MAPI_PNL_INTF_SRGB, ///< sRGB
E_MAPI_PNL_INTF_TTL_SPI_IF,timing LCD屏显示输出时序:
DISPLAYTIMING_MIN = 0,
DISPLAYTIMING_DACOUT_DEFAULT = 0,
DISPLAYTIMING_DACOUT_FULL_HD,
DISPLAYTIMING_DACOUT_480I,
DISPLAYTIMING_DACOUT_480P,
DISPLAYTIMING_DACOUT_576I,
DISPLAYTIMING_DACOUT_576P, // 5
DISPLAYTIMING_DACOUT_720P_2997,
DISPLAYTIMING_DACOUT_720P_50,
DISPLAYTIMING_DACOUT_720P_5994,
DISPLAYTIMING_DACOUT_720P_60,
DISPLAYTIMING_DACOUT_1080P_24,
DISPLAYTIMING_DACOUT_1080P_25,
DISPLAYTIMING_DACOUT_1080P_30, // 12
DISPLAYTIMING_DACOUT_1080P_2997,
DISPLAYTIMING_DACOUT_1080I_50,
DISPLAYTIMING_DACOUT_1080P_50,
DISPLAYTIMING_DACOUT_1080P_5994,
DISPLAYTIMING_DACOUT_1080I_60,
DISPLAYTIMING_DACOUT_1080P_60,
DISPLAYTIMING_DACOUT_1440P_50,
DISPLAYTIMING_DACOUT_1440P_60,
DISPLAYTIMING_DACOUT_1470P_24,
DISPLAYTIMING_DACOUT_1470P_30,
DISPLAYTIMING_DACOUT_1470P_60,
DISPLAYTIMING_DACOUT_2205P_24,
// For 2k2k
DISPLAYTIMING_DACOUT_2K2KP_24, // 23
DISPLAYTIMING_DACOUT_2K2KP_25,
DISPLAYTIMING_DACOUT_2K2KP_30,
DISPLAYTIMING_DACOUT_2K2KP_60,
// For 4k0.5k
DISPLAYTIMING_DACOUT_4K540P_240,
// For 4k1k
DISPLAYTIMING_DACOUT_4K1KP_30,
DISPLAYTIMING_DACOUT_4K1KP_60,
DISPLAYTIMING_DACOUT_4K1KP_120,
// For 4k2k
DISPLAYTIMING_DACOUT_4K2KP_24,
DISPLAYTIMING_DACOUT_4K2KP_25,
DISPLAYTIMING_DACOUT_4K2KP_30, // 33
DISPLAYTIMING_DACOUT_4K2KP_50,
DISPLAYTIMING_DACOUT_4K2KP_60,
DISPLAYTIMING_DACOUT_4096P_24,
DISPLAYTIMING_DACOUT_4096P_25,
DISPLAYTIMING_DACOUT_4096P_30,
DISPLAYTIMING_DACOUT_4096P_50,
DISPLAYTIMING_DACOUT_4096P_60,
// For VGA OUTPUT
DISPLAYTIMING_VGAOUT_640x480P_60,
DISPLAYTIMING_VGAOUT_1280x720P_60,
DISPLAYTIMING_VGAOUT_1024x768P_60,
DISPLAYTIMING_VGAOUT_1366x768P_60,
DISPLAYTIMING_VGAOUT_1280x800P_60,
DISPLAYTIMING_VGAOUT_1280x1024P_60,
DISPLAYTIMING_VGAOUT_1440x900P_60,
DISPLAYTIMING_VGAOUT_1600x1200P_60,
DISPLAYTIMING_VGAOUT_1680x1050P_60,
DISPLAYTIMING_VGAOUT_1920x1080P_60, // 43
// For TTL output
DISPLAYTIMING_TTLOUT_480X272_60,
DISPLAYTIMING_DACOUT_4K2KP_120,
DISPLAYTIMING_USER,
DISPLAYTIMING_MAX_NUM,pq enable 判断pq 是否enable pq table size pq table size的值 DBC Value 暂时无效果 motion_table 暂时无效果 motion_hdmi_dtv_table 暂时无效果 motion_comp_pc_table 暂时无效果 misc_param_table 暂时无效果 misc_luma_table 暂时无效果 noise_table 暂时无效果 misc_table 暂时无效果
5.2. mi_log_info¶
5.2.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_log_info ---------------- Log Path ------------------------ log path: ---------------- Store Path ---------------------- store path: /mnt ---------------- Module Log Level ---------------- Log module Level -------------------------- mi_ive 2(WRN) mi_vdf 2(WRN) mi_venc 2(WRN) mi_rgn 2(WRN) mi_ai 2(WRN) mi_ao 2(WRN) mi_vif 2(WRN) mi_vpe 2(WRN) mi_vdec 2(WRN) mi_sys 2(WRN) mi_fb 2(WRN) mi_hdmi 2(WRN) mi_divp 2(WRN) mi_gfx 2(WRN) mi_vdisp 2(WRN) mi_disp 2(WRN) mi_os 2(WRN) mi_iae 2(WRN) mi_md 2(WRN) mi_od 2(WRN) mi_shadow 2(WRN) mi_warp 2(WRN) mi_uac 2(WRN) mi_ldc 2(WRN) mi_sd 2(WRN) mi_panel 2(WRN) mi_cipher 2(WRN) mi_sensor 2(WRN) mi_wlan 2(WRN) mi_ipu 2(WRN) mi_mipitx 2(WRN) mi_gyro 2(WRN) mi_jpd 2(WRN) mi_isp 2(WRN) mi_scl 2(WRN) mi_wbc 2(WRN) mi_dsp 2(WRN) mi_pcie 2(WRN) mi_dummy 2(WRN) help example: echo mi_sys=2 > /proc/mi_modules/mi_log_info echo mi_vdisp=1 > /proc/mi_modules/mi_log_info echo log=/mnt > /proc/mi_modules/mi_log_info echo storepath=/mnt > /proc/mi_modules/mi_log_info
-
调试信息分析
说明了默认的log path 或 store path 以及 各module的debug_level的值,同时给出了help example。
-
参数分析
参数 描述 mi_log_info log path 暂时无效果 store path 暂时无效果 Log module 各个模块的名称 Level 打印等级
5.2.2. echo¶
功能 | 修改模块debug_level |
---|---|
命令 | echo [ModID]=[Level] > /proc/mi_modules/mi_log_info |
参数说明 | [ModID] 模块的名字 mi_ive / mi_vdf / mi_venc / mi_rgn mi_ai / mi_ao / mi_vif / mi_shadow mi_vdec / mi_sys / mi_fb / mi_hdmi mi_gfx / mi_vdisp / mi_disp / mi_od mi_os / mi_iae / mi_md [Level] 0 无Debug信息 (MI_DBG_NONE) 1 只显示error的信息 (MI_DBG_ERR) 2 显示level<=2的信息 (MI_DBG_WRN) 3 显示level<=3的信息 (MI_DBG_API) 4 显示level<=4的信息 (MI_DBG_KMSG) 5 显示level<=5的信息 (MI_DBG_INFO) 6 显示level<=6的信息 (MI_DBG_DEBUG) 7 显示 level<=7的信息 (MI_DBG_TRACE) 8 显示所有信息 (MI_DBG_ALL) |
举例 | echo mi_sys=2 > /proc/mi_modules/mi_log_info mi_sys 的debug_level修改为2 |
功能 | 修改log的路径 |
---|---|
命令 | echo log=[Path] > /proc/mi_modules/mi_log_info |
参数说明 | [Path] 路径 |
举例 | echo log=/mnt > /proc/mi_modules/mi_log_info |
功能 | 修改存储log的路径 |
---|---|
命令 | echo storepath=[Path] > /proc/mi_modules/mi_log_info |
参数说明 | [Path] 路径 |
举例 | echo storepath=/mnt > /proc/mi_modules/mi_log_info |
5.3. mi_global_info¶
5.3.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_global_info miu_and_lx_info: ARM_MIU0_BUS_BASE 0x20000000 ARM_MIU0_BASE_ADDR 0x0 ARM_MIU1_BUS_BASE 0x200000000 ARM_MIU1_BASE_ADDR 0x80000000 ARM_MIU2_BUS_BASE 0xffffffffffffffff ARM_MIU2_BASE_ADDR 0xffffffffffffffff lx_mem_addr 0x20000000 lx_mem_size 0x3ffe0000 lx_mem2_addr 0xffffffff lx_mem2_size 0xffffffff lx_mem3_addr 0xffffffff lx_mem3_size 0xffffffff KernelProtect IP white list: clientId name 0x70 CPU_W 0x0f MCU51_RW 0x12 USB20_H_RW 0x11 USB20_RW 0x10 USB30_RW 0x17 EMAC_RW 0x18 EMAC1_RW 0x13 SD30_RW 0x14 SDIO30_RW 0x04 AESDMA_RW 0x07 URDMA_RW 0x02 BDMA_RW 0x03 MOVDMA0_RW 0x16 SATA_RW 0x00 NONE 0x00 NONE MmuProtect IP white list: clientId name 0x05 CMDQ0_R 0x06 CMDQ1_R 0x70 CPU_W 0x73 CPU_R 0x20 VCODEC_R 0x21 VCODEC_W 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE 0x00 NONE Sigmastar Module mi_sys version: project_commit.81f869a sdk_commit.513c3cc build_time.20211029104555
-
调试信息分析
该调试信息提供了全局global的一些信息。
-
参数分析
参数 描述 miu_and_lx_info(以只有一个MIU为例) ARM_MIU0_BUS_BASE Miu0 bus base ARM_MIU0_BASE_ADDR Miu0 base addr lx_mem_addr Linux镜像占的memory的起始地址(属于cpu bus address) lx_mem_size Linux镜像占的memory的size kernelProtect IP white list clientId Miu protect的IP白名单里的IP的id(从未分group的角度看的全局的id) name 与clientId对应的该IP的实际的名字 PAGE_OFFSET The virtual address of the start of the kernel image TASK_SIZE The maximum size of a user space task VMALLOC_START The start address of vmalloc memory VMALLOC_END The end address of vmalloc memory Sigmastar Module mi_sys version project_commit project对应的commit sdk_commit sdk对应的commit build_time sdk的build时间
5.4. mi_bufqueue_status¶
5.4.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_bufqueue_status
-
调试信息分析
Dump当前各modules的enable input/output port 相关Queue的信息。
-
参数分析
参数 描述 dump Queues in input port only for enabled port ModId 该 input port 所在的 module id。 DevId 该 input port 所在的 device id。 ChnId 该 input port 所在的 channel id。 PassId 该 input port 所在的 pass id。 InPortId 该 input port 的 id。 UsrInjectQ_cnt 该 InputPort中UsrInjectBufQueue 里的buffer 数目。 BindInQ_cnt 该 InputPort中UsrPipeInBufQueue 里的buffer 数目。 InputPendingQueueSize 该 InputPort 的cur_working_input_queue里的 buffer 总size。 dump Queues in output port only for enabled port ModId 该output port所在的module id。 DevId 该 output port 所在的 device id。 ChnId 该 output port 所在的 channel id。 PassId 该 output port 所在的 pass id。 OutPortId 该 output port 的 id。 DrvBkRefFifoQ_cnt 该 OutputPort 的 DrvBkRefFifoQueue里的 buffer 数目。 DrvBkRefFifoQ_size 该 OutputPort 的 DrvBkRefFifoQueue里的 buffer 的总 size。 UsrGetFifoQ_cnt 该 OutputPort 的UsrGetFifoBufQueue 里的 buffer 数目。 UsrGetFifoQ_size 该 OutputPort 的UsrGetFifoBufQueue 里的 buffer的总 size。
5.5. mi_dump_buffer_delay_worker¶
5.5.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_dump_buffer_delay_worker delay_worker_id module_name force_stop dev_id chn_id port_type port_id Queue_name 0 mi_disp 0 0 0 inport 0 BindInput stored_dir dump_method dump_method_value /mnt bunfnum 2
-
调试信息分析
/proc/mi_modules/mi_dump_buffer_delay_worker 文件是和 mi_modulenamedevid相连的一个概念,dump device 里的 Queue 里的 buffer 采用的是 delay worker 的方式实现的,可以通过对mi_dump_buffer_delay_worker 的 cat 操作查看还有哪些 delay worker 正在进行中,echo force_stop_dump delay_worker_id 强制结束指定的一个 delay worker 过程。
-
参数说明
参数 描述 delay_worker_id 该 delay worker 的 id。如果 delay worker 完成的话,该 id 会回收,给后续其他的 delay worker 作为 id 使用。 module_name 该 delay worker 所对应的 module 的 id。 force_stop 该 delay worker 当前是否处于强制结束阶段,1 表示已经被设置了强制结束,0 表示未被设置。 dev_id 该 delay worker 所对应的 device id。 chn_id 该 delay worker 所对应的 channel id。 port_type 该 delay worker 所对应的 port 的 type,是 input port或outputport。 port_id 该 delay worker 所对应的 port 的 id。 Queue_name 该 delay worker 所对应的 Queue 的 name。 stored_dir 该 delay worker 所对应的要 dump 的 data 所要存放的绝对路径(不含最终存放的文件名)。 dump_method 该 delay worker 所对应的 dump 方法: bufnum 或 time 或 start。 dump_method_value Dump 方法所对应的值。
5.5.2. echo¶
功能 | 强制结束 delay worker |
---|---|
命令 | echo force_stop_dump [WorkID] >/proc/mi_modules/mi_dump_buffer_delay_worker |
参数说明 | [WorkID]:delay_work 的 ID |
举例 | echo force_stop_dump 0 > /proc/mi_modules/mi_dump_buffer_delay_worker 强制停止 delay_work 0 |
5.6. mi_infer_graph.py¶
5.6.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_infer_graph.py
-
调试信息分析
sys提供proc fs生成运行时信息的python脚本,可以将其cat出来保存到linux server上, 然后将其拷贝到文本里,然后在Linux server上使用pyhton2运行,会输出两张图片,默认的图片格式是简化版,一张是“infer_DAG”,一张是“perf_static”,其中一张输出的图片如下:
矩形框中表示的是 channel pass name;
线上的label表示的是从哪个input port到哪个output port,以及bind type,和source frame rate、dest frame rate。
5.7. mi_graph_contrl¶
5.7.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_graph_contrl
-
调试信息分析
上述命令的“dump bind”字段表示mi_infer_graph.py脚本输出的样式,”off”表示输出简化绑定关系图,”on” 表示输出详细绑定关系图。
5.7.2. echo¶
功能 | 控制python脚本输出的图片样式 |
---|---|
命令 | echo [command] >/proc/mi_modules/mi_graph_contrl |
参数说明 | [command] 命令: dump bind on:控制输出详细绑定关系图 dump bind off:控制输出简化绑定关系图 |
举例 | 输出详细绑定关系图: # echo dump bind on > /proc/mi_modules/mi_graph_contrl # cat /proc/mi_modules/mi_infer_graph.py |
5.8. debug_level¶
5.8.1. cat/echo¶
-
调试信息
# cat /proc/mi_modules/mi_sys/debug_level 2
-
调试信息分析
为了控制打印级别,每个module(包括sys)都有各自的debug level,分别由/proc/mi_modules/mi_modulename/debug_level控制,其中disp, rgn等为modulename。上面以/proc/mi_modules/mi_sys/debug_level为例。
功能 打印debug警告级别命令 cat /proc/mi_modules/[ModuleName]/debug_level 参数说明 [ModuleName] 模块的名字
mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_vif / mi_ai
mi_shadow / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc举例 cat /proc/mi_modules/mi_sys/debug_level
2
mi_sys 的debug警告级别为2(显示warning和error的信息)功能 修改警告级别命令 echo [Level] > /proc/mi_modules/[ModuleName]/debug_level 参数说明 [Level]
0 无Debug信息 (MI_DBG_NONE)
1 只显示error的信息 (MI_DBG_ERR)
2 显示level<=2的信息 (MI_DBG_WRN)
3 显示level<=3的信息 (MI_DBG_API)
4 显示level<=4的信息 (MI_DBG_KMSG)
5 显示level<=5的信息 (MI_DBG_INFO)
6 显示level<=6的信息 (MI_DBG_DEBUG)
7 显示 level<=7的信息 (MI_DBG_TRACE)
8 显示所有信息 (MI_DBG_ALL)
[ModuleName] 模块的名字
mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_vif
mi_ai / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc举例 echo 1 > /proc/mi_modules/mi_vdec/debug_level
将mi_vdec 模块的警告级别修改为只显示error的信息
5.9. debug_file¶
5.9.1. echo¶
-
调试信息
# echo mi_sys_impl.c > /proc/mi_modules/mi_sys/debug_file
-
调试信息分析
用于debug时使能文件mi_sys_impl.c里的所有level等级的DBG log信息都可以在串口打印。
-
参数说明
参数 描述 命令 echo [fileName] … > /proc/mi_modules/mi_xxx/debug_file
表示运行时使能打印函数fileName里的所有level等级的DBG log信息,可以同时使能多个函数,函数之间用空格隔开。
echo > /proc/mi_modules/mi_xxx/debug_file
表示关闭之前已打开的函数fileName的所有level等级的打印功能,此时函数fileName里的DBG log打印只能按/proc/mi_modules/mi_xxx/debug_level设置的等级打印。
注:fileName必须属于对应的mi_xxx模块。参数说明 [mi_xxx] 表示MI模块名称,可取:
mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_vif / mi_ai
mi_shadow / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc
5.10. debug_func¶
5.10.1. echo¶
-
调试信息
# echo MI_SYS_IMPL_Init > /proc/mi_modules/mi_sys/debug_func
-
调试信息分析
用于debug时使能函数MI_SYS_IMPL_Init()里的所有level等级的DBG log信息都可以在串口打印。
-
参数说明
参数 描述 命令 echo [funcName] … > /proc/mi_modules/mi_xxx/debug_func
表示运行时使能打印函数funcName里的所有level等级的DBG log信息,可以同时使能多个函数,函数之间用空格隔开。
echo > /proc/mi_modules/mi_xxx/debug_func
表示关闭之前已打开的函数funcName的所有level等级的打印功能,此时函数funcName里的DBG log打印只能按/proc/mi_modules/mi_xxx/debug_level设置的等级打印。
注:funcName必须属于对应的mi_xxx模块。参数说明 [mi_xxx] 表示MI模块名称,可取:
mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_vif / mi_ai
mi_shadow / mi_vdisp / mi_ao / mi_venc / mi_hdmi / mi_sys
5.11. module_version_file¶
5.11.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_ai/module_version_file Sigmastar Module mi_ai version: project_commit.81f869a sdk_commit.513c3cc build_time.20211029104555 # cat /proc/mi_modules/mi_global_info Sigmastar Module mi_sys version: project_commit.81f869a sdk_commit.513c3cc build_time.20211029124046
-
调试信息分析
/proc/mi_modules/mi_modulename/module_version_file 提供了份version信息,/proc/mi_modules/mi_global_info里我们也提供了份version信息,不过其本质上指的是mi_sys模块的version信息,上面只是以mi_ai 和 mi_global_info 为例子,每个模块都有自己对应的version file。
-
参数说明
参数 描述 Version Info project_commit 模块编译ko时的整包project commit,如果单独替换ko,模块基于的commit有变化,ko version里得到的commit也会变更。 sdk_commit 模块编译ko时的整包sdk commit,如果单独替换ko,模块基于的commit有变化,ko version里得到的commit也会变更。 build_time 实际的build时间,精确到秒,即使make clean;make image整体来build的话,各个ko的时间也会有差别。
5.12. show threads¶
5.12.1. echo¶
-
调试信息
# echo show_threads > /proc/mi_modules/mi_sys/mi_sys0
-
调试信息分析
查看当前所有线程的 call stack 状态。
-
该命令可以帮组查询&定位死锁问题。
-
该命令打印较多,最好放在kmsg中打印,以免被其他信息污染。
-
5.13. debug_frc¶
5.13.1. echo¶
-
调试信息
# echo debug_frc on 12 0 0 0 0 "out" > /proc/mi_modules/mi_sys/mi_sys0
-
调试信息分析
printk in _MI_SYS_IMPL_Common_WriteProc,
Switch enable debug FRC, Modid:12, Dev:0, Chn:0, Pass:0, Port:0, BufType:1,使能帧率控制debug开关
-
参数说明
参数 描述 命令 Switch enable debug FRC:
echo debug_frc on [Modid] [Devid] [Chnid] [Passid] [Portid] [in/out] > /proc/mi_modules/mi_sys/mi_sys0
打开帧率控制debug开关
Switch disable debug FRC:
echo debug_frc off > /proc/mi_modules/mi_sys/mi_sys0
关闭帧率控制debug开关参数说明 [Modid] : module id
[Devid] : device id
[Chnid] : channel id
[Passid] : pass id
[Portid] : port id
[in/out] : input/output方向
5.14. set_outputport_depth¶
5.14.1. echo¶
-
调试信息
# echo set_ouputport_depth 6 0 0 0 0 0 2 4 > /proc/mi_modules/mi_sys/mi_sys0
-
参数说明
参数 描述 命令 Set output port depth:
echo set_ouputport_depth [Modid] [Devid] [Chnid] [Passid] [Portid] [u32userFrameDepth] [u32BufQueueDepth] > /proc/mi_modules/mi_sys/mi_sys0参数说明 [Modid] : module id
[Devid] : device id
[Chnid] : channel id
[Passid] : pass id
[Portid] : port id
[u32userFrameDepth]: 设置该output用户可以拿到的buf最大数量
[u32BufQueueDepth]: 设置该output系统buf最大数量
5.15. set_thread_priority¶
5.15.1. echo¶
-
调试信息
# echo set_thread_priority 8 849 99 > /proc/mi_modules/mi_sys/mi_sys0
-
参数说明
参数 描述 命令 set_thread_priority by pid:
echo set_thread_priority 8 [pid] [u32Priority] > /proc/mi_modules/mi_sys/mi_sys0参数说明 [pid]: 线程pid
[u32Priority]: 需要设定的线程等级
5.16. mmu debug¶
5.16.1. echo¶
-
调试信息
# echo debug_mmu debug_log 1 1 1 33,34 > /proc/mi_modules/mi_sys/mi_sys0
-
参数说明
参数 描述 命令 Enable/disable alloc/free buf log:
echo debug_mmu debug_log [enable/disable] [enable/disable free] [enable/disable alloc] [module id list] > /proc/mi_modules/mi_sys/mi_sys0参数说明 [enable/disable] :enable or disable
[module id list]: module list, Separated by commas -
举例
1.echo debug_mmu debug_log 1 --- enable alloc/free buf log 2.echo debug_mmu debug_log 1 0 --- enable free buf log 3.echo debug_mmu debug_log 1 1 0 --- enable alloc buf log 4.echo debug_mmu debug_log 1 1 1 33,34 --- enable ISP & SCL alloc/free buf log 5.echo debug_mmu debug_log 1 0 1 33,34 --- enable ISP & SCL free buf log 6.echo debug_mmu debug_log 1 1 0 33,34 --- enable ISP & SCL alloc buf log
5.16.2. insmod¶
-
调试信息
# insmod /config/modules/4.9.227/mi_sys.ko bDebugMmu=1
-
参数说明
参数 描述 命令 For debug memory access out of bounds:
insmod /config/modules/4.9.227/mi_sys.ko bDebugMmu=1/bDebugMmu=0
# Depends on enable mmu参数说明 bDebugMmu=1 :enable
bDebugMmu=0 :disable
default disable
5.17. set_inputport_pattern¶
5.17.1. echo¶
-
调试信息
# echo set_inputport_pattern 33 0 0 0 0 1 > /proc/mi_modules/mi_sys/mi_sys0
-
调试信息分析
设置使能ModId33 DevId0 ChnId0 PassId0 InputPortId0 ,此时pipeline中ModId33模块只会保留有一张buf数据向后级模块传递数据(ModId33与后级模块的bindtype需要设置为frame mode),用于debug定位是哪个ModId的buf数据有问题。
-
参数说明
参数 描述 命令 echo set_inputport_pattern [Modid] [Devid] [ChnId] [PassId] [InputPortId] [bEnable] > /proc/mi_modules/mi_sys/mi_sys0
设置ModId的某个inputPort只保留一张buf数据,来向后级ModId传递数据(该ModId与后级ModId的bindType需要设置为frame mode),用于debug定位是哪个ModId的buf数据有问题。参数说明 [Modid] : module id.
[Devid] : device id.
[ChnId] : channel id.
[PassId] : pass id.
[inputPortId] : inputPort Id.
[bEnable] : 是否使能,0/1.
5.18. mi_sys0¶
5.18.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys/mi_sys0
-
调试信息分析
该命令显示了当前设备pipeline时,各modId模块数据流buf处理的相关信息。
-
参数说明
参数 描述 (mod-dev-chn info) module module Id,取值:
mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_ai / mi_shadow / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc / mi_vifdevId device Id chn channel Id pre
(咨询当前modId是否可以处理buf的handleinfo)suc 当前modId已成功预处理buf的次数 busy 当前modId处于busy的次数 drop 当前modId对预处理的buf进行drop操作的次数 Enq
(将buf添加到当前modId的队列中的handleinfo)run 当前modId enqueue操作返回处于running状态的次数 done 当前modId已处理完成queue里buf的次数 retry 当前modId重新尝试处理queue中buf的次数 drop 当前modId将queue中待处理的buf drop掉的次数 bar cmdq相关 checkin
(inputport buf handleinfo)run 当前modId处理inputport buf操作返回处于running状态的次数 done 当前modId已处理完成inputport里的buf个数 retry 当前modId重新尝试处理inputport buf的系数 drop 当前modId将待处理的inputport buf drop掉的次数 checkout
(outputport buf handleinfo)run 当前modId处理outputport buf操作返回处于running状态的次数 done 当前modId已处理完成outputport里buf的次数 retry 当前modId重新尝试处理outputport buf的次数 drop 当前modId将待处理的outputport buf drop掉的次数
5.19. miu_protect¶
5.19.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys_mma/miu_protect ============= start miu_protect_info ================== LX : cpu_start_addr:0x20000000 size:0x3ffe0000 miu_index miuBlockIndex start_cpu_bus_pa length miu_index miuBlockIndex start_cpu_bus_pa end_cpu_bus_pa length Hex: 0 11 812b2000 816ac000 3fa000 MmuProtect IP white list: clientId name 0x70 CPU_W 0x73 CPU_R 0x20 VCODEC_R 0x21 VCODEC_W miu_index miuBlockIndex start_cpu_bus_pa end_cpu_bus_pa length Hex: 0 10 180000000 180300000 300000 MmuProtect IP white list: clientId name 0x05 CMDQ0_R 0x06 CMDQ1_R 0x70 CPU_W 0x73 CPU_R miu_index miuBlockIndex start_cpu_bus_pa end_cpu_bus_pa length Hex: 0 0 20000000 40000000 20000000 KernelProtect IP white list: clientId name 0x70 CPU_W 0x0f MCU51_RW 0x12 USB20_H_RW 0x11 USB20_RW 0x10 USB30_RW 0x17 EMAC_RW 0x18 EMAC1_RW 0x13 SD30_RW 0x14 SDIO30_RW 0x04 AESDMA_RW 0x07 URDMA_RW 0x02 BDMA_RW 0x03 MOVDMA0_RW 0x16 SATA_RW miu_index miuBlockIndex start_cpu_bus_pa end_cpu_bus_pa length Hex: 0 1 5f000000 5ffe0000 fe0000 KernelProtect IP white list: clientId name 0x70 CPU_W 0x0f MCU51_RW 0x12 USB20_H_RW 0x11 USB20_RW 0x10 USB30_RW 0x17 EMAC_RW 0x18 EMAC1_RW 0x13 SD30_RW 0x14 SDIO30_RW 0x04 AESDMA_RW 0x07 URDMA_RW 0x02 BDMA_RW 0x03 MOVDMA0_RW 0x16 SATA_RW
-
调试信息分析
该命令显示了miu protect相关的信息。
-
参数分析
参数 描述 LX
(以只有一个LX为例,LX表示linux 镜像对应的memory)cpu_start_addr 该LX对应的起始CPU addr。 size 该LX对应的size。 某个kernel protect 的range的相关信息 miu_index 编号。 miuBlockIndex miu个数范围的编号信息。 start_cpu_bus_pa 该range的起始cpu bus addr。 length 该range的length。 KernelProtect IP white list clientId Miu protect的IP白名单里的IP的id(从未分group的角度看的全局id)。 name 与clientId对应的该IP的实际的名字。
5.20. mma_heap_name0¶
5.20.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys_mma/mma_heap_name0 heap_info: heap_name pa_start length avail mma_heap_name0 40000000 1f000000 1b238000 heap_param: mmuEnable addsize_before addsize_after delayUnmap freeEntryNum 1 0 0 0 361 main_chunk_mgr: vpa_start length avail used HighPeak LowPeak 60000000 20000000 1c238000 3dc8000 40c5000 d40000 ------------------------------------------------------------------------------------------------------ offset length used_flag task_name pid Module 0 300000 1 CMDMEM -1 mi_sys 300000 1000 1 sys-logConfig -1 mi_sys 301000 40000 1 sys-logBuffer -1 mi_sys 341000 1fb000 1 vif0-out0-0 867 mi_vif 53c000 1fb000 1 vif0-out0-0 867 mi_vif 737000 1fb000 1 vif0-out0-0 867 mi_vif 932000 3fa000 1 mma_heap_codec -1 mi_sys d2c000 21000 1 ven_mv_0 867 mi_venc d4d000 23000 1 ven_fcty_0 867 mi_venc d70000 12000 1 ven_fctc_0 867 mi_venc d82000 41000 1 ven_rdo_0 867 mi_venc dc3000 1000 1 ven_inst_0 867 mi_venc dc4000 1000 1 venc-algo-m 867 mi_venc dc5000 60000 0 NA -1 mi_sys e25000 a3000 1 ISP_STATIS 867 mi_isp ec8000 1000 1 ISP_WDR 867 mi_isp ec9000 22000 1 DNR_INFO1 867 mi_isp eeb000 32a000 1 DNR_INFO0 867 mi_isp 1215000 6000 1 ISP_IDX_CMDQ 867 mi_isp 121b000 10000 1 ISP_CMDQ 867 mi_isp 122b000 4000 1 ISP_MLOAD 867 mi_isp 122f000 152000 1 RingHeapAlloc -1 mi_sys 1381000 1a6000 0 NA -1 mi_sys 1527000 4000 1 ISP_MLOAD 867 mi_isp 152b000 3f5000 1 venc-ring-mem0 867 mi_venc 1920000 3b1000 1 ven_rec_0_0 867 mi_venc 1cd1000 2fd000 0 NA -1 mi_sys 1fce000 2000000 1 venc-ring-mem1 867 mi_venc 3fce000 2fd000 1 scl0-out0-0 867 mi_scl 42cb000 1bd35000 0 NA -1 mi_sys (mma_heap_codec)sub_chunk_mgr: vpa_start length avail used HighPeak LowPeak 60932000 3fa000 2df000 11b000 11b000 0 ------------------------------------------------------------------------------------------------------ offset length used_flag task_name pid Module 0 ea000 1 vcodec_dev -1 mi_venc ea000 31000 1 ven_work_ven_ta -1 mi_venc 11b000 2df000 0 NA -1 mi_sys (CMDMEM)sub_chunk_mgr: vpa_start length avail 60000000 300000 195000 ------------------------------------------------------------------------------------------------------ offset length used_flag cmdq_id pid ModDev 0 20000 0 -1 -1 NA 20000 16b000 1 1 0 mi_isp0 20000 16b000 1 1 0 mi_scl0 20000 16b000 1 1 0 mi_venc8 18b000 175000 0 -1 -1 NA
-
调试信息分析
该cat信息对应的是该mma heap的基本信息和当前的一些状态。
-
参数分析
参数 描述 heap_info heap_name mma heap的name pa_start heap的起始PA length mma heap的length avail heap里剩余未用的memory总量 heap_param mmuEnable 表示是否启用HW_MMU,1为启用,0为不启用 addrsize_before 设置在申请的buf前多申请预留的size大小 addrsize_after 设置在申请的buf后多申请预留的size大小 delayUnmap buf free时是否开启延时unmap当前申请的buf,当下次再被申请时,先unmap再map
1:开启延时unmap
0:关闭延时unmapfreeEntryNum 空闲的entry的个数 main_chunk_mgr vpa_start main chunk mgr的起始地址,如果开启HW_MMU,该地址为vpa,否则为pa(对应名字会显示pa_start)。main chunk mgr涵盖了整个mma heap的大小。 length chunk mgr管理的整个mma vpa length,由于整个mma heap做为一个chunk mgr,因此当关闭mmu时,该值等于mma heap length;当开启mmu时,该值大于mma heap length。 avail chunk mgr(即heap)里的剩余的未用的memory的总量 used chunk mgr(即heap)里已使用的memory的总量 HighPeak 统计的一段时间内的内存峰值 LowPeak 统计的一段时间内的内存谷值 offset 该chunk在chunk mgr里的offset length 该chunk的length used_flag 该chunk是否被alloc出去使用了。是的话该值为1;否则free状态的话该值为0。 task_name 如果used flag为1,则task_name里存的是哪个task使用的它;否则该值为无效值NA。 pid 暂时无效 Module 该chunk被哪个Module使用了 (mma_heap_codec)
sub_chunk_mgr(mma_heap_codec)
sub_chunk_mgr属于main chunk mgr的子chunk mgr,对应task name里的mma_heap_codec,显示的参数表示的意思请参考main chunk mgr。
sub chunk mgr默认不会打印,需要下命令才会打印。下命令后,有可能没有sub chunk mgr,或者会有不止一个sub chunk mgr打印出来。
需要下的命令为 echo show_privMma 1 > /proc/mi_modules/mi_sys/mi_sys0(CMDMEM)
sub_chunk_mgr(CMDMEM)
sub_chunk_mgr属于main chunk mgr的子chunk mgr,对应task name里的CMDMEM。此sub chunk mgr会默认打印,表示cmdq使用mma buf的情况。 vpa_start (CMDMEM)sub chunk mgr的起始地址,如果开启HW_MMU,该地址为vpa,否则为pa(对应名字会显示pa_start)。 length 分配给cmdq的mma buf大小 avail cmdq剩余可使用的mma buf大小 offset 该cmdq申请的buf在名为CMDMEM mma buf中的起始offset length 该cmdq在名为CMDMEM mma buf中申请的mma buf大小 used_flag 该buf是否被alloc出去使用了。是的话该值为1;否则free状态的话该值为0。 cmdq_id 使用buf对应cmdq的id pid 暂时无效 ModDev 申请cmdq buf的module以及对应的device id
5.20.2. echo¶
功能 | 即dump 指定offset和length的data到指定的路径 |
---|---|
命令 | echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/mma_heap_name[Num] |
参数说明 | [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。 [Offset] 从该mma heap的offset开始dump data,必须4KB对齐。 [Length] 在该mma heap里dump的总数据量, 必须4KB对齐 [Num] mma head 对应的数字,目前 mma_heap_name0 可通过 cat /proc/cmdline 查看 |
举例 | echo /mnt/ 0 4096 > /proc/mi_modules/mi_sys_mma/mma_heap_name0 在 /mnt下产生 mma__mma_heap_name0__0__4096.bin 文件 |
5.21. imi_mma_heap¶
5.21.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys_mma/imi_mma_heap mma heap nameheap_base_cpu_bus_addr length chunk_mgr_avail mmuEnable addsize_before addsize_after bMmuDelayUnmap free_entry_num imi_mma_heap 20000000 43800 26800 0 0 0 0 0 chunk_mgr info: offset length avail used HighPeak LowPeak 0 43800 26800 1d000 1d000 0 each chunk info: offset length used_flag task_name pid Module 0 1d000 1 SRAM -1 mi_venc 1d000 26800 0 NA -1 mi_sys
-
调试信息分析
该cat信息对应的是该mma heap的基本信息和当前的一些状态。
-
参数分析
参数 描述 heap basic info mma heap name mma heap 的 name heap_base_cpu_bus_addr 该allocator里的allocations中未被使用的数目 length heap 的 length chunk_mgr_avail heap 里的剩余的未用的 memory 的总量 mmuEnable Mma heap 是否支持 HW_MMU。该值为 1 表示支持,为 0 表示不支持 addrsize_before 设置在申请的buf前多申请预留的size大小 addrsize_after 设置在申请的buf后多申请预留的size大小 bMmuDelayUnmap buf free时是否开启延时unmap当前申请的buf,当下次再被申请时,先unmap再map
1:开启延时unmap
0:关闭延时unmapfree_entry_num 空闲的entry的个数 chunk_mgr info offset chunk mgr 的 offset,由于整个 mma heap 做为一个 chunk mgr,因此该值永远为 0。allocator里的逻辑offset。 length chunk mgr 的 length,由于整个 mma heap 做为一个 chunk mgr,因此该值永远为 mma heap length。 avail chunk mgr (即heap)里空闲的memory的总量 used chunk mgr(即heap)里已使用的memory的总量 HighPeak 统计的一段时间内的内存峰值 LowPeak 统计的一段时间内的内存谷值 each chunk info (chunk mgr 里各 chunk 的信息和使 用情况) offset 该 chunk 在 chunk mgr 里的 offset length 该 chunk 的 length used_flag 该 chunk 是否被 alloc 出去使用了。是的话该值为 1;否则 free 状态的话该值为 0。 task_name 如果 used flag 为 1,则 task_name里存的是哪个 task 使用的它;否则该值为无效值 NA。 pid 该 chunk 所属的current->tgid Module 该 chunk 所属的模块
5.22. meta¶
5.22.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys_mma/meta =================== start meta_info ========================= basic info: total page count:16 each meta data size:256 total_count_with_metadatasize 256 total_free_count_with_metadatasize:254 meta info : ref_cnt=3 each allocation info: offset_in_pool length phy_addr va_in_kern real_used_flag 0x0 0x100 0x2336000 c1736000 0 0x100 0x100 0x2336100 c1736100 0 0x200 0x100 0x2336200 c1736200 0 0x300 0x100 0x2336300 c1736300 0 0x400 0x100 0x2336400 c1736400 0 0x500 0x100 0x2336500 c1736500 0 0x600 0x100 0x2336600 c1736600 0 0x700 0x100 0x2336700 c1736700 0 0x800 0x100 0x2336800 c1736800 0 0x900 0x100 0x2336900 c1736900 0 0xa00 0x100 0x2336a00 c1736a00 0 …… =================== end meta_info ================================
-
调试信息分析
只要用过meta allocator(只有一个meta allocator),就会生成/proc/mi_modules/mi_sys_mma/meta,且其对应的memory就会完全alloc,等待被使用。
5.22.2. echo¶
功能 | 即dump 指定offset和length的data到指定的路径 |
---|---|
命令 | echo [Path] [Offset] [Length] > /proc/mi_modules/mi_sys_mma/ vb_pool_global |
参数说明 | [Path] 文件要保存的路径,只需提供路径,系统会根据参数自动生成对应的文件名。 [Offset] 从该allocator的哪个offset开始dump data,是allocator的逻辑offset。 [Length]在该allocator里dump的总的数据量的大小。 |
举例 | echo /mt 0 1024 > /proc/mi_modules/mi_sys_mma/meta 在 /mnt 下产生 meta__0__1024.bin |
5.23. mi_modulenamedevid¶
5.23.1. cat¶
-
调试信息
cat /proc/mi_modules/mi_scl/mi_scl0
-
调试信息分析
cat操作的结果是分为2部分的,第一部分是MI_SYS提供的针对该device的通用的调试信息,从device、channel、input port、output port四个角度提供;第二部分是该device私有的信息。私有的信息各module的内容别处会阐述,这里SYS角度只阐述通用的信息。
以cat /proc/mi_modules/mi_scl/mi_scl0为例,得到上面的结果。
-
参数说明
参数 描述 Common info for device ChnNum 该device的总的channel 的数目。 EnChnNum 该device的enabled了的channel的数目。 PassNum 该device的pass的数目。 InPortNum 该device的input port的数目。 OutPortNum 该device的output port的数目。 CollectSize 该dev对应的AllocatorCollection含有的allocator的数目总和。 CMDQ kickoff counter PassId 该device使用到cmdq的pass id。 CmdqId 使用的cmdq的id。 TotalKickoff 该cmdq当前kickoff的次数。 kickoffFence 该cmdq当前kickoff时的fence值。 Idle 该cmdq当前kickoff时的Idle次数。 DevId 该mi module的device id。 current_buf_size 该device当前使用的buf大小。 Peak_buf_size 该device使用buf的峰值。 each dev buf info offset Buf开始的offset。 length Buf的长度。 used_flag 记录buf是否使用的flag。 task_name 使用这块buf的task name。 Common info for channel(only dump enabled channel) ChnId Channel 的id值。 PassNum Pass的id值。 EnInPNum 该channel的enabled input port数量。 EnOutPNum 该channel的enabled output port数量。 MMAHeapName 如果有SetChnMMAConf的话,该值为对应的mma heap name;如果没有设置的话,该值为NULL。 current_buf_size 该channel当前使用的buf size。 Peak_buf_size 该channel使用buf的目前峰值。 user_pid 该channel对应的pid。 each chn buf info offset 该channel使用buf的起始offset。 length Buf的长度。 used_flag 记录buf是否使用的flag。 task_name 该buf对应的task name。 chn pass pipeline delay in us Flow 流程点:
OnPreProcessInputTask:MI PASS判断是否需要处理当前task,如果可以给output buffer配置;
EnqueueInputTask:将input task 交由MI PASS开始处理;
BarrierInputTask:插入CMDQ同步指令(比如waitevent, polling engine done);
CheckInputTaskStatus:检查input task是否完成,及完成状态(成功,失败,etc);
DequeueInputTask:通知MI PASS释放input task相关联的资源;
OnPollingAsyncOutputTaskConfig:对于输入输出不同步的MI Pass,或者只有输出没有输入的MI Pass,MI SYS查询是否有独立output buf request需求;
EnqueueAsyncOutputTask:将非同步输出的output task交由MI PASS做处理;
BarrierAsyncOutputTask:对非同步output task插入cmdq同步指令;
CheckOutputTaskStatus:检查output task是否完成,及完成状态(成功,失败,etc);
DequeueOutputTask:通知MI PASS释放output task相关联的资源;
FinDMADispatch:MI SYS将MI PASS的output task中的buffer传递到绑定的下级MI PASS的input queue。Min Buffer产生到该MI PASS对应Flow所经过的最小延时。 Max Buffer产生到该MI PASS对应Flow所经过的最大延时。 Avg Buffer产生到该MI PASS对应Flow所经过的平均延时。 Diff Buffer产生到该MI PASS对应Flow所经过的当前延时。 Input port common info(only dump enabled Input port) ChnId 该input port所在的channel id。 PassId 该 input port 所在的 pass id。 PortId 该input port的id。 user_buf_quota 该InputPort的buff数目的Quota。 UsrInjectQ_cnt 该InputPort 里的UsrInjectBufQueue(usr inject进来还没处理完成的buf队列)里的buff数目。 BindInQ_cnt 该InputPort 里的BindInputBufQueue(由绑定前级enq进来还没处理完成的buf队列)里的buff数目。 TotalPendingBuf_size 该inputPort的cur_working_input_queue(还没开始处理,即将处理)里面各个buf的size总和。 usrLockedInjectCnt 用户当前拿到了多少个buf。 newPulseQ_cnt 该inputPort在new_pulse_fifo_inputqueue(input port buf缓存队列0)的buf数目。 nextTodoPulseQ_cnt 该inputPort在new_todo_pulse_inputqueue(input port buf缓存队列1)的buf数目。 curWorkingQ_cnt 该inputPort在cur_working_input_queue(还没开始处理,即将处理)的buf数目。 workingTask_cnt 该inputPort在input_working_tasklist(正在处理的input task的列表)的task数目。 lazzyRewindTask_cnt 该inputPort在lazzy_rewind_inputtask_list(即将回退到cur_working_input_queue队列中task列表)的task数目。 Enable 标记该input port是否enable。 bind_module_id 与该input port 进行了binded的output port所在的module的id。 bind_module_name 与该input port 进行了binded的output port所在的module的name。 bind_DevId 与该input port 进行了binded的output port所在的device的id。 bind_ChnId 与该input port 进行了binded的output port所在的channel的id。 bind_PortId 与该input port 进行了binded的output port的id。 bind_Type 绑定模式。 bind_Param 该input port进行bind时所带的参数。 enable 标记绑定的output port是否enable。 SrcFrmrate Src帧率。 DstFrmrate Dst帧率。 GetFrame/Ms 统计的帧数/统计所耗的时间。 FPS 实际帧率。 FinishCnt 该Input port finish buf的个数。 RewindCnt 该Input port rewind buf的个数。 DropCnt 该Input port drop buf的个数。 Output port common info (only dump enabled Output port) ChnId 该output port所在的channel的id。 PassId 该output port所在的pass的id。 PortId 该output port的id。 usrDepth User最多可以拿到的output buf数量。 BufCntQuota 该OutputPort的 buff数目的Quota。 usrLockedCnt 从UsrGetFifoBufQueue(用户获取output port buf的队列)里用户实际拿走了多少个buffer。 totalOutPortInUsed totalOutputPortInUsedBuf数目。 DrvBkRefFifoQ_cnt 该OutputPort的DrvBkRefFifoQueue(驱动预处理队列,目前没用到)里的buffer数目。 DrvBkRefFifoQ_size 该OutputPort的DrvBkRefFifoQueue(驱动预处理队列,目前没用到)里的buffer的总size。 UsrGetFifoQ_cnt 该OutputPort的UsrGetFifoBufQueue(用户获取output port buf的队列)里的buffer数目。 UsrGetFifoQ_size 该OutputPort的UsrGetFifoBufQueue(用户获取output port buf的队列)里的buffer的总size。 UsrGetFifoQ_seqnum 被加到UsrGetFifoBufQueue(用户获取output port buf的队列)的buf总个数。 UsrGetFifoQ_discardnum 由于UsrGetFifoBufQueue(用户获取output port buf的队列)满了而被discard的buf个数。 workingTask_cnt 当前在output_working_tasklist(正在处理的output task的列表)的task总个数。 finishedTask_cnt 当前在output_finished_tasklist(已经处理完成还没推到下一级的列表)的task总个数。 GetFrame/Ms 统计的帧数/统计所耗的时间。 FPS 实际帧率。 FinishCnt 该output port finish buf的总个数。 RewindCnt 该output port rewind buf的总个数。 GetTotalCnt 向mi_sys申请output buf的总次数。 GetOkCnt 向mi_sys申请output buf成功的次数。 BindPeerInputPortList ChnId 该output port所在的channel的id。 PassId 该output port所在的pass的id。 PortId 该output port的id。 Enable 标记该output是否enable。 bind_module_id 与该output port 进行了binded的input port list中的其中一个input port(以下简称该binded input port)所在的module的id。 bind_module_name 该binded input port所在的module的name。 bind_DevId 该binded input port所在的device id。 bind_ChnId 该binded input port所在的channel id。 bind_PortId 该binded input port的id。 bind_Type 绑定模式。 bind_Param 绑定时所下的参数。 enable 标记已绑定的input port是否enable。
5.23.2. echo¶
功能 | 获得模块的help信息 |
---|---|
命令 | echo help > /proc/mi_modules/[ModName]/[ModID] |
参数说明 | [ModName] 模块的名字 mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_scl / mi_ai / mi_isp / mi_shadow / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc / mi_vif [ModID] 模块中对应的文件一般为模块的名字+数字 如mi_disp0 / mi_gfx0 / mi_rgn0 |
举例 | echo help > /proc/mi_modules/mi_disp/mi_disp0 得到mi_disp0 节点文件的帮助信息 |
功能 | Dump Port 的信息 |
---|---|
命令 | echo dump_buffer [ChnID] [PortType] [PortID] [QueueName][Path] [EndMethod] > /proc/mi_modules/[ModName]/[ModID] |
参数说明 | [ChnID] 通道的ID [PortType] iport 或 oport 分别代表input port output port [PortID] 该port的id [QueueName] 如果是input port,值只能是"UsrInject" 或者"BindInput" , 如果是output port,值只能是"UsrGetFifo" [Path] 数据保存的文件路径。注意是绝对路径,系统会根据参数自动生成文件名,不同的buffer保存在不同的文件 [EndMethod] dump buffer的结束方法。仅支持三类: (1) "bufnum=xxx":dump指定数目的buffer (2) "time=xxx"(unit: ms):dump过程持续time对应的时间 (3) "start/end" pair:用start开始dump,用end结束dump,使用时其他5个参数需完全一致。 [ModName] 模块的名字 mi_disp / mi_gfx / mi_rgn / mi_vdec / mi_scl / mi_ai / mi_isp / mi_shadow / mi_vdisp / mi_ao / mi_hdmi / mi_sys / mi_venc / mi_vif [ModID] 模块中对应的文件, 一般为模块的名字+数字 |
举例 | echo dump_buffer 0 iport 0 BindInput /mnt bufnum=1 > /proc/mi_modules/mi_disp/mi_disp0 dump disp模块 iport 的数据 |
5.24. mem_stat¶
5.24.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_sys_mma/mem_stat mi_sys CMDMEM c0000 sys-logBuffer 40000 sys-logConfig 1000 TotalSize 101000 AllTotalSize 101000
-
调试信息分析
打印出mi sys 内存状态。
-
参数说明
参数 描述 Mem_stat mi_sys 所属mi_sys模块 CMDMEM Cmd的内存大小 sys-logBuffer Sys log最大可申请的buf大小 sys-logConfig 分配(申请)给sys log的buf大小 TotalSize ModuleUsdTotalSize 模块使用的size AllTotalSize 总的size