MI SCL API
1. 概述¶
1.1. 模块说明¶
SCL将原始画面缩放到各个output port 指定分辨率。每个scl按照输入数据源的类型划分成不同的Device, 每一个output port 端口有crop/scaling/mirror/flip/pixel 转换功能。
1.2. 流程框图¶
图1‑1:Tiramisu框图
Tiramisu MI_SCL 总共有6个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
Device0 | 只支持和MI_ISP output port0 realtime 连接 |
Device1 | 支持从Dram读取数据 支持MI_JPD realtime 绑定 |
Device2 | 只支持和MI_VIF YUV Realtime 连接 |
Device3 | 只支持从Dram读取数据 只可以使用E_MI_SCL_HWSCL5 支持Rotation, 做rotation的时候功能限制见MI_SCL_SetChnParam |
Tiramisu Input规格
Device Id | YUV422 Max width | 非YUV422 Max width | Pixel format | Bind type |
---|---|---|---|---|
0 | / | / | YUV422 | Realtime Bind ISP |
1 | 8192 | 3840 | YUV420/YUV422/ ARGB8888/ ABGR8888/ BGRA8888 |
1.Frame mode 2.Realtime Bind JPD |
2 | / | / | YUV422 | Realtime Bind VIF |
3 | 8192 | 8192 | YUV420/YUV422/ ARGB8888/ ABGR8888/ BGRA8888 |
Frame mode |
Tiramisu HWSclId Output规格
HWSclId | YUV422 Max width | 非YUV422 Max width | Pixel format | Bind type |
---|---|---|---|---|
0 | 8192 | 4608 | YUV420/YUV422/ ARGB8888/ ABGR8888/ BGRA8888 |
1.Frame mode 2.Realtime Bind Venc(JPEG) 3.Ring/HW_AUTOSYNC Bind Venc(h26x) |
1 | 8192 | 4608 | 同port0 | 同Port0 |
2 | 3840 | 3840 | 同port0 | 同Port0 |
3 | 3840 | 3840 | 同port0 | 同Port0 |
4 | 3840 | 3840 | 同port0 | 同Port0 |
5 | 3840 | 3840 | 同port0 | 1.同Port0 2.支持 disp rot 时使用 |
注意:
-
相同的HWSclId不可以跨Device使用。
例如:
Dev0的pstSclDevAttr->u32NeedUseHWOutPortMask= E_MI_SCL_HWSCL2| E_MI_SCL_HWSCL3;
Dev1的pstSclDevAttr->u32NeedUseHWOutPortMask= E_MI_SCL_HWSCL0| E_MI_SCL_HWSCL2;
这样HWSCL2就被Dev0/Dev1同时使用,创建Device时会返回err 状态。
-
output portid按照MI_SCL_CreateDevice 时设置u32NeedUseHWOutPortMask从低位到高位依次和HWSCLID 映射。
-
output port和后端realtime/ring/hw_autosync 绑定时,后端仅支持和一个output port id 连接。可以支持多个channel 但是同一个output port id 绑定realtime或者 hw_autosync(h26x)。
1.3. 关键字说明¶
-
Device
Device 由固定的input 类型,和用户分配的HWSclId 组成。
-
Channel
一个Device可以分时复用为多个通道, 每个通道为一个channel。
-
Input Port
Channel上的输入端口,每个Device支持的输入类型请参考流程框图。
-
Output Port
Device上的输出端口,输出端口和Device 的HWSclId 一一对应。
2. API 参考¶
该功能模块提供以下API:
API名 | 功能 |
---|---|
MI_SCL_CreateDevice | 创建SCL设备 |
MI_SCL_DestroyDevice | 销毁SCL设备 |
MI_SCL_CreateChannel | 创建SCL 通道 |
MI_SCL_DestroyChannel | 销毁SCL 通道 |
MI_SCL_SetChnParam | 设置通道属性 |
MI_SCL_GetChnParam | 获取通道属性 |
MI_SCL_SetInputPortCrop | 设置通道input 端口crop |
MI_SCL_GetInputPortCrop | 获取通道input端口crop 信息 |
MI_SCL_StartChannel | 启动通道 |
MI_SCL_StopChannel | 禁用通道 |
MI_SCL_SetOutputPortParam | 设置output 端口参数 |
MI_SCL_GetOutputPortParam | 获取output 端口参数 |
MI_SCL_EnableOutputPort | 使能output 端口 |
MI_SCL_DisableOutputPort | 禁用output 端口 |
MI_SCL_StretchBuf | 缩放、拉伸、裁剪指定内存中的图像数据 |
2.1. MI_SCL_CreateDevice¶
-
功能
创建一个SCL设备。
-
语法
MI_S32 MI_SCL_CreateDevice(MI_SCL_DEV DevId, MI_SCL_DevAttr_t *pstSclDevAttr)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号。 输入 pstSclDevAttr Scl 设备属性。 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
-
每个Device的特性参考1.2章节中 注意说明。
-
stCreateDevAttr.u32NeedUseHWOutPortMask = E_MI_SCL_HWSCL2| E_MI_SCL_HWSCL3| E_MI_SCL_HWSCL4;
每个channel的输出端口和Device上的HWSCL ID之间对应关系为:
Port0 \rightarrow HWSCL2
Port1 \rightarrow HWSCL3
Port2 \rightarrow HWSCL4
Portid 与HWSCL bitmask 从低到高对应。
-
有MI_VDEC使用场景,Device3 会被内部创建使用,其它Device不能再使用HWSCL5;用户创建Device3对应的channel 使用。
-
-
举例
MI_SCL 初始化流程:
MI_S32 ST_SclModuleInit(MI_SCL_DEV SclDevId) { ST_SclDevAttr_t *pstSclDevAttr= &gstSclModule.stSclDevAttr[SclDevId]; MI_SCL_CHANNEL SclChnId = 0; MI_SCL_PORT SclOutPortId =0; MI_SCL_DevAttr_t stCreateDevAttr; memset(&stCreateDevAttr, 0x0, sizeof(MI_SCL_DevAttr_t)); stCreateDevAttr.u32NeedUseHWOutPortMask=E_MI_SCL_HWSCL2|E_MI_SCL_HWSCL3| E_MI_SCL_HWSCL4; MI_SCL_CreateDevice((MI_SCL_DEV)SclDevId, &stCreateDevAttr); MI_SCL_ChannelAttr_t stSclChnAttr; memset(&stSclChnAttr, 0x0, sizeof(MI_SCL_ChannelAttr_t)); MI_SCL_CreateChannel((MI_SCL_DEV)SclDevId, SclChnId, &stSclChnAttr); if(pstSclChnAttr->stSclInPortAttr[0].stInputCropWin.u16Width !=0 && pstSclChnAttr->stSclInPortAttr[0].stInputCropWin.u16Height !=0) { MI_SCL_SetInputPortCrop((MI_SCL_DEV)SclDevId, SclChnId, &pstSclChnAttr->stSclInPortAttr[0].stInputCropWin); } MI_SCL_ChnParam_t stSclChnParam; memset(&stSclChnParam, 0x0, sizeof(MI_SCL_ChnParam_t)); stSclChnParam.eRot = pstSclChnAttr->eRotate; MI_SCL_SetChnParam((MI_SCL_DEV)SclDevId, SclChnId, &stSclChnParam); MI_SCL_StartChannel((MI_SCL_DEV)SclDevId, SclChnId); for(SclOutPortId=0; SclOutPortId<ST_MAX_ISP_OUTPORT_NUM; SclOutPortId++) { ST_PortAttr_t *pstSclOutputAttr = &pstSclChnAttr->stSclOutPortAttr[SclOutPortId]; if(pstSclOutputAttr->bUsed == TRUE) { MI_SCL_OutPortParam_t stSclOutputParam; memset(&stSclOutputParam, 0x0, sizeof(MI_SCL_OutPortParam_t)); memcpy(&stSclOutputParam.stSCLOutCropRect, &pstSclOutputAttr->stOrigPortCrop, sizeof(MI_SYS_WindowRect_t)); memcpy(&stSclOutputParam.stSCLOutputSize, &pstSclOutputAttr->stOrigPortSize, sizeof(MI_SYS_WindowSize_t)); stSclOutputParam.ePixelFormat = pstSclOutputAttr->ePixelFormat; stSclOutputParam.bMirror = pstSclOutputAttr->bMirror; stSclOutputParam.bFlip = pstSclOutputAttr->bFlip; MI_SCL_SetOutputPortParam((MI_SCL_DEV)SclDevId, SclChnId, SclOutPortId, &stSclOutputParam); MI_SCL_EnableOutputPort((MI_SCL_DEV)SclDevId, SclChnId, SclOutPortId); } } return MI_SUCCESS; }
MI_SCL 去初始化流程:
MI_S32 ST_SclModuleUnInit(MI_SCL_DEV SclDevId) { ST_SclDevAttr_t *pstSclDevAttr= &gstSclModule.stSclDevAttr[SclDevId]; MI_SCL_CHANNEL SclChnId = 0; MI_SCL_PORT SclOutPortId =0; ST_SclChannelAttr_t *pstSclChnAttr = &pstSclDevAttr->stSclChnlAttr[SclChnId]; for(SclOutPortId=0; SclOutPortId<ST_MAX_SCL_OUTPORT_NUM; SclOutPortId++) { MI_SCL_DisableOutputPort((MI_SCL_DEV)SclDevId, SclChnId, SclOutPortId); } MI_SCL_StopChannel((MI_SCL_DEV)SclDevId, SclChnId); MI_SCL_DestroyChannel((MI_SCL_DEV)SclDevId, SclChnId); MI_SCL_DestroyDevice((MI_SCL_DEV)SclDevId); return MI_SUCCESS; }
2.2. MI_SCL_DestroyDevice¶
-
功能
销毁一个SCL 设备。
-
语法
MI_S32 MI_SCL_DestroyDevice(MI_SCL_DEV DevId)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
需要先禁用掉设备上所有的输出端口和通道,否则会返回失败。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.3. MI_SCL_CreateChannel¶
-
功能
设备上创建一个通道。
-
语法
MI_S32 MI_SCL_CreateChannel(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_ChannelAttr_t *pstChnAttr)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号,取值范围(0~31)。 输入 pstChnAttr SCL 通道属性 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
需要先创建设备才能创建通道。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.4. MI_SCL_DestroyChannel¶
-
功能
销毁设备上的一个通道。
-
语法
MI_S32 MI_SCL_DestroyChannel(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
需要关掉通道上的所有输出端口,才能销毁通道。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.5. MI_SCL_SetChnParam¶
-
功能
动态设置通道参数。
-
语法
MI_S32 MI_SCL_SetChnParam(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_ChnParam_t *pstChnParam)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 pstChnParam 通道参数 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
-
通道已经在运行的情况下,需要改变通道参数, 需要先使用MI_SCL_StopChannel](#210-mi_scl_stopchannel)将通道停下,清除缓存数据。
-
Tiramisu 系列芯片只有Device3 支持rotation。
-
当SCL Dev3 设置rotation 90、180、270 时,output端口仅支持rotation功能,不支持crop/scaling/pixel format转换/Mirror/Flip。
-
rot时不支持MI_RGN attach 叠加osd/cover。
-
由于rot不支持scaling,output width需要8对齐,所以rot 90/270的input height需要8对齐,否则内部检查会报错。
-
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.6. MI_SCL_GetChnParam¶
-
功能
获取通道参数。
-
语法
MI_S32 MI_SCL_GetChnParam(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_ChnParam_t *pstChnParam)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 pstChnParam SCL 通道参数 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
在没有设置的情况下,获取到的参数都为0。
-
相关主题
2.7. MI_SCL_SetInputPortCrop¶
-
功能
在输入端口设置裁剪区域。
-
语法
MI_S32 MI_SCL_SetInputPortCrop(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SYS_WindowRect_t *pstCropInfo)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 pstCropInfo 裁剪区域 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
只有输入端口是从DRAM 读取数据时,该设置才能生效。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.8. MI_SCL_GetInputPortCrop¶
-
功能
获取通道输入端口裁剪区域。
-
语法
MI_S32 MI_SCL_GetInputPortCrop(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SYS_WindowRect_t *pstCropInfo)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 pstCropInfo 裁剪区域 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
当不需要裁剪时, 获取到的是输入端口分辨率
-
相关主题
2.9. MI_SCL_StartChannel¶
-
功能
启用设备上的一个通道。
-
语法
MI_S32 MI_SCL_StartChannel(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
和MI_SCL_StopChannel成对调用。
-
举例
参考MI_SCL_CreateDevice举例。
-
相关主题
2.10. MI_SCL_StopChannel¶
-
功能
停用设备上的一个通道。
-
语法
MI_S32 MI_SCL_StopChannel(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId)
-
形参
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
在通道创建的情况下,都可以停下通道, 通道停下所有的输出端口都不会有数据输出。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.11. MI_SCL_SetOutputPortParam¶
-
描述
设置通道输出端口参数。
-
语法
MI_S32 MI_SCL_SetOutputPortParam(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_PORT PortId, MI_SCL_OutPortParam_t *pstOutPortParam)
-
参数
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 PortId 输出端口号 输入 pstOutPortParam 输出端口参数 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
-
在输出端口已经启用的情况下,需要改变输出参数,需要先调用MI_SCL_DisableOutputPort 禁用端口,再来设置参数,然后再启用输出端口。
-
当VIF->ISP->SCL 均为Realtime绑定时,SCL Output设置Scaling up 存在FIFO FULL 风险,不建议设置Scaling up。
-
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.12. MI_SCL_GetOutputPortParam¶
-
描述
获取输出端口参数。
-
语法
MI_S32 MI_SCL_GetOutputPortParam(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_PORT PortId, MI_SCL_OutPortParam_t *pstOutPortParam)
-
参数
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 PortId SCL 输出端口号 输入 pstOutPortParam SCL 输出端口参数 输出 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
相关主题
2.13. MI_SCL_EnableOutputPort¶
-
描述
使能输出端口。
-
语法
MI_S32 MI_SCL_EnableOutputPort(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_PORT PortId)
-
参数
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 PortId SCL 输出端口号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
和MI_SCL_DisableOutputPort 成对调用。
-
举例
参考 MI_SCL_CreateDevice举例。
-
相关主题
2.14. MI_SCL_DisableOutputPort¶
-
描述
禁用输出端口。
-
语法
MI_S32 MI_SCL_DisableOutputPort(MI_SCL_DEV DevId, MI_SCL_CHANNEL ChnId, MI_SCL_PORT PortId)
-
参数
参数名称 描述 输入/输出 DevId SCL 设备号 输入 ChnId SCL 通道号 输入 PortId 输出端口号 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
和MI_SCL_EnableOutputPort 成对调用。
-
举例
参考MI_SCL_CreateDevice举例。
-
相关主题
2.15. MI_SCL_StretchBuf¶
-
描述
缩放、拉伸、裁剪指定内存中的图像数据。
-
语法
MI_S32 MI_SCL_StretchBuf(MI_SCL_DirectBuf_t *pstSrcBuf, MI_SYS_WindowRect_t *pstSrcCrop,MI_SCL_DirectBuf_t *pstDstBuf, MI_SCL_FilterType_e eFilterType)
-
参数
参数名称 描述 输入/输出 pstSrcBuf 源数据buffer参数指针 输入 pstSrcCrop 源数据裁剪区域 输入 pstDstBuf 输出buffer参数指针 输出 eFilterType Scl 使用滤波器类型 输入 -
返回值
-
MI_SUCCESS(0) 成功。
-
非0 失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
-
该API使用的是Device3, 需要提前创建Device3。
-
该接口是阻塞形式,这帧数据做完才会结束。
-
输入宽、高的对齐要求:
pixel format width height YUV420SPNV12, YUV420SPNV21 16 2 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 8 2 ARGB8888, ABGR8888, BGRA8888 4 2 -
输出宽、高的对齐要求:
pixel format width height YUV420SPNV12, YUV420SPNV21 8 2 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 8 2 ARGB8888, ABGR8888, BGRA8888 8 2
-
-
相关主题
3. SCL 数据类型¶
视频输入相关数据类型定义如下:
数据类型 | 描述 |
---|---|
MI_SCL_DEV | SCL设备ID |
MI_SCL_CHANNEL | SCL 通道ID |
MI_SCL_PORT | SCL 输出端口ID |
MI_SCL_HWSclId_e | SCL 输出端口对应硬件scaling ID |
MI_SCL_DevAttr_t | SCL 设备属性 |
MI_SCL_ChannelAttr_t | SCL 通道静态属性 |
MI_SCL_ChnParam_t | SCL 通道动态属性 |
MI_SCL_OutPortParam_t | SCL 输出端口参数 |
MI_SCL_FilterType_e | SCL 滤波类型 |
MI_SCL_DirectBuf_t | SCL操作指定buffer 参数类型 |
3.1. MI_SCL_DEV¶
-
说明
定义SCL 设备ID类型。
-
定义
typedef MI_U32 MI_SCL_DEV;
3.2. MI_SCL_CHANNEL¶
-
说明
定义SCL 通道ID类型。
-
定义
typedef MI_U32 MI_SCL_CHANNEL;
3.3. MI_SCL_PORT¶
-
说明
定义SCL 输出端口ID类型。
-
定义
typedef MI_U32 MI_SCL_PORT;
3.4. MI_SCL_HWSclId_e¶
-
说明
SCL设备使用的硬件scaler Id 枚举。
-
定义
typedef enum { E_MI_SCL_HWSCLID_INVALID= 0, E_MI_SCL_HWSCL0 = 0x0001, E_MI_SCL_HWSCL1 = 0x0002, E_MI_SCL_HWSCL2 = 0x0004, E_MI_SCL_HWSCL3 = 0x0008, E_MI_SCL_HWSCL4 = 0x0010, E_MI_SCL_HWSCL5 = 0x0020, E_MI_SCL_HWSCL_MAX = 0xffff, }MI_SCL_HWSclId_e;
-
相关数据类型及接口
3.5. MI_SCL_DevAttr_t¶
-
说明
SCL 设备属性。
-
定义
typedef struct MI_SCL_DevAttr_s { MI_U32 u32NeedUseHWOutPortMask; }MI_SCL_DevAttr_t;
-
成员
成员名称 描述 u32NeedUseHWOutPortMask Device需要使用的Scaler id。 -
注意事项
-
由MI_SCL_HWSclId_e成员bit mask组成。
-
每个HW scl id 特点参考1.2章节,HW sclid 规格,按照场景需求选择。
-
-
相关数据类型及接口
3.6. MI_SCL_ChannelAttr_t¶
-
说明
Scl 通道属性。
-
定义
typedef struct MI_SCL_ChannelAttr_s { MI_U32 u32Reserved; }MI_SCL_ChannelAttr_t;
-
成员
成员名称 描述 u32Reserved 预留参数。 -
注意事项
Tiramisu系列芯片没有通道静态设置参数,可直接设置0。
-
相关数据类型及接口
3.7. MI_SCL_ChnParam_t¶
-
说明
SCL通道动态参数类型
-
定义
typedef struct MI_SCL_ChnParam_s { MI_SYS_Rotate_e eRot; }MI_SCL_ChnParam_t;
-
成员
成员名称 描述 eRot Rotation 参数 -
相关数据类型及接口
3.8. MI_SCL_OutPortParam_t¶
-
说明
SCL 输出端口参数。
-
定义
typedef struct MI_SCL_OutPortParam_s { MI_SYS_WindowRect_t stSCLOutCropRect; MI_SYS_WindowSize_t stSCLOutputSize; MI_BOOL bMirror; MI_BOOL bFlip; MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompressMode; }MI_SCL_OutPortParam_t;
-
成员
成员名称 描述 stSCLOutCropRect 输出裁剪区域 stSCLOutputSize 输出size bMirror 使能水平翻转 bFlip 使能垂直翻转 ePixelFormat 输出像素格式 eCompressMode 输出压缩格式 -
注意事项
Tiramisu 系列芯片不支持压缩格式。
-
相关数据类型及接口
3.9. MI_SCL_FilterType_e¶
-
说明
Scl 滤波器类型。
-
定义
typedef enum { E_MI_SCL_FILTER_TYPE_AUTO, E_MI_SCL_FILTER_TYPE_BYPASS, E_MI_SCL_FILTER_TYPE_BILINEAR, E_MI_SCL_FILTER_TYPE_BICUBIC, E_MI_SCL_FILTER_TYPE_MAX, } MI_SCL_FilterType_e;
-
成员
成员名称 描述 E_MI_SCL_FILTER_TYPE_AUTO 自动选择滤波器 E_MI_SCL_FILTER_TYPE_BYPASS 不经过算法滤波器 E_MI_SCL_FILTER_TYPE_BILINEAR 双线性滤波器 E_MI_SCL_FILTER_TYPE_BICUBIC 双立方插值滤波器 E_MI_SCL_FILTER_TYPE_MAX 滤波器类型最大值 -
注意事项
当选择和算法相同的滤波器类型,可以得到更加精准的算法结果。
-
相关数据类型及接口
3.10. MI_SCL_DirectBuf_t¶
-
说明
SCL 直接操作buffer 参数类型。
-
定义
typedef struct MI_SCL_DirectBuf_s { MI_SYS_PixelFormat_e ePixelFormat; MI_U32 u32Width; MI_U32 u32Height; MI_PHY phyAddr[2]; MI_U32 u32Stride[2]; MI_U32 u32BuffSize; }MI_SCL_DirectBuf_t;
-
成员
成员名称 描述 ePixelFormat Buffer 像素格式 u32Width 有效像素宽度 u32Height 有效像素高度 phyAddr Buffer 物理地址 u32Stride Buffer 一行占字节数 u32BuffSize Buffer 占用空间 -
相关数据类型及接口
4. SCL 错误码¶
视频输入 API 错误码如下表所示。
错误代码 | 宏定义 | 描述 |
---|---|---|
0XA0222000 | MI_ERR_SCL_INVALID_DEVID | 设备号无效 |
0XA0222001 | MI_ERR_SCL_INVALID_CHNID | 通道号无效 |
0XA0222002 | MI_ERR_SCL_INVALID_PORTID | 端口号无效 |
0XA0222003 | MI_ERR_SCL_ILLEGAL_PARAM | 参数设置无效 |
0XA0222004 | MI_ERR_SCL_EXIST | 设备已经存在 |
0XA0222005 | MI_ERR_SCL_UNEXIST | 设备已经不存在 |
0XA0222006 | MI_ERR_SCL_NULL_PTR | 输入参数空指针错误 |
0XA0222007 | MI_ERR_SCL_NOT_SUPPORT | 操作不支持 |
0XA0222008 | MI_ERR_SCL_NOT_PERM | 操作不允许 |
0XA0222009 | MI_ERR_SCL_NOMEM | 分配内存失败 |
0XA022200a | MI_ERR_SCL_NOBUF | 缓存为满 |
0XA022200b | MI_ERR_SCL_BUF_EMPTY | 缓存为空 |
0XA022200c | MI_ERR_SCL_NOTREADY | 系统未初始化 |
0XA022200d | MI_ERR_SCL_BUSY | 系统忙 |
5. PROCFS介绍¶
5.1. cat¶
-
调试信息
# cat /proc/mi_modules/mi_scl/mi_scl0
-
调试信息分析
记录当前scaler的使用状况以及相关属性、可以动态地获取到这些信息,方便调试和测试。
-
参数说明
参数 描述 module info InitCnt 发生connected module次数 chip Chip index version Chip version UseSclMask 模块scaler使用情况 Device Info DevID 设备ID refcnt 重复创建dev次数 source 输入源 sclmask 设备使用Scaler id cmdq Cmdq 指针 IrqEn IRQ 使能状况 IrqMode IRQ 模式 Irqnum IRQ ID VsyncCnt ISR vsync Cnt FrameDoneCnt ISR Frame Done Cnt DropCnt IRQ Frame Drop or Double Vsync LowLatencyIsrCnt Low Lantency Mode Match Line IRQ Cnt Channel Info DevId Device id ChnId Channel ID start Channel 是否start Crop Channel Crop位置 Rot Rotation 角度 Size Input width/height pixel Input Pixel format Stride Input buffer stride Atom 底层拿住buffer 数量 Atom0Cnt 释放 buffer 后底层拿不到 buffer 的次数 PreCnt/EnqCnt/BarCnt/checkin/
checkout/DeqCnt/DropCntCallback 接口执行次数 EnqOTNull Enq时OutBuffer 为Null次数统计 Outputport Info DevId Device id ChnId Channel ID PortId Port ID sclid scaler ID bindtype 0: Real Time mode
1: Ring mode
2: frame modeEnable 使能状态 Pixel Output pixel format bMirr/flip Port 水平/竖直 翻转 PortCrop Port 裁剪范围 OutputW /OutputH 输出宽/输出高 Histogram Scl 画面复杂度 MatchLine Low Lantency Mode Match Line Cnt Stride Output buffer stride,一行像素字节 GetCnt 尝试获取outputbuffer的数量 FailCnt 获取outputbuffer失败数量 FinishCnt 处理完output buffer 数量 fps Output port frame rate
5.2. echo¶
Echo help 查看可用命令:
# echo help > /proc/mi_modules/mi_scl/mi_scl0
功能 | 打印所有channel 锁的使用function 和line和 time |
---|---|
命令 | echo debugmutex > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | 无 |
举例 | 无 |
功能 | 设置每一个scl port 的crop 参数,直接设置给driver,不经过MI 流程 |
---|---|
命令 | echo setprecrop [chnid portid X Y Width Height] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id X,Y,width,height: crop范围 |
举例 | echo setprecrop 0 0 0 0 800 200 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 等待底层buffer 处理完之后,关掉channel,不再trigger底层。 |
---|---|
命令 | echo stopchnl [chnid, ON/OFF] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id ON/OFF: ON 打开stopchannel 功能,也就是stop掉, OFF 关闭stopchannel功能,打开channel |
举例 | echo stopchnl 0 ON > /proc/mi_modules/mi_scl/mi_scl0 echo stopchnl 0 OFF > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | Dump选定的channel的output数据,并保存在/path路径下 |
---|---|
命令 | echo dumptaskfile [chnid, Cnt, /path/, bOnlyDumpResChange, bdumpport] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Cnt: dump 数量 Path: 存放dump出来文件的路径 bOnlyDumpResChange: 切换分辨率时可能产生花图,dump命令和切分辨率操作不好配合,可以先设置该参数, 然后切换分辨率, 当程序识别后会dump分辨率变化后的buffer。 (非必选参数) Bdumpport: 只dump 某一个portid, 默认是dump 所有在输出的port。 (非必选参数) |
举例 | echo dumptaskfile 0 2 /tmp > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置pass的atomvalue |
---|---|
命令 | echo setatom [AtomValue] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | AtomValue: Driver 最大持有buffer 数量 |
举例 | echo setatom 3 > /proc/mi_modules/mi_scl/mi_scl0 注意:有时候底层卡住,可以尝试增大该atom,加塞一张buffer 给driver,重新trigger一次,看是否可以恢复,或者掉帧的时候,加大是否可以满帧。 |
功能 | 设置对应channel和port的输出画面是否做水平/上下翻转 |
---|---|
命令 | echo setmirrorflip [chnid, portid, bmirror, bflip] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id bmirror: 水平翻转 bflip: 上下翻转 |
举例 | echo setmirrorflip 0 0 1 0 > /proc/mi_modules/mi_scl/mi_scl0 水平翻转 |
功能 | 清除指定channel port的input/output/done buffer |
---|---|
命令 | echo clearbuf [chnid, portid bClearInput, bclearoutput, bcleardonebuff] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id bClearInput: 清除input的buffer bclearoutput: 清除output的buffer bcleardonebuff: 清除done的buffer |
举例 | echo clearbuf 0 0 1 0 0 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置debug level |
---|---|
命令 | echo debuglv [level] > /proc/mi_modules/mi_scl/mi_scl0 echo debuglv [chnid][level] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Level: (1) 单个level参数时: 2:flow, 4:check irq done (2) 两个参数时: 1: check buffer, 2: check loop, 4: check frame pts, 8: check fence done, 16: check func time, 32: check sidebandmsg |
举例 | echo debuglv 4 > /proc/mi_modules/mi_scl/mi_scl0 //打开check irq done 相关的MI打印 echo debuglv 0 3 > /proc/mi_modules/mi_scl/mi_scl0 //打开channel0 level3的打印,打印buffer info和loop info |
功能 | 设置port是否enable |
---|---|
命令 | echo enableport [chnid, portid, bEn] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id bEn: 1/0 |
举例 | echo enableport 0 0 1 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 保护outputport buffer |
---|---|
命令 | echo protectport [chnid portid ben clientid] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id ben: 使能 Clientid: scl(0,1,2): 0x19, 0x1c, 0x1d |
举例 | echo protectport 0 0 1 0x19 > /proc/mi_modules/mi_scl/mi_scl0 //保护channel0 port0 的scl0 |
功能 | 将Bind Q中缓存的buffer 消耗掉 |
---|---|
命令 | echo clearbindq [chnid bclear] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id bclear: 是否clear |
举例 | echo clearbindq 0 1 > /proc/mi_modules/mi_scl/mi_scl0 //clear channel0 bindQ 将Bind Q中缓存的buffer 消耗掉。 有时候前端拿不到buffer,发现是scl BindQ塞满, 判断scl是否拿的不够快, 将bindQ 清空,看BindQ中是否还会累加上来, 如果还累加说明scl 拿不够快, 如果不再增加,说明是之前一次异常塞在里面一直没有消耗掉。 |
功能 | 设置打印帧率,低于该值打印出来 |
---|---|
命令 | echo fpsth [chnid portid fpsint fpsfloat] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id fpsint: 帧率整数位 fpsfloat: 帧率小数位 |
举例 | echo fpsth 0 0 30 30 > /proc/mi_modules/mi_scl/mi_scl0 //channel0 port0中小于30.30的fps打印出来 |
功能 | 设置输入源的irq 模式 |
---|---|
命令 | echo irqmode [source irqmode] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Source: 0: isp realtime, 1: rdma0, 2: yuv realtime, 3: rdma1, 4: rdma rot Irqmode: 0x1: realtime, 0x2: framemode, 0x10: onlydoneint, 0x20: multiint |
举例 | echo irqmode 0 1 > /proc/mi_modules/mi_scl/mi_scl0 |