MI SCL API
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
3.0 | 12/04/2020 | |
3.1 | 07/25/2021 | |
08/25/2021 | ||
3.2 | 02/17/2022 | |
3.3 | 03/21/2022 | |
3.4 | 03/22/2022 | |
3.5 | 08/03/2022 | |
3.6 | 09/09/2022 | |
3.7 | 10/28/2022 | |
3.8 | 12/01/2022 | |
3.9 | 02/13/2023 | |
3.10 | 12/01/2023 | |
3.11 | 03/04/2024 | |
3.12 | 04/10/2024 | |
3.13 | 04/18/2025 |
1. 概述¶
1.1. 模块说明¶
SCL将原始画面缩放到各个output port 指定分辨率。每个scl按照输入数据源的类型划分成不同的Device,每一个output port 端口有crop/scaling/mirror/flip/pixel 转换功能。
关键字说明
-
Device
Device 由固定的input 类型,和用户分配的HWSclId 组成。
-
Channel
一个Device可以分时复用为多个通道, 每个通道为一个channel。
-
Input Port
Channel上的输入端口,每个Device支持的输入类型请参考1.5章节流程框图。
-
Output Port
Device上的输出端口,输出端口和Device 的HWSclId 一一对应。
-
Crop
裁剪,对图像进行裁剪。
-
Scaling
缩放,对图像进行缩小或放大处理。
-
Compress
压缩模式,对数据进行压缩传输,节省带宽。
-
Rotate
旋转,对输入的图像旋转某个角度输出。
1.2. 基本结构¶
-
MI_SCL将不同输入源来的原始图像数据,通过目标output port的crop,scaling,mirror,flip单元转为目标图像格式分辨率。MI_SCL模块可以支持多个这样的output port,具体每个output port的能力以及支持的output port数量取决于不同的芯片平台,可参考1.5章节芯片差异。
-
MI_SCL根据不同的数据来源划分不同的device 。 大部分device都支持选择所有output port端口,少数的device仅支持选择特定的output port端口。device创建时可以选择多个output port端口,但不能选择被其他device占用的output port端口。不同device的output port端口支持能力取决于不同芯片平台,具体可参看1.5章节芯片差异。
-
对于数据来源是dram的device,MI_SCL可以额外配置input port端口的crop。rotation暂不支持该crop。
-
rotation所在device会占用选择的output port的scaling单元的硬件资源,故output port做rotation和做crop,scaling,mirror/flip,pixel转化功能是互斥的。即做rotation功能的output port就只能单纯的rotation,不能再做缩放,裁剪等其他功能。
-
SCL后级可以为venc/disp/jpeg 模块,也可以不接后级直接frame输出。不同芯片平台所支持的后级模块也不同。具体可以参考1.5.1章节芯片规格。
图1‑1 SCL硬件工作框图
1.3. 功能介绍¶
MI_SCL支持以下功能:
-
支持图像分辨率缩放和图像效果调节
-
支持图像特定区域裁剪
-
支持图像pixfmt转换
-
支持数据流一路复用成多路
-
支持图像镜像,翻转
-
部分平台支持旋转,详见1.5.1章节芯片规格
-
部分平台支持输入解压缩和输出压缩,详见1.5.1芯片规格
1.4. 应用场景¶
MI_SCL可应用于以下场景:
-
Pure linux场景
可以基于MI_SCL提供的API接口进行开发。
-
Pure rtos场景
在rtos环境下,应用程序可以基于MI_SCL提供的API接口进行开发。
-
Dualos场景
在dualos环境下,在linux端运行的应用程序和在rtos端运行的应用程序可以基于MI_SCL API开发。
1.5. 芯片差异¶
当前芯片为Pcupid
1.5.1. 芯片规格¶
‘\’ 与 ‘N’ 均为不支持该功能。
-
模块功能规格
Function Tiramisu Mochi Muffin Maruko Opera Souffle Iford Pcupid Dev Number 4 2 7 3 5 4 2 2 Chn Number 32 32 32 16 16 32 32 32 Port Number 6 7 9 4 4 7 3 1 InputCrop Y Y Y Y Y Y Y Y Rotation Y N Y N Y N N Y mirror Y Y Y Y Y Y Y Y flip Y Y Y Y Y Y Y Y OutPutCrop Y Y Y Y Y Y Y Y Scaling Y Y Y Y Y Y Y Y Compress N Y N Y Y Y N N Max Pixel Rate 4K30 4K60 4K60 4K30 6M30 4K60 4K24 4K20 -
输入规格
Input Tiramisu Mochi Muffin Maruko Opera Souffle Iford Pcupid pixel ARGB8888 Y Y Y Y Y Y Y Y ABGR8888 Y Y Y Y Y Y Y Y BGRA8888 Y Y Y Y Y Y Y Y yuv420SP NV12 Y Y Y Y Y Y Y Y yuv420SP NV21 Y Y Y Y Y Y Y Y yuv420 Planer Y Y Y Y Y Y Y Y yuv422 YUYV Y Y Y Y Y Y Y Y yuv422 YVYU Y Y Y Y Y Y Y Y YUV422 VYUY Y Y Y Y Y Y Y Y yuv422 UYVY Y Y Y Y Y Y Y Y yuv422 SP Y Y Y Y Y Y Y Y yuv422 Planer Y Y Y Y Y Y Y Y Gray8 N N N N N Y Y Y Crop Y Y Y Y Y Y Y Y CompressMode NONE Y Y Y Y Y Y Y N 10TO6 N Y N Y Y Y N N resolution(yuv420 limit) MI_SCL_DEV_RDMA0 Max width 4096 4096 7680 3840 2688 8192 3840 1280 MI_SCL_DEV_DIPR0 Max width 4096 \ 7680 \ 2688 8192 \ \ MI_SCL_DEV_RDMA2 Max width \ \ 8192 \ \ \ \ \ MI_SCL_DEV_DIPR1 Max width \ \ \ \ 2688 \ \ \ MIN WxH 16x16 16x16 16x16 16x16 16x16 16x16 16x16 16x16 Pixel Alignment (rot source不区分pixel) YUV Pack 8x2 2x2 2x2 2x2 2x2 2x2 2x2 2x2 YUV SP 16x2 2x2 2x2 2x2 2x2 2x2 2x2 2x2 YUV Planer 32x2 2x2 2x2 2x2 2x2 2x2 2x2 2x2 ARGB 4x2 2x2 2x2 2x2 2x2 2x2 2x2 2x2 Gray8 NA NA NA NA NA 2x2 2x2 2x2 Rot source 2x2 NA 2x2 NA 2x2 NA NA 2x2 -
输出规格
Output Tiramisu Mochi Muffin Maruko Opera Souffle Iford Pcupid pixel ARGB8888 Y Y Y Y Y Y Y Y ABGR8888 Y Y Y Y Y Y Y Y BGRA8888 Y Y Y Y Y Y Y Y RGB565 N N N N N N N Y yuv420SP NV12 Y Y Y Y Y Y Y Y yuv420SP NV21 Y Y Y Y Y Y Y Y yuv420 Planer Y Y Y Y Y Y Y Y yuv422 YUYV Y Y Y Y Y Y Y Y yuv422 YVYU Y Y Y Y Y Y Y Y YUV422 VYUY Y Y Y Y Y Y Y Y yuv422 UYVY Y Y Y Y Y Y Y Y yuv422 SP Y Y Y Y Y Y Y Y yuv422 Planer Y Y Y Y Y Y Y Y Gray8 N N N N N Y Y Y CompressMode NONE Y Y Y Y Y Y Y N 10TO6 N Y N Y Y Y N N IFC N N N Y Y Y N N Crop Y Y Y Y Y Y Y Y Scaling Y Y Y Y Y Y Y Y Mirror Y Y Y Y Y Y Y Y Flip Y Y Y Y Y Y Y Y Rotation Y N Y N Y N N Y Frame mode Y Y Y Y Y Y Y Y Realtime_JPEG Y Y N Y Y Y Y N Ring_H26x Y Y Y N N N N N HalfRing_H26x Y Y Y N N N N N MultiRing_H26x N N N Y(只有E_MI_SCL_HWSCL0支持) Y(只有E_MI_SCL_HWSCL0支持) Y(只有E_MI_SCL_HWSCL0支持) Y(只有E_MI_SCL_HWSCL0支持) N TileMode SclId(Disp rot使用) E_MI_SCL_HWSCL5 \ \ \ E_MI_SCL_HWSCL3 \ \ \ YUV420 MAX Width E_MI_SCL_HWSCL0 4608 4096 7680 3840 2688 8192 3840 1280 E_MI_SCL_HWSCL1 4608 4096 7680 3840 2688 8192 3840 \ E_MI_SCL_HWSCL2 4096 3840 3840 1920 1920 1920 1920 \ E_MI_SCL_HWSCL3 4096 1920 1920 1920 2688 3840 \ \ E_MI_SCL_HWSCL4 4096 1280 7680 \ \ 3840 \ \ E_MI_SCL_HWSCL5 4096 1280 7680 \ \ 3840 \ \ E_MI_SCL_HWSCL6 \ 4096 3840 \ \ 8192 \ \ E_MI_SCL_HWSCL7 \ \ 1920 \ \ \ \ \ E_MI_SCL_HWSCL8 \ \ 8192 \ \ \ \ \ E_MI_SCL_HWSCL9 \ \ \ \ \ \ \ \ Pixel Alignment (不区分pixel) Width 2 2 2 2 2 2 2 2 Height 2 2 2 2 2 2 2 2
1.5.2. Tiramisu¶
图1‑2:Tiramisu框图
Tiramisu MI_SCL 总共有6个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据 支持MI_JPD realtime 绑定 |
MI_SCL_DEV_VIF_REALTIME0 | 只支持和MI_VIF YUV Realtime 连接 |
MI_SCL_DEV_DIPR0 | 只支持Frame mode从Dram读取数据 只可以使用E_MI_SCL_HWSCL5 支持Rotation, 做rotation的时候功能限制见MI_SCL_SetChnParam |
1.5.3. Muffin¶
图1‑3:Muffin框图
Muffin MI_SCL 总共有9个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP device0 output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据,支持MI_JPD realtime 绑定 |
MI_SCL_DEV_VIF_REALTIME0 | 只支持和MI_VIF device8 YUV Realtime 连接 |
MI_SCL_DEV_DIPR0 | 只支持Frame mode从Dram读取数据,只可以使用E_MI_SCL_HWSCL8, 支持Rotation, 做rotation的时候功能限制见MI_SCL_SetChnParam |
MI_SCL_DEV_ISP_REALTIME1 | 只支持和MI_ISP device1 output port0 realtime 连接 |
MI_SCL_DEV_RDMA2 | 支持Frame mode从Dram读取数据,支持MI_JPD realtime 绑定 |
MI_SCL_DEV_VIF_REALTIME1 | 只支持和MI_VIF device24 YUV Realtime 连接 |
1.5.4. Mochi¶
图1‑4:Mochi框图
Mochi MI_SCL 总共有7个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据,支持MI_JPD realtime 绑定 |
1.5.5. Maruko¶
图1‑5:Maruko框图
Maruko MI_SCL 总共有4个scl 硬件,按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据 |
MI_SCL_DEV_VIF_REALTIME0 | 只支持和MI_VIF output port0 yuv 格式realtime 连接 |
1.5.6. Opera¶
图1‑6:Opera框图
Opera MI_SCL 总共有4个scl 硬件,按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据,支持MI_JPD realtime 绑定 |
MI_SCL_DEV_VIF_REALTIME0 | 只支持和MI_VIF output port0 yuv 格式realtime 连接 |
MI_SCL_DEV_DIPR0 | 只支持Frame mode从Dram读取数据,只可以使用E_MI_SCL_HWSCL3 |
MI_SCL_DEV_DIPR1 | 只支持Frame mode从Dram读取数据,只可以使用E_MI_SCL_HWSCL1, 支持Rotation, 做rotation的时候功能限制见MI_SCL_SetChnParam |
MI_SCL_DEV_HVP_REALTIME0 | 只支持和MI_HVP realtime 连接,只可以使用E_MI_SCL_HWSCL3, 不支持放大 |
1.5.7. Souffle¶
图1‑7:Souffle框图
Souffle MI_SCL 总共有7个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP device0 output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据,支持MI_JPD realtime 绑定 |
MI_SCL_DEV_VIF_REALTIME0 | 只支持和MI_VIF output port0 yuv 格式realtime 连接 |
MI_SCL_DEV_DIPR0 | 只支持Frame mode从Dram读取数据,只可以使用E_MI_SCL_HWSCL6 |
1.5.8. Iford¶
图1‑8:Iford 框图
Iford MI_SCL 总共有3个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP device0 output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据 |
1.5.9. Pcupid¶
图1‑9:Pcupid 框图
Pcupid MI_SCL 总共有1个scl 硬件, 按照输入源的类型,划分成不同的Device。
Device Id | Input port输入源类型 |
---|---|
MI_SCL_DEV_ISP_REALTIME0 | 只支持和MI_ISP device0 output port0 realtime 连接 |
MI_SCL_DEV_RDMA0 | 支持Frame mode从Dram读取数据并且支持Rotation,做rotation的时候功能限制见MI_SCL_SetChnParam |
1.6. 工作原理¶
NA
1.7. 开发流程¶
1.7.1 编译配置¶

图1‑10 MI_SCL编译配置流程
-
进入alkaid project根目录,make menuconfig
-
回车键进入Sdk Config子选项
-
回车键进入Interface Compile Config子选项
-
空格键选中scl子模块,保存并重新编译project
编译完成将在sdk/interface/src/scl下生成 mi_scl.ko,同时将mi_scl.h和mi_scl_datatype.h release到 project/release 目录,在pure linux环境下会默认打包进入images。
1.7.2 配置MI_SCL模块加载参数¶
modparam.json 文件在/config 目录下,该文件在 SCL 初始化阶段会加载进去。modparam.json常用字段及解析参考章节6。
1.7.3. API接口调用¶
图1‑11 MI_SCL接口调用流程
MI_SCL通用串流接口调用分为以下几步:
-
MI_SYS 初始化
-
创建 MI_SCL Device
-
创建 MI_SCL Channel
-
设置 MI_SCL Channel 参数
-
启动 MI_SCL Channel
-
设置 MI_SCL Output port 参数
-
使能 MI_SCL Output port 端口
-
设置 MI_SCL Output port depth
-
如果MI_SCL有前后级模块,调用MI_SYS接口将MI_SCL与前后级模块进行绑定
-
前级或SYS推流到SCL,SYS从SCL取流或SCL 推流到后级。
-
禁用已使能的 MI_SCL Output port 端口
-
停止 MI_SCL Channel
-
销毁 MI_SCL Channel
-
销毁 MI_SCL Device
-
MI_SYS 去初始化
1.8. 实例介绍¶
本实例介绍MI_SCL模块的初始化流程和去初始化流程。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <unistd.h> #include "mi_common.h" #include "mi_common_datatype.h" #include "mi_sys.h" #include "mi_sys_datatype.h" #include "mi_scl.h" #include "mi_scl_datatype.h" #define ExecFuncIfSuccess(_func_,_ret_) \ if((_func_)!=_ret_) \ { \ printf("[ %d ] exec function is failed\n",__LINE__); \ exit(-1); \ } \ else \ { \ printf("[ %d ] exec function is success\n",__LINE__);\ } MI_BOOL bExit = FALSE; MI_SCL_DEV g_SclDevId = 1; MI_SCL_CHANNEL g_SclChnId = 0; MI_SCL_PORT g_SclPortId = 0; MI_S32 scl_Init(void) { MI_SCL_DevAttr_t createDevAttr; MI_SCL_ChannelAttr_t sclChnAttr; MI_SCL_ChnParam_t sclChnParam; MI_SCL_OutPortParam_t sclOutPortParam; MI_SYS_ChnPort_t stChnPort; MI_SYS_WindowRect_t stSCLOutCropRect; MI_SYS_WindowSize_t stSCLOutputSize; memset(&createDevAttr, 0x0, sizeof(MI_SCL_DevAttr_t)); memset(&sclChnAttr, 0x0, sizeof(MI_SCL_ChannelAttr_t)); memset(&sclChnParam, 0x0, sizeof(MI_SCL_ChnParam_t)); memset(&sclOutPortParam, 0x0, sizeof(MI_SCL_OutPortParam_t)); memset(&stChnPort, 0x0, sizeof(MI_SYS_ChnPort_t)); memset(&stSCLOutCropRect, 0x0, sizeof(MI_SYS_WindowRect_t)); memset(&stSCLOutputSize, 0x0, sizeof(MI_SYS_WindowSize_t)); createDevAttr.u32NeedUseHWOutPortMask = E_MI_SCL_HWSCL0; ExecFuncIfSuccess(MI_SCL_CreateDevice(g_SclDevId, &createDevAttr), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_CreateChannel(g_SclDevId, g_SclChnId, &sclChnAttr), MI_SUCCESS); sclChnParam.eRot = E_MI_SYS_ROTATE_NONE; ExecFuncIfSuccess(MI_SCL_SetChnParam(g_SclDevId, g_SclChnId, &sclChnParam), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_StartChannel(g_SclDevId, g_SclChnId), MI_SUCCESS); sclOutPortParam.stSCLOutCropRect = stSCLOutCropRect; sclOutPortParam.stSCLOutputSize = stSCLOutputSize; sclOutPortParam.bMirror = FALSE; sclOutPortParam.bFlip = FALSE; sclOutPortParam.eCompressMode = E_MI_SYS_COMPRESS_MODE_NONE; sclOutPortParam.stSCLOutputSize.u16Width = 1280; sclOutPortParam.stSCLOutputSize.u16Height = 720; sclOutPortParam.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420; ExecFuncIfSuccess(MI_SCL_SetOutputPortParam(g_SclDevId, g_SclChnId, g_SclPortId, &sclOutPortParam), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_EnableOutputPort(g_SclDevId, g_SclChnId, g_SclPortId), MI_SUCCESS); stChnPort.eModId = E_MI_MODULE_ID_SCL; stChnPort.u32DevId = g_SclDevId; stChnPort.u32ChnId = g_SclChnId; stChnPort.u32PortId = g_SclPortId; ExecFuncIfSuccess(MI_SYS_SetChnOutputPortDepth(0, &stChnPort, 0, 4), MI_SUCCESS); return MI_SUCCESS; } MI_S32 scl_unInit(void) { ExecFuncIfSuccess(MI_SCL_DisableOutputPort(g_SclDevId, g_SclChnId, g_SclPortId), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_StopChannel(g_SclDevId, g_SclChnId), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_DestroyChannel(g_SclDevId, g_SclChnId), MI_SUCCESS); ExecFuncIfSuccess(MI_SCL_DestroyDevice(g_SclDevId), MI_SUCCESS); return MI_SUCCESS; } void signalHandler(int signo) { printf("ctrl +c is input \n"); bExit = TRUE; return; } int main(int argc, char** argv) { ExecFuncIfSuccess(MI_SYS_Init(0), MI_SUCCESS); ExecFuncIfSuccess(scl_Init(), MI_SUCCESS); //User defined streaming or extraction code snippets signal(SIGINT, signalHandler); while (!bExit) { sleep(1); } ExecFuncIfSuccess(scl_unInit(), MI_SUCCESS); ExecFuncIfSuccess(MI_SYS_Exit(0), MI_SUCCESS); }
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 | 缩放、拉伸、裁剪指定内存中的图像数据 |
MI_SCL_StretchBufOsd | 在缩放、拉伸、裁剪指定内存中的图像数据基础上叠加OSD图像数据 |
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.5章节中 注意说明。
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将通道停下,清除缓存数据。
- 当通道设置了rotate属性,那么该通道不支持crop、scaling、mirror、flip、pixel-change 功能。
-
举例
参考 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 读取数据时,该设置才能生效。
-
当输入数据压缩模式不为E_MI_SYS_COMPRESS_MODE_NONE 时,输入数据不支持裁剪。
-
-
举例
参考 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
-
库文件:
-
-
注意
-
该接口是阻塞形式,这帧数据做完才会结束。
-
使用该接口前需要设置对应的DEVID,不同系列芯片对应使用的DEVID如下:
芯片 StretchBuf使用的DEVID Tiramisu MI_SCL_DEV_DIPR0 Muffin MI_SCL_DEV_DIPR0 Mochi MI_SCL_DEV_RDMA0 Maruko MI_SCL_DEV_RDMA0 Souffle MI_SCL_DEV_RDMA0 Iford MI_SCL_DEV_RDMA0 Pcupid MI_SCL_DEV_RDMA0 -
输入宽、高、stride 的对齐要求:
pixel format width height stride YUV420SPNV12, YUV420SPNV21,YUV422SP, Gray8 2 2 16 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 2 2 16 ARGB8888, ABGR8888, BGRA8888 2 2 16 -
输出宽、高、stride 的对齐要求:
pixel format width height stride YUV420SPNV12, YUV420SPNV21,YUV422SP, Gray8 2 2 16 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 2 2 16 ARGB8888, ABGR8888, BGRA8888 2 2 16 -
不同系列芯片对应使用的HWSCL ID
芯片 StretchBuf使用的HWSCL ID Tiramisu E_MI_SCL_HWSCL5 Muffin E_MI_SCL_HWSCL8 Mochi E_MI_SCL_HWSCL6 Maruko E_MI_SCL_HWSCL3 Souffle E_MI_SCL_HWSCL6 Iford E_MI_SCL_HWSCL2 Pcupid E_MI_SCL_HWSCL0
-
-
举例
MI_SCL_StretchBuf使用方法:
#define ALIGN_UP(x, align) (((x) + ((align) - 1)) & ~((align) - 1)) int stretchBuffDemo() { MI_S32 s32Ret = 0; char *pInFilePath = "in.yuv"; char *pOutFilePath = "out.yuv"; MI_SCL_DirectBuf_t stSrcBuff; memset(&stSrcBuff, 0x0, sizeof(MI_SCL_DirectBuf_t)); stSrcBuff.u32Width = 1920; stSrcBuff.u32Height = 1080; stSrcBuff.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; stSrcBuff.u32Stride[0] = ALIGN_UP((stSrcBuff.u32Width*2),16); stSrcBuff.u32BuffSize = stSrcBuff.u32Stride[0]*stSrcBuff.u32Height; MI_SYS_WindowRect_t stoutputCrop; memset(&stoutputCrop, 0x0, sizeof(MI_SYS_WindowRect_t)); stoutputCrop.u16X = 100; stoutputCrop.u16Y = 122; stoutputCrop.u16Width = 124; stoutputCrop.u16Height = 126; MI_SCL_DirectBuf_t stDestBuff; memset(&stDestBuff, 0x0, sizeof(MI_SCL_DirectBuf_t)); stDestBuff.u32Width = 100; stDestBuff.u32Height = 110; stDestBuff.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; stDestBuff.u32Stride[0] = ALIGN_UP((stDestBuff.u32Width*2),16); stDestBuff.u32BuffSize = stDestBuff.u32Stride[0]*stDestBuff.u32Height; void *pviraddr = NULL, *pviroutaddr = NULL; MI_PHY phyInAllockAddr = 0, phyOutAllocAddr = 0; ExecFuncResult(MI_SYS_Init(0), s32Ret); ExecFuncResult(MI_SYS_MMA_Alloc(0, (MI_U8*)"mma_heap_name0", stSrcBuff.u32BuffSize, &phyInAllockAddr), s32Ret); ExecFuncResult(MI_SYS_Mmap(phyInAllockAddr, stSrcBuff.u32BuffSize, &pviraddr, FALSE), s32Ret); ExecFuncResult(MI_SYS_MMA_Alloc(0, (MI_U8*)"mma_heap_name0", stDestBuff.u32BuffSize, &phyOutAllocAddr), s32Ret); ExecFuncResult(MI_SYS_Mmap(phyOutAllocAddr, stDestBuff.u32BuffSize, &pviroutaddr, FALSE), s32Ret); stSrcBuff.phyAddr[0] = phyInAllockAddr; stDestBuff.phyAddr[0] = phyOutAllocAddr; FILE *src_fd = NULL; src_fd = fopen(pInFilePath,"rb"); fread(pviraddr, stSrcBuff.u32BuffSize, 1, src_fd); fclose(src_fd); MI_SCL_DEV DevId = 1; MI_SCL_DevAttr_t stDevAttr; stDevAttr.u32NeedUseHWOutPortMask = E_MI_SCL_HWSCL3; ExecFuncResult(MI_SCL_CreateDevice(DevId, &stDevAttr), s32Ret); ExecFuncResult(MI_SCL_StretchBuf(&stSrcBuff, &stoutputCrop, &stDestBuff, E_MI_SCL_FILTER_TYPE_AUTO), s32Ret); FILE *dst_fd = NULL; dst_fd = fopen(pOutFilePath,"wb+"); fwrite(pviroutaddr, stDestBuff.u32BuffSize, 1, dst_fd); fclose(dst_fd); ExecFuncResult(MI_SCL_DestroyDevice(DevId), s32Ret); MI_SYS_Munmap(pviraddr, stSrcBuff.u32BuffSize); MI_SYS_Munmap(pviroutaddr, stDestBuff.u32BuffSize); MI_SYS_MMA_Free(0,phyInAllockAddr); MI_SYS_MMA_Free(0,phyOutAllocAddr); EXIT: return MI_SUCCESS; }
-
相关主题
2.16. MI_SCL_StretchBufOsd¶
-
描述
在缩放、拉伸、裁剪指定内存中的图像数据基础上叠加OSD图像数据。
-
语法
MI_S32 MI_SCL_StretchBufOsd(MI_SCL_DirectBuf_t *pstSrcBuf, MI_SYS_WindowRect_t*pstSrcCrop,MI_SCL_DirectBuf_t *pstDstBuf, MI_SCL_DirectOsdBuf_t*pstDstOsdBuf,MI_SCL_FilterType_e eFilterType);
-
参数
参数名称 描述 输入/输出 pstSrcBuf 源数据buffer参数指针 输入 pstSrcCrop 源数据裁剪区域 输入 pstDstBuf 输出buffer参数指针 输出 pstDstOsdBuf 叠加在pstDstBuf的Osdbuffer参数指针 输入 eFilterType Scl 使用滤波器类型 输入 -
返回值
-
MI_SUCCESS(0):成功。
-
非0:失败,详情参照错误码。
-
-
依赖
-
头文件:mi_scl_datatype.h、mi_scl.h
-
库文件:
-
-
注意
-
使用该接口需要SCL支持OSD,支持情况请参考MI RGN API文档
-
使用该接口前需要创建对应的DEV。
-
该接口是阻塞形式,这帧数据做完才会结束。
-
不同系列芯片对应使用的DEVID如下:
芯片 StretchBuf使用的DEVID Tiramisu MI_SCL_DEV_DIPR0 Muffin MI_SCL_DEV_DIPR0 Mochi MI_SCL_DEV_RDMA0 Maruko MI_SCL_DEV_RDMA0 Souffle MI_SCL_DEV_RDMA0 Iford MI_SCL_DEV_RDMA0 Pcupid MI_SCL_DEV_RDMA0 -
输入宽、高、stride 的对齐要求:
pixel format width height stride YUV420SPNV12, YUV420SPNV21,YUV422SP, Gray8 2 2 16 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 2 2 16 ARGB8888, ABGR8888, BGRA8888 2 2 16 -
输出宽、高、stride 的对齐要求:
pixel format width height stride YUV420SPNV12, YUV420SPNV21,YUV422SP, Gray8 2 2 16 YUV422YUYV, YUV422UYVY, YUV422YVYU, YUV422VYUY 2 2 16 ARGB8888, ABGR8888, BGRA8888 2 2 16 -
不同系列芯片对应使用的HWSCL ID
芯片 StretchBuf使用的HWSCL ID Tiramisu E_MI_SCL_HWSCL5 Muffin E_MI_SCL_HWSCL8 Mochi E_MI_SCL_HWSCL6 Maruko E_MI_SCL_HWSCL3 Souffle E_MI_SCL_HWSCL6 Iford E_MI_SCL_HWSCL2 Pcupid E_MI_SCL_HWSCL0
-
-
相关主题
3. 数据类型¶
视频输入相关数据类型定义如下:
数据类型 | 描述 |
---|---|
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 参数类型 |
MI_SCL_DirectOsdArgb1555Alpha_t | Argb1555格式的前景、背景Alpha设定 |
MI_SCL_DirectOsdAlphaModePara_u | 定义Osd Alpha Mode参数联合体 |
MI_SCL_DirectOsdAlphaMode_e | 设定Osd Alpha显示模式 |
MI_SCL_DirectOsdAlphaAttr_t | 定义Osd Alpha属性的结构体 |
MI_SCL_DirectOsdInfo_t | SCL 直接操作Osdbuffer 参数信息 |
MI_SCL_DirectOsdBuf_t | SCL 直接操作Osdbuffer 参数类型 |
MI_SCL_DEV_ISP_REALTIME0 | SCL Device 0 |
MI_SCL_DEV_RDMA0 | SCL Device 1 |
MI_SCL_DEV_VIF_REALTIME0 | SCL Device 2 |
MI_SCL_DEV_DIPR0 | SCL Device 3 |
MI_SCL_DEV_ISP_REALTIME1 | SCL Device 4 |
MI_SCL_DEV_RDMA2 | SCL Device 5 |
MI_SCL_DEV_VIF_REALTIME1 | SCL Device 6 |
MI_SCL_DEV_DIPR1 | SCL Device 7 |
MI_SCL_DEV_HVP_REALTIME0 | SCL Device 8 |
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_HWSCL6 = 0x0040, E_MI_SCL_HWSCL7 = 0x0080, E_MI_SCL_HWSCL8 = 0x0100, E_MI_SCL_HWSCL_MAX = 0xffff, }MI_SCL_HWSclId_e;
-
注意事项
- 每个HW scl id 特点请参考1.5章节输出规格中的HW sclid,按照场景需求选择。
-
相关数据类型及接口
3.5. MI_SCL_DevAttr_t¶
-
说明
SCL 设备属性。
-
定义
typedef struct MI_SCL_DevAttr_s { MI_U32 u32NeedUseHWOutPortMask; }MI_SCL_DevAttr_t;
-
成员
成员名称 描述 u32NeedUseHWOutPortMask Device需要使用的Scaler id。 -
注意事项
-
u32NeedUseHWOutPortMask 由 MI_SCL_HWSclId_e成员bit mask组成。
-
从低位到高位依次和HWSCLID 映射。
-
每个Device上Portid与HWSCL ID之间对应关系为:
stCreateDevAttr.u32NeedUseHWOutPortMask = E_MI_SCL_HWSCL2 | E_MI_SCL_HWSCL3 | E_MI_SCL_HWSCL4;
Port0 → E_MI_SCL_HWSCL2
Port1 → E_MI_SCL_HWSCL3
Port2 → E_MI_SCL_HWSCL4
Portid 与HWSCL bitmask 从低到高对应。
-
-
相同的HWSclId不可以跨Device使用。
例如:
MI_SCL_DEV_ISP_REALTIME0的pstSclDevAttr->u32NeedUseHWOutPortMask= E_MI_SCL_HWSCL2 | E_MI_SCL_HWSCL3;
MI_SCL_DEV_RDMA0的pstSclDevAttr->u32NeedUseHWOutPortMask= E_MI_SCL_HWSCL0 | E_MI_SCL_HWSCL2;
这样 E_MI_SCL_HWSCL2 就被MI_SCL_DEV_ISP_REALTIME0/MI_SCL_DEV_RDMA0同时使用,创建Device时会返回err 状态。
-
Tiramisu中,有MI_VDEC使用场景,MI_SCL_DEV_DIPR0 会被内部创建使用, 其它Device不能再使用 E_MI_SCL_HWSCL5;用户创建MI_SCL_DEV_DIPR0对应的channel 使用。
-
Muffin中,有MI_VDEC使用场景,MI_SCL_DEV_DIPR0 会被内部创建使用, 其它Device不能再使用 E_MI_SCL_HWSCL8;用户创建MI_SCL_DEV_DIPR0对应的channel 使用。
-
Mochi中,有MI_VDEC使用场景,MI_SCL_DEV_RDMA0 会被内部创建使用, 其它Device不能再使用 E_MI_SCL_HWSCL6;用户创建MI_SCL_DEV_RDMA0对应的channel 使用。
-
Souffle 中,有MI_DISP使用场景,MI_SCL_DEV_DIPR0 会被MI_DISP内部创建使用,MI_SCL不能使用 MI_SCL_DEV_DIPR0。
-
-
相关数据类型及接口
3.6. MI_SCL_ChannelAttr_t¶
-
说明
Scl 通道属性。
-
定义
typedef struct MI_SCL_ChannelAttr_s { MI_U32 u32Reserved; }MI_SCL_ChannelAttr_t;
-
成员
成员名称 描述 u32Reserved 预留参数。 -
注意事项
可直接设置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 参数 -
注意事项
-
当旋转 90、180、270 时,output端口仅支持rotation功能,不支持crop/scaling/pixel format转换/Mirror/Flip。
-
当旋转 90、180、270 时,不支持MI_RGN attach 叠加osd/cover。
-
芯片支持Rotation的情况:
芯片 支持旋转的设备号 Tiramisu MI_SCL_DEV_DIPR0 Muffin MI_SCL_DEV_DIPR0 Mochi 不支持旋转 Souffle 不支持旋转 Iford 不支持旋转 Pcupid 支持旋转 Mochi/Souffle/Iford 不支持rotation,只能设置E_MI_SYS_ROTATE_NONE。
-
-
相关数据类型及接口
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 输出压缩格式 -
注意事项
-
eCompressMode 支持范围:
芯片 支持的输出像素压缩模式 Tiramisu E_MI_SYS_COMPRESS_MODE_NONE Muffin E_MI_SYS_COMPRESS_MODE_NONE Mochi E_MI_SYS_COMPRESS_MODE_NONE
E_MI_SYS_COMPRESS_MODE_TO_6BITMaruko E_MI_SYS_COMPRESS_MODE_NONE
E_MI_SYS_COMPRESS_MODE_TO_6BIT
E_MI_SYS_COMPRESS_MODE_IFCSouffle E_MI_SYS_COMPRESS_MODE_NONE
E_MI_SYS_COMPRESS_MODE_TO_6BIT
E_MI_SYS_COMPRESS_MODE_IFCIford E_MI_SYS_COMPRESS_MODE_NONE Pcupid E_MI_SYS_COMPRESS_MODE_NONE -
eCompressMode限制
Output_Compress 10TO6 IFC Pixel yuv420SP NV12 Y Y yuv422 YUYV Y N Pixel Alignment (WxH) yuv420SP NV12 2x2 2x2 yuv422 YUYV 2x2 2x2 bMirror N N bFlip Y N -
E_MI_SYS_COMPRESS_MODE_IFC 同时只支持一个HW SclId 使用。
-
-
Mochi/Maruko/Souffle/Iford/pcupid 不支持ePixelFormat 为 YUV422_UYVY / YUV422_VYUY 时使能Mirror; pcupid 也不支持ePixelFormat 为 RGB565 时使能Mirror。
-
-
相关数据类型及接口
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 占用空间 -
相关数据类型及接口
3.11. MI_SCL_DirectOsdArgb1555Alpha_t¶
-
说明
Argb1555格式的前景、背景Alpha设定。
-
定义
typedef struct MI_SCL_DirectBufOsdArgb1555Alpha_s { MI_U8 u8BgAlpha; MI_U8 u8FgAlpha; } MI_SCL_DirectOsdArgb1555Alpha_t;
-
成员
成员名称 描述 u8BgAlpha 背景Alpha,Alpha bit为0时对应的Alpha值,取值范围0~0xFF。 u8FgAlpha 前景Alpha,Alpha bit为1时对应的Alpha值,取值范围0~0xFF。 -
相关数据类型及接口
3.12. MI_SCL_DirectOsdAlphaModePara_u¶
-
说明
定义Osd Alpha Mode参数联合体。
-
定义
typedef union { MI_SCL_DirectOsdArgb1555Alpha_t stArgb1555Alpha; MI_U8 u8ConstantAlpha; } MI_SCL_DirectOsdAlphaModePara_u;
-
成员
成员名称 描述 stArgb1555Alpha Pixelalpha时Argb1555格式的前景Alpha及背景Alpha设定 u8ConstantAlpha Constant Alpha时Alpha值设定,取值范围0~0xFF -
相关数据类型及接口
3.13. MI_SCL_DirectOsdAlphaMode_e¶
-
说明
设定Osd Alpha显示模式。
-
定义
typedef enum { E_MI_SCL_DIRECT_BUF_OSD_PIXEL_ALPHA = 0, E_MI_SCL_DIRECT_BUF_OSD_CONSTANT_ALPHT } MI_SCL_DirectOsdAlphaMode_e;
-
成员
成员名称 描述 E_MI_SCL_DIRECT_BUF_OSD_PIXEL_ALPHA Osd显示每个pixel对应的alpha效果,例如argb1555/argb4444/arbg8888/i2/i4/i8这些格式都能支持pixel alpha,rgb565则不会生效。 E_MI_SCL_DIRECT_BUF_OSD_CONSTANT_ALPHT Osd硬件会忽略图像格式中的alpha位,使用统一的值设定alpha值。例如rgb565能设定其透明度。 -
相关数据类型及接口
3.14. MI_SCL_DirectOsdAlphaAttr_t¶
-
说明
定义Osd Alpha属性的结构体。
-
定义
typedef struct MI_SCL_DirectOsdAlphaAttr_s { MI_SCL_DirectOsdAlphaMode_e eAlphaMode; MI_SCL_DirectOsdAlphaModePara_u stAlphaPara; } MI_SCL_DirectOsdAlphaAttr_t;
-
成员
成员名称 描述 eAlphaMode Osd Alpha的使用模式。 stAlphaPara 模式对应的参数。 -
相关数据类型及接口
3.15. MI_SCL_DirectOsdInfo_t¶
-
说明
SCL 直接操作Osdbuffer 参数信息。
-
定义
typedef struct MI_SCL_DirectOsdInfo_s { MI_U32 u32X; MI_U32 u32Y; MI_U32 u32Width; MI_U32 u32Height; MI_PHY phyAddr; MI_U32 u32Stride; MI_SCL_DirectOsdAlphaAttr_t stOsdAlphaAttr; } MI_SCL_DirectOsdInfo_t;
-
成员
成员名称 描述 u32X 横坐标 u32Y 纵坐标 u32Width 有效像素宽度 u32Height 有效像素高度 phyAddr Buffer 物理地址 u32Stride Buffer 一行占字节数 stOsdAlphaAttr Osd Alpha 属性 -
相关数据类型及接口
3.16. MI_SCL_DirectOsdBuf_t¶
-
说明
SCL 直接操作Osdbuffer 参数类型。
-
定义
typedef struct MI_SCL_DirectOsdBuf_s { MI_U8 u8OsdBufCnt; MI_SYS_PixelFormat_e ePixelFormat; MI_SCL_DirectOsdInfo_t astOsdBuf[MI_SCL_DIRECT_OSD_CNT_MAX]; } MI_SCL_DirectOsdBuf_t;
-
成员
成员名称 描述 u8OsdBufCnt OSD 图像数据的数量 ePixelFormat OSD Buffer 像素格式 astOsdBuf OSD 图像数据 -
注意事项
-
u8OsdBufCnt 有效区间 [0, MI_SCL_DIRECT_OSD_CNT_MAX]
#define MI_SCL_DIRECT_OSD_CNT_MAX (8)
-
ePixelFormat 支持范围请参考MI RGN API 中 “MI_RGN_AttachToChn” 。
-
-
相关数据类型及接口
3.17. MI_SCL_DEV_ISP_REALTIME0¶
-
说明
SCL Device 0
-
定义
#define MI_SCL_DEV_ISP_REALTIME0 (0x0)
3.18. MI_SCL_DEV_RDMA0¶
-
说明
SCL Device 1
-
定义
#define MI_SCL_DEV_RDMA0 (0x1)
3.19. MI_SCL_DEV_VIF_REALTIME0¶
-
说明
SCL Device 2
-
定义
#define MI_SCL_DEV_VIF_REALTIME0 (0x2)
3.20. MI_SCL_DEV_DIPR0¶
-
说明
SCL Device 3
-
定义
#define MI_SCL_DEV_DIPR0 (0x3)
3.21. MI_SCL_DEV_ISP_REALTIME1¶
-
说明
SCL Device 4
-
定义
#define MI_SCL_DEV_ISP_REALTIME1 (0x4)
3.22. MI_SCL_DEV_RDMA2¶
-
说明
SCL Device 5
-
定义
#define MI_SCL_DEV_RDMA2 (0x5)
3.23. MI_SCL_DEV_VIF_REALTIME1¶
-
说明
SCL Device 6
-
定义
#define MI_SCL_DEV_VIF_REALTIME1 (0x6)
3.24. MI_SCL_DEV_DIPR1¶
-
说明
SCL Device 7
-
定义
#define MI_SCL_DEV_DIPR1 (0x7)
3.25. MI_SCL_DEV_HVP_REALTIME0¶
-
说明
SCL Device 8
-
定义
#define MI_SCL_DEV_HVP_REALTIME0 (0x8)
4. FB错误码¶
视频输入 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次数 src 输入源 sclmask 设备使用Scaler id cmdq Cmdq 指针 IrqEn IRQ 使能状况 IrqMode IRQ 模式 Irqnum IRQ ID VsyncCnt ISR vsync Cnt crcFailCnt input crc 校验失败次数 FDCnt ISR Frame Done Cnt DropCnt IRQ Frame Drop or Double Vsync LdCnt Low Lantency Mode Match Line IRQ Cnt DVCnt double vsync cnt rstcnt reset hw 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 compress input 压缩类型 Stride Input buffer stride Atom 底层拿住buffer 数量 Atom0Cnt 释放buffer后底层拿不到buffer的次数 PTMax/Cur 硬件处理所花最长时间/当前帧硬件处理所花时间 PreCnt/EnqCnt/BarCnt/checkin/
checkout/DeqCntCallback 接口执行次数 MaxIv/MinIv callback 执行的间隔时间 DropCnt drop task cnt 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 水平/竖直 翻转 compress output 压缩类型 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
功能 | 设置每一个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的input/output/done buffer |
---|---|
命令 | echo clearbuf [chnid, portid bClearInput, bClearoutput] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id bClearInput: 清除input的buffer bClearoutput: 清除output的buffer |
举例 | echo clearbuf 0 0 1 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: 0:禁用, 1: 使用 |
举例 | echo enableport 0 0 1 > /proc/mi_modules/mi_scl/mi_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打印出来 |
功能 | 设置打印pts,pts间隔超过某个区间打印出来 |
---|---|
命令 | echo ptsth [chnid portid ptsmininterval ptsmaxinterval] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id Portid: port id ptsmininterval: pts间隔时间最小值 ptsmaxinterval: pts间隔时间最大值 |
举例 | echo ptsth 0 0 30000 40000 > /proc/mi_modules/mi_scl/mi_scl0 //channel0 port0中pts小于30ms,大于40ms的值打印出来 |
功能 | 设置reset 整个scl 硬件 |
---|---|
命令 | echo resethw [chnid ] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | Chnid: channel id |
举例 | echo resethw 0 > /proc/mi_modules/mi_scl/mi_scl0 //mi_scl0代表MI_SCL_DEV_ISP_REALTIME0, mi_scl1 代表MI_SCL_DEV_RDMA0 |
功能 | 设置 output port 参数 |
---|---|
命令 | echo outputparam pixel [chnid, portid pixelmode] > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam compress [chnid, portid compressmode] > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam mirrorflip [chnid, portid bmirror bflip] > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam crop [chnid, portid cropX cropY cropW cropH] > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam size [chnid, portid sizeW sizeH] > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam all [chnid, portid pixelmode compressmode bmirror bflip cropX cropY cropW cropH sizeW sizeH] > /proc/mi_modules/mi_scl/mi_scl1 |
参数说明 | Chnid: channel id Portid: port id Pixelmode: 输出的pixel类型,填入MI_SYS_PixelFormat_e 中对应的数值 Compressmode:输出的压缩模式,填入MI_SYS_CompressMode_e中对应的数值 Bmirror:输出的使能水平翻转 Bflip:输出的使能垂直翻转 cropX:输出的端口裁剪X坐标 cropY:输出的端口裁剪Y坐标 cropW:输出的端口裁剪宽度 cropH:输出的端口裁剪高度 sizeW:输出的端口宽度 sizeH:输出的端口高度 |
举例 | echo outputparam pixel 0 0 11 > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam compress 0 0 5 > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam mirrorflip 0 0 1 1 > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam crop 0 0 0 0 1920 1080 > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam size 0 0 1920 1080 > /proc/mi_modules/mi_scl/mi_scl1 echo outputparam all 0 0 11 5 1 1 0 0 1920 1080 1920 1080 > /proc/mi_modules/mi_scl/mi_scl1 |
功能 | 设置输出端口的CRC 模式 |
---|---|
命令 | echo crcmode [chnid portid crcmode] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | chnid: channel id Portid: port id crcmode: 0:禁用, 1: 使用 |
举例 | echo crcmode 0 1 1 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置输出端口的字节偏移 |
---|---|
命令 | echo bytewrite [chnid portid bEn offsetbyte] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | chnid: channel id Portid: port id bEn: 0:禁用, 1: 使用 offsetbyte: 字节偏移量 |
举例 | echo bytewrite 0 0 1 1 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置输入源的测试图形 |
---|---|
命令 | echo patengen [chnid bEn patengenmode] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | chnid: channel id bEn: 0:禁用, 1: 使用 patengenmode: 0:静态测试图形, 1: 动态测试图形 |
举例 | echo patengen 0 1 0 > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置发生cmdq timeout之后执行的命令抓取信息 |
---|---|
命令 | echo cmdqtimeout [bEn, keyword, cmdline, path] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | bEn: 0:禁用, 1: 使用 keyword: 执行的命令 cmdline: 执行的字符串 path: 信息保存路径 |
举例 | echo 1 cat /proc/mi_modules/mi_scl/mi_scl0 /mnt/cmdqerr.txt > /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置scl filter type |
---|---|
命令 | echo outputfilter [chnid, portid, filtertype] > /proc/mi_modules/mi_scl/mi_scl0 |
参数说明 | chnid: channel id Portid: port id filtertype: 0:auto, 1:bilinear, 2:bicubic |
举例 | echo outputfilter 0 0 1> /proc/mi_modules/mi_scl/mi_scl0 |
功能 | 设置cmdq delay时间 |
---|---|
命令 | echo cmdqdelay [time(ns)] > /proc/mi_modules/mi_scl/mi_scl1 |
参数说明 | time: cmdq delay时间(ns) |
举例 | echo cmdqdelay 100000 > /proc/mi_modules/mi_scl/mi_scl1 |
功能 | 设置double vsync drop 是否enable |
---|---|
命令 | echo doublevsyncdrop [bEn] > /proc/mi_modules/mi_scl/mi_scl1 |
参数说明 | bEn: 0:禁用, 1: 使用 |
举例 | echo doublevsyncdrop 1 > /proc/mi_modules/mi_scl/mi_scl1 |
6. MODPARAM.json介绍¶
6.1. json文件内容¶
{ "E_MI_MODULE_ID_SCL" : { "bEnableMultiRing": "TRUE", "bDefaultDropFifoBuffer": "TRUE", "u32MaxChnNum": "32", "bUseHwResetArray": "1", "bCmdqTimeOutDbgArray": "0", "u16CpuMaskAffinityArray": "0", "u32threadPriorityArray": "98", "u32CmdqSizeArray": "91136", "u32PatMode": "0,0", "bDoubleVsyncDropDbgArray": "FALSE", "u64PmTimeoutLatencyNS": "1000000000", "u32BaseFrameIdxArray": "0", "u32DevDbgLv": "0", "u8ChnDbgLv": "0", "bCrcEnableArray": "0", "bEnableTileModeArray": "0", "u16ByteWriteArray": "0", "u16FilterTypeArray": "0", "u16RingLineCntArray": "-1" } }
modparam.json 文件在/config 目录下,该文件在 SCL 初始化阶段会加载进去。
6.2. SCL 常用参数以及参数解析¶
参数名 | 默认值 | 支持chip | 是否客户配置 | 作用 |
---|---|---|---|---|
bEnableMultiRing | TRUE | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl 是否启用 multiring mode, 0(关闭), 1(开启) |
bDefaultDropFifoBuffer | TRUE | Maruko, Opera, Souffle以及后续的chip | Y | 设置 scl 是否默认丢弃缓存里的, 0(关闭), 1(开启) |
u32MaxChnNum | 32 | Maruko, Opera, Souffle以及后续的chip | Y | 设置 scl 最大通道数量,[0-U32MAX] |
bUseHwResetArray | 1 | Maruko, Opera, Souffle以及后续的chip | Y | 设置 scl dev 是否开启复位机制, 0(关闭), 1(开启) |
bCmdqTimeOutDbgArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev 是否开启复位调式机制, 0(关闭), 1(开启) |
u16CpuMaskAffinityArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev CPU 亲和力, 0(全部cpu), bit[0,3]对应 cpu[0,3] |
u32threadPriorityArray | 98 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev 线程优先级, [0-U32MAX] |
u32CmdqSizeArray | 91136 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev cmdq size,[0-U32MAX] |
u32PatMode | 0,0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev pattern gen, [W,H], 为0时关闭 |
bDoubleVsyncDropDbgArray | FALSE | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev doublevsync 时是否 drop buffer, 0(关闭), 1(开启) |
u64PmTimeoutLatencyNS | 1000000000 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev 休眠最大等待时间,[0-U64MAX] |
u32BaseFrameIdxArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev 基础帧ID, [0-U32MAX] |
u32DevDbgLv | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev 日志调式等级,[0-U32MAX] |
u8ChnDbgLv | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl dev channel 日志调式等级,[0-U8MAX] |
bCrcEnableArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl port crc 校验是否开启,0(关闭),1(开启) |
bEnableTileModeArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl port Tile 模式是否开启, 0(关闭), 1(开启) |
u16ByteWriteArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl port bytewrite 偏移量,[0-U16MAX] |
u16FilterTypeArray | 0 | Maruko, Opera, Souffle以及后续的chip | N | 设置 scl port 滤波类型, 0(自动), 1(Bilinear), 2(Bicubic) |
u16RingLineCntArray | -1 | Iford 以及后续的chip | N | 设置 scl port JPEG_EmiRing 时使用的RingBuf 高, -1(自动), [0-OutSizeHeight] |