MI DIVP API
1. 概述¶
1.1. 模块说明¶
DIVP支持对一幅输入图像进行预处理,如裁剪等,然后再对各通道分别进行缩放处理,最后输出多种不同分辨率的图像。
DIVP支持的具体图像处理功能包括:
-
图像的裁剪
-
图像像素格式转换
-
图像的旋转
-
图像的镜像操作
-
图像的拉伸和缩放
1.2. 流程框图¶
注意:不支持图像旋转的芯片列有Macaron、Taiyaki、Takoyaki、Ispahan
系列。
1.3. 关键字说明¶
关键字 | 说明 |
---|---|
crop | 图像剪裁 |
rotate | 图像旋转 |
scaling up/down | 图像拉伸和缩放 |
Mirror/flip | 图像镜像操作 |
Pixel format convert | 图像像素格式转换 |
2. API 参考¶
2.1. 功能模块API¶
API名 | 功能 |
---|---|
MI_DIVP_CreateChn | 创建一个 DIVP channel |
MI_DIVP_DestroyChn | 销毁一个 DIVP channel |
MI_DIVP_SetChnAttr | 设置 DIVP channel的属性 |
MI_DIVP_GetChnAttr | 获取 DIVP channel的属性 |
MI_DIVP_StartChn | 开启一个通道 |
MI_DIVP_StopChn | 禁用一个通道 |
MI_DIVP_SetOutputPortAttr | 设置 DIVP output port的属性 |
MI_DIVP_GetOutputPortAttr | 获取 DIVP output port的属性 |
MI_DIVP_RefreshChn | 在暂停的状态下刷新某个channel |
MI_DIVP_StretchBuf | 缩放、拉伸、裁剪指定内存中的图像数据 |
MI_DIVP_InitDev | 初始化DIVP设备 |
MI_DIVP_DeInitDev | 反初始化DIVP设备 |
MI_DIVP_StretchBufEx | 缩放、拉伸、裁剪指定内存区域中的图像数据,并输出到目标内存 |
2.2. MI_DIVP_CreateChn¶
-
功能
创建一个新的DIVP channel。
-
语法
MI_S32 MI_DIVP_CreateChn ( MI_DIVP_CHN DivpChn, MI_DIVP_ChnAttr_t * pstAttr);
-
形参
参数名称 描述 输入/输出 DivpChn 返回被创建的DIVP通道的ID,DIVP最多支援6个通道,取值范围[0,5] 输入 pstAttr DVIP通道属性的指针,用于设定被创建的通道的属性 输入 -
返回值
-
MI_SUCCESS 成功创建一个新的DIVP通道。
-
MI_DIVP_ERR_FAILED 创建DIVP通道失败
-
MI_DIVP_ERR_NO_RESOUCE 系统资源不足,创建DIVP通道失败
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
DIVP 模块最多支援6个channel,当上层创建的channel总数大于6个或者系统资源不足时会创建失败。
-
举例
MI_DIVP_CHN u32ChnId = 0; MI_DIVP_ChnAttr_t stDivpChnAttr; MI_DIVP_OutputPortAttr_t stDivpOutputPortAttr; memset(&stDivpChnAttr,0,sizeof(MI_DIVP_ChnAttr_t)); memset(&stDivpOutputPortAttr,0,sizeof(MI_DIVP_OutputPortAttr_t)); stDivpChnAttr.bHorMirror = false; stDivpChnAttr.bVerMirror = false; stDivpChnAttr.eDiType = E_MI_DIVP_DI_TYPE_OFF; stDivpChnAttr.eRotateType = E_MI_SYS_ROTATE_90; stDivpChnAttr.eTnrLevel = E_MI_DIVP_TNR_LEVEL_OFF; stDivpChnAttr.stCropRect.u16X = 0; stDivpChnAttr.stCropRect.u16Y = 0; stDivpChnAttr.stCropRect.u16Width = 1280; stDivpChnAttr.stCropRect.u16Height = 720; stDivpChnAttr.u32MaxWidth = 1920; stDivpChnAttr.u32MaxHeight = 1080; MI_DIVP_CreateChn(u32ChnId,&stDivpChnAttr); MI_DIVP_GetChnAttr(u32ChnId,&stDivpChnAttr); stDivpChnAttr.stCropRect.u16X = 0; stDivpChnAttr.stCropRect.u16Y = 0; stDivpChnAttr.stCropRect.u16Width = 1920; stDivpChnAttr.stCropRect.u16Height = 1080; MI_DIVP_SetChnAttr(u32ChnId,&stDivpChnAttr); stDivpOutputPortAttr.eCompMode = E_MI_SYS_COMPRESS_MODE_NONE; stDivpOutputPortAttr.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV422_YUYV; stDivpOutputPortAttr.u32Width = 1920; stDivpOutputPortAttr.u32Height = 1080; MI_DIVP_SetOutputPortAttr(u32ChnId,&stDivpOutputPortAttr); MI_DIVP_StartChn(u32ChnId); //exit flow MI_DIVP_StopChn(u32ChnId); MI_DIVP_DestroyChn(u32ChnId);
-
相关主题
2.3. MI_DIVP_DestroyChn¶
-
功能
销毁一个 DIVP通道。
-
语法
MI_S32 MI_DIVP_DestroyChn(MI_DIVP_CHN DivpChn);
-
形参
参数名称 描述 输入/输出 DivpChn 被销毁的DVIP通道的ID 输入 -
返回值
-
MI_SUCCESS 成功销毁DVIP通道。
-
MI_DIVP_ERR_FAILED 销毁DVIP通道失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
相关主题
2.4. MI_DIVP_SetChnAttr¶
-
功能
设置 DIVP channel的属性。
-
语法
MI_S32 MI_DIVP_SetChnAttr( MI_DIVP_CHN DivpChn, MI_DIVP_ChnAttr_t * pstAttr);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 pstAttr 设定的DVIP通道的属性的结构体指针 输入 -
返回值
-
MI_SUCCESS 成功设定DIVP通道的属性
-
MI_DIVP_ERR_FAILED 设置DIVP通道的属性失败,MI_ERR_INVALID_PARAMETER 传入的参数有问题,请参考MI_DIVP_ChnAttr_t
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
通道属性结构体成员中输入图像的最大宽度与最大高度为静态属性,通道创建后不能改变。
-
相关主题
2.5. MI_DIVP_GetChnAttr¶
-
功能
获取 DIVP channel的属性。
-
语法
MI_S32 MI_DIVP_GetChnAttr( MI_DIVP_CHN DivpChn, MI_DIVP_ChnAttr_t * pstAttr);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 pstAttr 传回的DVIP通道的属性的结构体指针 输出 -
返回值
-
MI_SUCCESS 成功获取DIVP通道的属性。
-
MI_DIVP_ERR_FAILED 获取DIVP通道的属性失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
第一次获取时返回创建时的初始值。
-
相关主题
2.6. MI_DIVP_StartChn¶
-
功能
开启一个通道。
-
语法
MI_S32 MI_DIVP_StartChn(MI_DIVP_CHN DivpChn);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 -
返回值
-
MI_SUCCESS 成功启用DIVP通道。
-
MI_DIVP_ERR_FAILED 启用DIVP通道失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
通道必须已经被创建,且没有被销毁。
-
相关主题
2.7. MI_DIVP_StopChn¶
-
功能
禁用一个通道。
-
语法
MI_S32 MI_DIVP_StopChn(MI_DIVP_CHN DivpChn);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 -
返回值
-
MI_SUCCESS 成功禁用DIVP通道。
-
MI_DIVP_ERR_FAILED 禁用DIVP通道失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
重复禁用一个通道会返回MI_SUCCESS。
-
相关主题
2.8. MI_DIVP_SetOutputPortAttr¶
-
功能
DIVP 通道上output port的属性。
-
语法
MI_S32 MI_DIVP_SetOutputPortAttr ( MI_DIVP_CHN DivpChn, MI_DIVP_OutputPortAttr_t* pstOutputPortAttr);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 pstOutputPortAttr Output port的属性的指针 输入 -
返回值
-
MI_SUCCESS 成功设定DIVP通道绑定的output port的属性。
-
MI_DIVP_ERR_FAILED 设定DIVP通道绑定的output port的属性失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
相关主题
2.9. MI_DIVP_GetOutputPortAttr¶
-
功能
获取 DIVP output port的属性。
-
语法
MI_S32 MI_DIVP_GetOutputPortAttr( MI_DIVP_CHN DivpChn, MI_DIVP_OutputPortAttr_t* pstOutputPortAttr);
-
形参
参数名称 描述 输入/输出 DivpChn DIVP 通道的ID 输入 pstOutputPortAttr Output port的属性的指针 输出 -
返回值
-
MI_SUCCESS 成功获取DIVP通道绑定的output port的属性。
-
MI_DIVP_ERR_FAILED 获取DIVP通道绑定的output port的属性失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
相关主题
2.10. MI_DIVP_RefreshChn¶
-
功能
暂停状态下刷新DIVP channel。
-
语法
MI_S32 MI_DIVP_RefreshChn ( MI_DIVP_CHN DivpChn);
-
形参
参数名称 描述 输入/输出 DivpChn 被刷新的channel的ID 输入 -
返回值
-
MI_SUCCESS 成功刷新DIVP的channel。
-
MI_DIVP_ERR_NO_CONTENT 该通道没有内容。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
该接口适用于channel在暂停的状态下重新刷新。
-
举例
DIVP绑定VDEC的场景下,调用该接口,DIVP可以保留VDEC停止送流后的最后一帧画面,并重复处理然后送给后端,直到VDEC重新开始送流,DIVP才会处理新的画面。
2.11. MI_DIVP_StretchBuf¶
-
功能
缩放、拉伸、裁剪指定内存区域中的图像数据,并输出到目标内存。
-
语法
MI_S32 MI_DIVP_StretchBuf(MI_DIVP_DirectBuf_t *pstSrcBuf, MI_SYS_WindowRect_t *pstSrcCrop, MI_DIVP_DirectBuf_t *pstDstBuf);
2.12. MI_DIVP_InitDev¶
-
描述
初始化divp设备。
-
语法
MI_S32 MI_DIVP_InitDev(MI_DIVP_InitParam_t *pstInitParam);
-
参数
参数名称 描述 输入/输出 pstInitParam 设备初始化参数 输入 -
返回值
-
MI_OK 成功
-
非M_OK 失败,参照错误码。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
2.13. MI_DIVP_DeInitDev¶
-
描述
反初始divp设备。
-
语法
MI_S32 MI_DIVP_DeInitDev(void);
-
返回值
-
MI_OK 成功。
-
非MI_OK 失败,参照错误码。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
-
此函数必须在初始化设备后调用,否则返回失败。
-
如果本接口在app退出前没有调用,内部会自动反初始化设备。
-
-
形参
|参数名称|描述|输入/输出| |---|---|---|---| |pstSrcBuf| 用来存放待处理图像内存信息的结构体指针,不可以为NULL| 输入| |pstSrcCrop |图像裁剪相关信息的结构体指针,如果不需要做裁剪,可以传NULL| 输入| |pstDstBuf| 保存处理后图像内存信息的结构体指针,不可以为NULL| 输入|
-
返回值
-
MI_SUCCESS 图像处理成功。
-
MI_DIVP_ERR_FAILED 图像处理失败。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
-
注意
该接口只支持YUV420SP或者ARGB8888的像素格式。
-
举例
#define SRC_WIDTH 1280 #define SRC_HEIGHT 720 #define SRC_BUFF_STRIDE (ALIGN_UP(SRC_WIDTH,16)) #define SRC_BUFF_SIZE (SRC_BUFF_STRIDE*SRC_HEIGHT*3/2) #define DST_WIDTH 640 #define DST_HEIGHT 480 #define DST_BUFF_STRIDE (ALIGN_UP(DST_WIDTH,16)) #define DST_BUFF_SIZE (DST_BUFF_STRIDE*DST_HEIGHT*3/2) #define CROP_X 200 #define CROP_Y 100 #define CROP_W 68 #define CROP_H 48 int main(void) { MI_PHY phySrcBufAddr = 0; MI_PHY phyDstBufAddr = 0; MI_DIVP_DirectBuf_t stSrcBuf; MI_DIVP_DirectBuf_t stDstBuf; MI_SYS_WindowRect_t stSrcCrop; MI_SYS_MMA_Alloc(NULL, SRC_BUFF_SIZE, &phySrcBufAddr); MI_SYS_MMA_Alloc(NULL, DST_BUFF_SIZE, &phyDstBufAddr); stSrcBuf.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420; stSrcBuf.u32Width = SRC_WIDTH; stSrcBuf.u32Height = SRC_HEIGHT; stSrcBuf.u32Stride[0] = SRC_BUFF_STRIDE; stSrcBuf.u32Stride[1] = SRC_BUFF_STRIDE; stSrcBuf.phyAddr[0] = phySrcBufAddr; stSrcBuf.phyAddr[1] = stSrcBuf.phyAddr[0] + SRC_BUFF_STRIDE*SRC_HEIGHT; stDstBuf.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420; stDstBuf.u32Width = DST_WIDTH; stDstBuf.u32Height = DST_HEIGHT; stDstBuf.u32Stride[0] = DST_BUFF_STRIDE; stDstBuf.u32Stride[1] = DST_BUFF_STRIDE; stDstBuf.phyAddr[0] = phyDstBufAddr; stDstBuf.phyAddr[1] = stDstBuf.phyAddr[0] + DST_BUFF_STRIDE*DST_HEIGHT; stSrcCrop.u16X = CROP_X; stSrcCrop.u16Y = CROP_Y; stSrcCrop.u16Width = CROP_W; stSrcCrop.u16Height = CROP_H; if(FillSrcBuf("./1280x720_yuv420.yuv", &stSrcBuf)) return NULL; if(MI_SUCCESS == MI_DIVP_StretchBuf(&stSrcBuf, &stSrcCrop, &stDstBuf)) { if(DumpDstBuf(&stDstBuf)) return NULL; } MI_SYS_MMA_Free(phySrcBufAddr); MI_SYS_MMA_Free(phyDstBufAddr); } //fill src buff with yuv420/argb8888 image data static int FillSrcBuf(const char* FilePath,MI_DIVP_DirectBuf_t *pstDirectSrcBuf) { int ret = 0; FILE *fp; void *pVirSrcBufAddr = NULL; int LineIdx = 0; int ReadSize = 0; fp = fopen(FilePath,"r"); if(!fp) { divp_ut_dbg("open file[%s] failed\n",FilePath); ret = -1; goto EXIT; } MI_SYS_Mmap(pstDirectSrcBuf->phyAddr[0], SRC_BUFF_SIZE, &pVirSrcBufAddr, FALSE); if(!pVirSrcBufAddr) { divp_ut_dbg("mmap dst buff failed\n"); ret = -1; goto EXIT; } for(LineIdx = 0; LineIdx < SRC_HEIGHT*3/2; LineIdx++) { ReadSize += fread(pVirSrcBufAddr+LineIdx*SRC_BUFF_STRIDE, 1, SRC_WIDTH, fp); } if(ReadSize < SRC_WIDTH*SRC_HEIGHT*3/2) { fseek(fp, 0, SEEK_SET); ReadSize = 0; for(LineIdx = 0; LineIdx < SRC_HEIGHT*3/2; LineIdx++) { ReadSize += fread(pVirSrcBufAddr+LineIdx*SRC_BUFF_STRIDE, 1, SRC_WIDTH, fp); } if(ReadSize < SRC_WIDTH*SRC_HEIGHT*3/2) { divp_ut_dbg("read file failed, read size:%d\n",ReadSize); ret = -1; goto EXIT; } } EXIT: if(fp) fclose(fp); if(pVirSrcBufAddr) MI_SYS_Munmap(pVirSrcBufAddr, SRC_BUFF_SIZE); return ret; } //image processing result is stored in dst buff static int DumpDstBuf(MI_DIVP_DirectBuf_t *pstDirectDstBuf) { int ret = 0; FILE *fp; void *pVirDstBufAddr = NULL; int LineIdx = 0; int WriteSize = 0; char outputfile[128]; struct timeval timestamp; gettimeofday(×tamp, 0); sprintf(outputfile, "output_%dx%d_%d_%08d.yuv",pstDirectDstBuf->u32Width,pstDirectDstBuf->u32Height,(int)timestamp.tv_sec,(int)timestamp.tv_usec); fp = fopen(outputfile,"w+"); if(!fp) { divp_ut_dbg("open file[%s] failed\n",outputfile); ret = -1; goto EXIT; } MI_SYS_Mmap(pstDirectDstBuf->phyAddr[0], DST_BUFF_SIZE, &pVirDstBufAddr, FALSE); if(!pVirDstBufAddr) { divp_ut_dbg("mmap dst buff failed\n"); ret = -1; goto EXIT; } for(LineIdx = 0; LineIdx < DST_HEIGHT*3/2; LineIdx++) { WriteSize += fwrite(pVirDstBufAddr+LineIdx*DST_BUFF_STRIDE, 1, DST_WIDTH, fp); } if(WriteSize < DST_WIDTH*DST_HEIGHT*3/2) { divp_ut_dbg("write file failed, write size:%d\n",WriteSize); } fflush(fp); sync(); divp_ut_dbg("save stretch dst buff to[%s]\n",outputfile); EXIT: if(fp) fclose(fp); if(pVirDstBufAddr) MI_SYS_Munmap(pVirDstBufAddr, DST_BUFF_SIZE); return 0; }
2.14. MI_DIVP_StretchBufEx¶
-
描述
缩放、拉伸、裁剪指定内存区域中的图像数据,并输出到目标内存。
-
语法
MI_S32 MI_DIVP_StretchBufEx(MI_DIVP_DirectBuf_t *pstSrcBuf, MI_SYS_WindowRect_t *pstSrcCrop, MI_DIVP_DirectBuf_t *pstDstBuf, MI_DIVP_FilterType_e eFilterType);
-
参数
参数名称 描述 输入/输出 pstSrcBuf 源buffer信息指针 输入 pstSrcCrop Crop信息指针 输入 pstDstBuf 目标buffer信息指针 输入 eFilterType 做scaling的filter type。 输入 -
返回值
-
MI_OK 成功
-
非M_OK 失败,参照错误码。
-
-
依赖
-
头文件:mi_divp.h、mi_divp_datatype.h
-
库文件:libmi_divp.so
-
3. DIVP 数据类型¶
3.1. 数据类型定义¶
数据类型 | 定义 |
---|---|
MI_DIVP_DiType_e | 定义 DIVP 的deinterlace的类型 |
MI_DIVP_TnrLevel_e | 定义 DIVP TNR的等级 |
MI_DIVP_FilterType_e | 定义 DIVP scaling filter type |
MI_DIVP_OutputPortAttr_t | 定义 DIVP 绑定的output port的属性参数 |
MI_DIVP_ChnAttr_t | 定义 DIVP 通道的属性参数 |
MI_DIVP_DirectBuf_t | 用于图像处理的内存信息结构体 |
MI_DIVP_InitParam_t | 定义DIVP设备初始化参数 |
注:本节已涵盖各重要的数据类型,部分未列出数据类型请参见 mi_divp_datatype.h
3.2. MI_DIVP_DiType_e¶
-
说明
定义 DIVP 的deinterlace的类型。
-
定义
typedef enum { E_MI_DIVP_DITYPE_OFF,//off E_MI_DIVP_DITYPE_2D,///2.5D DI E_MI_DIVP_DITYPE_3D,///3D DI E_MI_DIVP_DITYPE_NUM, } MI_DIVP_DiType_e;
-
成员
成员 描述 E_MI_DIVP_DITYPE_OFF DIVP通道上关闭deinterlace E_MI_DIVP_DITYPE_2D DIVP通道上开启2.5D deinterlace E_MI_DIVP_DITYPE_3D DIVP通道上开启3D deinterlace E_MI_DIVP_DITYPE_NUM DIVP通道上deinterlace类型个数 -
注意事项
-
开启DI时必须开TNR,MSR930只能支援3D DI,TNR level设定为E_MI_DIVP_TNRLEVEL_MIDDLE。
-
3D DI与rotation冲突,两个功能不能同时打开。
-
不支持DI功能的chip如下:
-
Pretzel
-
Macaron
-
Taiyaki/Takoyaki
-
Pudding
-
Ispahan
-
Ikayaki
-
-
3.3. MI_DIVP_TnrLevel_e¶
-
说明
定义 DIVP TNR的等级。
-
定义
typedef enum { E_MI_DIVP_TNRLEVEL_OFF, E_MI_DIVP_TNRLEVEL_LOW, E_MI_DIVP_TNRLEVEL_MIDDLE, E_MI_DIVP_TNRLEVEL_HIGH, E_MI_DIVP_TNRLEVEL_NUM, } MI_DIVP_TnrLevel_e;
-
成员
成员 描述 E_MI_DIVP_TNRLEVEL_OFF DIVP通道上关闭TNR E_MI_DIVP_TNRLEVEL_LOW DIVP通道上开启弱等级的TNR E_MI_DIVP_TNRLEVEL_MIDDLE DIVP通道上开启中等等级的TNR E_MI_DIVP_TNRLEVEL_HIGH DIVP通道上开启强等级的TNR E_MI_DIVP_TNRLEVEL_NUM DIVP通道上TNR等级的数量 -
注意事项
-
MSR930支持TNR,但是不支持调节TNR level。
-
不支持TNR功能的chip如下:
-
Pretzel
-
Macaron
-
Taiyaki/Takoyaki
-
Pudding
-
Ispahan
-
Ikayaki
-
-
3.4. MI_DIVP_FilterType_e¶
-
说明
定义 DIVP scaling filter type 。
-
定义
typedef enum { E_MI_DIVP_FILTER_TYPE_AUTO, E_MI_DIVP_FILTER_TYPE_BYPASS, E_MI_DIVP_FILTER_TYPE_BILINEAR, E_MI_DIVP_FILTER_TYPE_FILTER, } MI_DIVP_FilterType_e;
-
成员
成员 描述 E_MI_DIVP_FILTER_TYPE_AUTO Auto模式,会自动选择bypass或bilinear。 E_MI_DIVP_FILTER_TYPE_BYPASS Bypass模式。 E_MI_DIVP_FILTER_TYPE_BILINEAR Bilinear模式。 E_MI_DIVP_FILTER_TYPE_FILTER Filter type数目。 -
注意事项
不做scaling默认是E_MI_DIVP_FILTER_TYPE_BYPASS filter type。
-
相关数据类型及接口
3.5. MI_DIVP_OutputPortAttr_t¶
-
说明
定义 DIVP 绑定的output port的属性参数。
-
定义
typedef struct MI_DIVP_OutputPortAttr_s { MI_U32 u32Width;//output width MI_U32 u32Height;//output height MI_SYS_PixelFormat_e ePixelFormat; MI_SYS_CompressMode_e eCompMode;//compress mode }MI_DIVP_OutputPortAttr_t;
-
成员
成员名称 描述 u32Width DIVP 通道输出画面的宽度 u32Height DIVP 通道输出画面的高度 ePixelFormat DIVP 通道输出画面的像素格式 eCompMode DIVP 通道输出图像的压缩格式,DIVP通道只能输出非压缩格式的图像 -
注意事项
各系列chip DIVP输出属性差异
芯片系列\输出属性 Output Pixel format Output Stride alignment Output Width alignment Output Height alignment Output Min size Output Max size MSR930 YUV422/YUV420(NV12)/ARGB8888/ ABGR8888/ARGB1555/MST420 32 2 2 128x64 4096x4096
Pretzel YUV422 32 2 2 64x4 3840x3840 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Macaron YUV422 32 2 2 64x4 2688x2688 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Taiyaki/Takoyaki YUV422 32 2 2 64x4 1920x1920 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Pudding YUV422 32 2 2 Rotate:16x2
No rotate:32x43840x3840 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Ispahan YUV422 32 2 2 64x4 2688x2688 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Ikayaki YUV422 32 2 2 Rotate:16x16
No rotate:16x21920x1920 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32
3.6. MI_DIVP_ChnAttr_t¶
-
说明
定义 DIVP 通道的属性参数。
-
定义
typedef struct MI_DIVP_ChnAttr_s { MI_U32 u32MaxWidth;//support max input width MI_U32 u32MaxHeight;//support max input height MI_DIVP_TnrLevel_e eTnrLevel;//TNR level MI_DIVP_DiType_e eDiType;//DI type MI_SYS_Rotate_e eRotateType;//rotate angle MI_SYS_WindowRect_t stCropRect;//crop information MI_BOOL bHorMirror;//horizontal mirror MI_BOOL bVerMirror;//vertical mirror }MI_DIVP_ChnAttr_t;
-
成员
成员名称 描述 u32MaxWidth DIVP通道支援的input的最大宽度 u32MaxHeight DIVP通道支援的input的最大高度 eTnrLevel DIVP通道上TNR的等级 eDiType DIVP通道上DI的类型 eRotateType DIVP通道上画面旋转的角度 stCropRect DIVP通道上的crop信息 bHorMirror DIVP通道上水平方向翻转 bVerMirror DIVP通道上垂直方向翻转 -
注意事项
芯片系列\输入属性 Input Pixel format Input Stride alignment Input Width alignment Input Height alignment Input Min size Input Max size MSR930 YUV422/YUV420(NV12)/ARGB8888/ ABGR8888/ARGB1555/Tile Mode 32 YUV422:16
NV12:322 128x64 4096x4096
Pretzel YUV422 32 2 2 64x4 3840x3840 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Macaron YUV422 32 2 2 64x4 2688x2688 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Taiyaki/Takoyaki YUV422 32 2 2 64x4 1920x1920 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Pudding YUV422 32 2 2 Rotate:128x128
No rotate:32x43840x3840 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Ispahan YUV422 32 2 2 64x4 2688x2688 YUV420(NV12) 16 ARGB8888/ABGR8888 64 RGB565 32 Ikayaki YUV422 32 16 2 Rotate:16x16
No rotate:16x21920x1920 YUV420(NV12) 16 ARGB8888/ABGR8888 64
3.7. MI_DIVP_DirectBuf_t¶
-
说明
定义用于图像处理的内存信息
-
定义
typedef struct MI_DIVP_DirectBuf_s { MI_SYS_PixelFormat_e ePixelFormat; //YUV420SP or ARGB888 only MI_U32 u32Width; MI_U32 u32Height; MI_U32 u32Stride[3]; MI_PHY phyAddr[3]; }MI_DIVP_DirectBuf_t;
-
成员
成员名称 描述 ePixelFormat 图像的像素格式 u32Width 图像画面的宽度 u32Height 图像画面的高度 u32Stride 图像每行所占字节数 phyAddr Buffer的起始物理地址 -
注意事项
-
只支持YUV420SP或者ARGB8888的图像像素格式
-
u32Stride不能小于64
-
-
相关数据类型及接口
3.8. MI_DIVP_InitParam_t¶
-
说明
DIVP设备初始化参数
-
定义
typedef struct MI_DIVP_InitParam_s { MI_U32 u32DevId; MI_U8 *u8Data; } MI_DIVP_InitParam_t;
-
成员
成员名称 描述 u32DevId 设备ID u8Data 数据指针buffer -
相关数据类型及接口
4. DIVP 错误码¶
表4-1 DIVP API 返回值
错误代码 | 宏定义 | 描述 |
---|---|---|
0x0 | MI_SUCCESS | succeeded |
0xa00c2002 | MI_DIVP_ERR_INVALID_CHNID | 无效的channel ID |
0xa00c2003 | MI_DIVP_ERR_INVALID_PARAM | 传入的参数无效 |
0xa00c2006 | MI_DIVP_ERR_NULL_PTR | 空指针异常 |
0xa00c201c | MI_DIVP_ERR_FAILED | DIVP的操作失败 |
0xa00c2005 | MI_DIVP_ERR_NO_RESOUCE | 无资源可以使用 |
0xa00c201c | MI_DIVP_ERR_NO_CONTENT | 通道中无显示内容 |