MI VPE API

Version 2.19


1. 概 述


1.1. 模块说明

VPE(Video Process Engine)图像处理引擎,支持对一幅输入的图像首先进行图像质量调整,包括降噪,锐化,亮度调整等,然后再分别缩放到一定的分辨率通过各个output port口输出。 该模块另外包含HDR,旋转,裁剪等功能。


1.2. 流程框图

1.2.1. Pretzel框图

图1-1

1.2.2. Macaron框图

图1-2

1.2.3. Pudding框图

图1-3

1.2.4. Ispahan 框图

图1-4

1.2.5. Tiramisu 框图

图1-5

  • 注意

    框图中8x2/2x2/16x16表示该位置宽/高 alignment限制。

1.2.6. Ikayaki 框图

图1-6


1.3. 关键字说明

  • Channel

    VPE module 处理通道,各通道分时复用VPE硬件。

  • ISP

    Image Signal Processing 图像信号处理单元,负责图像降噪/颜色渲染/亮度调整等功能。

  • SCL

    Scaler(缩放)缩写。

  • Port

    端口, VPE包含一个input port, output port端口分布参考流程框图

  • 3DNR

    3D Denoising, 3D降噪。

    2D降噪: 对一个像素将其与周围像素平均,平均后噪声降低,但缺点是会造成画面模糊;

    3D降噪:增添了时域处理, 2d降噪只考虑一帧图像,而3d降噪进一步考虑帧与帧之间的时域关系,对每个像素进行时域上的平均。

  • HDR

    High-Dynamic Range, 高动态范围图像。

  • Rotation

    将原始图像绕中心点做旋转0/90/180/270°

  • Crop

    裁剪, 对输入图像进行裁剪。

  • HVSP

    H/V 方向Scaling Process。

  • LDC

    lens distortion correction 镜头畸变矫正。

  • ZOOM

    快速放大/缩小, 电子变焦功能。

  • View

    窗口,内部LDC功能中的一个窗口。

  • Realtime

    实时连接, 指两个模块之间硬件直连。

    优点:模块之间不消耗Dram;

    缺点:不能分时复用,只能创建一个通道。


2. API 参考


2.1. 功能模块API

该功能模块提供以下API:

API名 功能
MI_VPE_CreateChannel 创建一个VPE channel
MI_VPE_DestroyChannel 销毁一个VPE channel
MI_VPE_GetChannelAttr 获取一个VPE channel属性
MI_VPE_SetChannelAttr 设定一个VPE channel属性
MI_VPE_StartChannel 启用VPE channel
MI_VPE_StopChannel 禁用VPE channel
MI_VPE_EnablePort 启用VPE 端口
MI_VPE_DisablePort 禁用VPE 端口
MI_VPE_SetChannelParam 设定VPE channel参数
MI_VPE_GetChannelParam 获取VPE channel参数
MI_VPE_SetChannelCrop 设定VPE channel crop window
MI_VPE_GetChannelCrop 获取VPE channel crop window
MI_VPE_GetChannelRegionLuma 获取VPE通道Luma直方图统计
MI_VPE_SetChannelRotation 设定VPE通道视频旋转类型
MI_VPE_GetChannelRotation 获取VPE通道视频旋转类型
MI_VPE_SetPortMode 设定VPE端口模式
MI_VPE_GetPortMode 获取VPE端口模式
MI_VPE_SetPortCrop 设定VPE out port crop window
MI_VPE_GetPortCrop 获取VPE out port crop window设置参数
MI_VPE_SetPortShowPosition 设置vpe output port 显示位置
MI_VPE_GetPortShowPosition 获取vpe output port 显示位置
MI_VPE_Alloc_IspDataBuf 申请MI_ISP API data Buffer
MI_VPE_Free_IspDataBuf 释放MI_ISP API data Buffer
MI_VPE_LDCBegViewConfig view开始配置
MI_VPE_LDCEndViewConfig View结束配置
MI_VPE_LDCSetViewConfig View配置config bin buffer
MI_VPE_SkipFrame 设置跳过frame num
MI_VPE_InitDev 初始化VPE设备
MI_VPE_DeInitDev 反初始化VPE设备
MI_VPE_CreateMultiChannelStitch 创建多通道融合通道
MI_VPE_CallBackTask_Register 向VPE注册回调接口
MI_VPE_CallBackTask_Unregister 向VPE反注册回调接口
MI_VPE_LoadPortZoomTable 端口载入Zoom table
MI_VPE_StartPortZoom 端口开始运行Zoom
MI_VPE_StopPortZoom 端口停止运行Zoom
MI_VPE_GetPortCurZoomAttr 获取当前端口Zoom 属性
MI_VPE_EnableInputPort 启用VPE 输入端口
MI_VPE_DisableInputPort 禁用VPE 输入端口
MI_VPE_LDCSetBatchViewConfig 批量配置Ldc 的config
MI_VPE_SetInputportCrop 设定VPE Input port crop window
MI_VPE_GetInputportCrop 获取VPE Input port crop window设置参数

2.2. MI_VPE_CreateChannel

  • 描述

    创建一个VPE channel。

  • 语法

    MI_S32 MI_VPE_CreateChannel(MI_VPE_CHANNEL VpeCh, MI_VPE_ChannelAttr_t*pstVpeChAttr);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeChAttr VPE channel属性指针。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • Realtime mode下,不支持多channel。
  • 举例

    创建一路主码流通道, 并销毁退出流程:

    图2-1

    MI_VPE_ChannelAttr_t stChannelVpeAttr;
    MI_SYS_WindowRect_t stChnCropWin;
    MI_VPE_CHANNEL VpeChannel=0;
    MI_VPE_PORT VpePort=0;
    MI_VPE_ChannelPara_t stChannelVpeParam;
    MI_SYS_Rotate_e eRot = E_MI_SYS_ROTATE_NONE;
    MI_SYS_WindowRect_t  stPortCropWin;
    MI_S32 s32Ret = MI_SUCCESS;
    
    MI_SNR_PAD_ID_e eSnrPadId = E_MI_SNR_PAD_ID_0;
    MI_SNR_PlaneInfo_t stSnrPlane0Info;
    MI_U32 u32CapWidth = 0, u32CapHeight = 0;
    MI_SYS_PixelFormat_e ePixFormat;
    
    memset(&stChannelVpeAttr, 0x0, sizeof(MI_VPE_ChannelAttr_t));
    memset(&stChannelVpeParam, 0x0, sizeof(MI_VPE_ChannelPara_t));
    memset(&stSnrPlane0Info, 0x0, sizeof(MI_SNR_PlaneInfo_t));
    memset(&stPortCrop, 0x0, sizeof(MI_SYS_WindowRect_t));
    memset(&stChnCropWin, 0x0, sizeof(MI_SYS_WindowRect_t));
    
    MI_SNR_GetPlaneInfo(eSnrPadId, 0, &stSnrPlane0Info);
    
    u32CapWidth = stSnrPlane0Info.stCapRect.u16Width;
    u32CapHeight = stSnrPlane0Info.stCapRect.u16Height;
    ePixFormat = (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision, stSnrPlane0Info.eBayerId);
    
    stChannelVpeAttr.u32MaxW = u32CapWidth ;
    stChannelVpeAttr.u32MaxH = u32CapHeight ;
    stChannelVpeAttr.bNREn= FALSE;
    stChannelVpeAttr.bEdgeEn= FALSE;
    stChannelVpeAttr.bESEn= FALSE;
    stChannelVpeAttr.bContrastEn= FALSE;
    stChannelVpeAttr.bUVInvert= FALSE;
    stChannelVpeAttr.ePixFmt = ePixFormat;
    stChannelVpeAttr.eRunningMode = E_MI_VPE_RUN_REALTIME_MODE;
    stChannelVpeAttr.eSensorBindId= E_MI_VPE_SENSOR0;
    
    s32Ret = MI_VPE_CreateChannel(VpeChannel, &stChannelVpeAttr);    
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_GetChannelAttr(VpeChannel, & stChannelVpeAttr); 
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    stChannelVpeParam.eHDRType = E_MI_VPE_HDR_TYPE_OFF;
    stChannelVpeParam.e3DNRLevel = E_MI_VPE_3DNR_LEVEL2;
    stChannelVpeParam.bMirror = FALSE;
    stChannelVpeParam.bFlip = FALSE;
    s32Ret =MI_VPE_SetChannelParam(VpeChannel, &stChannelVpeParam);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret =MI_VPE_SetChannelRotation(VpeChannel, eRot);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_GetChannelCrop(VpeChannel, &stCropWin) 
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    stChnCropWin .u16X = 0;
    stChnCropWin .u16Y = 0;
    stChnCropWin .u16Width = 0;
    stChnCropWin .u16Height = 0;
    s32Ret = MI_VPE_SetChannelCrop(VpeChannel, & stChnCropWin );
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_StartChannel (VpeChannel);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    stPortCrop.u16X = 0;
    stPortCrop.u16Y = 0;
    stPortCrop.u16Width = 0;
    stPortCrop.u16Height = 0;
    s32Ret=MI_VPE_SetPortCrop(VpeChannel,VpePort,&stPortCrop);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    stVpeMode.u16Width = u32CapWidth;
    stVpeMode.u16Height = u32CapHeight;
    stVpeMode.ePixelFormat = E_MI_SYS_PIXEL_FRAME_YUV_SEMIPLANAR_420;
    stVpeMode.eCompressMode = E_MI_SYS_COMPRESS_MODE_NONE;
    stVpeMode.bMirror = FALSE;
    stVpeMode.bFlip = FALSE;
    s32Ret =MI_VPE_SetPortMode(VpeChannel,VpePort, &stVpeMode);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_EnablePort(VpeChannel, VpePort);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    /*****************************/
    /*  call sys bind interface */
    /*****************************/
    
    /*****************************/
    /*  Exit call sys unbind interface */
    /*****************************/
    s32Ret = MI_VPE_StopChannel (VpeChannel);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_DisablePort(VpeChannel, VpePort);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
    s32Ret = MI_VPE_DestroyChannel(VpeChannel);
    if(s32Ret != MI_SUCCESS)
    {
        return s32Ret;
    }
    
  • 相关主题

    MI_VPE_DestroyChannel


2.3. MI_VPE_DestroyChannel

  • 描述

    销毁一个VPE channel.

  • 语法

    MI_S32 MI_VPE_DestroyChannel (MI_VPE_CHANNEL VpeCh);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_CreateChannel


2.4. MI_VPE_GetChannelAttr

  • 描述

    获取一个VPE channel属性.

  • 语法

    MI_S32 MI_VPE_GetChannelAttr(MI_VPE_CHANNEL VpeCh, MI_VPE_ChannelAttr_t * pstVpeChAttr );
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeChAttr VPE channel属性指针。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_SetChannelAttr


2.5. MI_VPE_SetChannelAttr

  • 描述

    设定一个VPE channel属性.

  • 语法

    MI_S32 MI_VPE_SetChannelAttr (MI_VPE_CHANNEL VpeCh, MI_VPE_ChannelAttr_t *pstVpeChAttr);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeChAttr VPE channel属性指针。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    只有在DVR mode下MI_VPE_ChannelAttr_t 中的bNrEn,bEdgeEn,bEsEn,bContrastEn,bUvInvert 参数可以被更改。

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_GetChannelAttr


2.6. MI_VPE_StartChannel

  • 描述

    启用VPE channel.

  • 语法

    MI_S32 MI_VPE_StartChannel(MI_VPE_CHANNEL VpeCh);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_StopChannel


2.7. MI_VPE_StopChannel

  • 描述

    禁用VPE channel.

  • 语法

    MI_S32 MI_VPE_StopChannel(MI_VPE_CHANNEL VpeCh);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

当改变channel 属性时需要先调用此api,将channel 禁用, channel属性设置完后才重新开启。


2.8. MI_VPE_EnablePort

  • 描述

    启用VPE 端口.

  • 语法

    MI_S32 MI_VPE_EnablePort(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT s32VpePort);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    s32VpePort Vpe Port号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_DisablePort


2.9. MI_VPE_DisablePort

  • 描述

    禁用VPE 端口.

  • 语法

    MI_S32 MI_VPE_DisablePort(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort Vpe Port号。。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    当改变port属性时,需要先将port禁用掉,设置完port属性后再重新启用。

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_EnablePort


2.10. MI_VPE_SetChannelParam

  • 描述

    设定VPE channel参数.

  • 语法

    MI_S32 MI_VPE_SetChannelParam (MI_VPE_CHANNEL VpeCh,MI_VPE_ChannelPara_t *pstVpeParam);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeParam 通道参数设置 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

  • 举例

    请参见MI_VPE_CreateChannel

  • 相关主题

    MI_VPE_GetChannelParam


2.11. MI_VPE_GetChannelParam

  • 描述

    获取VPE channel参数。

  • 语法

    MI_S32 MI_VPE_GetChannelParam (MI_VPE_CHANNEL VpeCh, MI_VPE_ChannelPara_t *pstVpeParam);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeParam 通道参数设置 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

  • 相关主题

    MI_VPE_SetChannelParam


2.12. MI_VPE_SetChannelCrop

  • 描述

    设定VPE channel crop window。

  • 语法

    MI_S32 MI_VPE_SetChannelCrop (MI_VPE_CHANNEL VpeCh, MI_SYS_WindowRect_t *pstCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstCropInfo 通道Crop Window参数设置 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    芯片 是否支持
    Pretzel 支持
    Macaron 不支持
    Pudding ChnPortMode > 0场景下支持
    Ispahan 不支持
    • Channel已经创建成功。Crop window的设定都是基于原始画面大小。

    • Pudding 芯片下,只有ChnPortMode 对应的 OutputPort 有 ChannelCrop 效果。 如: u32ChnPortMode = E_MI_VPE_ZOOM_LDC_PORT0; //output port0 from RDMA只有OutputPort0 存在 ChannelCrop 效果

  • 相关主题

    MI_VPE_GetChannelCrop


2.13. MI_VPE_GetChannelCrop

  • 描述

    获取VPE channel crop window。

  • 语法

    MI_S32 MI_VPE_GetChannelCrop(MI_VPE_CHANNEL VpeCh, MI_SYS_WindowRect_t *pstCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstCropInfo 通道Crop Window参数设置 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • Channel已经创建成功。
  • 相关主题

    MI_VPE_SetChannelCrop


2.14. MI_VPE_GetChannelRegionLuma

  • 描述

    获取VPE通道Luma直方图统计。

  • 语法

    MI_S32 MI_VPE_GetChannelRegionLuma (MI_VPE_CHANNEL VpeCh, MI_VPE_RegionInfo_t *pstRegionInfo, MI_U32 *pu32LumaData,MI_S32 s32MilliSec);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 取值范围:[0, MI_VPE_MAX_CHANNEL_NUM)。 输入
    pstRegionInfo 指定统计区域,及数量。 输入
    pu32LumaData 输出统计数据 输出
    s32MilliSec API等待的timeout,单位ms 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • 仅SAV538E/S, SAV638E/S,SAV838E/S芯片支持该API

    • Channel已经创建成功。


2.15. MI_VPE_SetChannelRotation

  • 描述

    设定VPE通道视频旋转类型.

  • 语法

    MI_S32 MI_VPE_SetChannelRotation (MI_VPE_CHANNEL VpeCh, MI_SYS_Rotate_e eType);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    eType 旋转角度设定 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    芯片 使用方式
    Pretzel 两个channel RunningMode分别用Top/Bottom配合, 该API用在Bottom channel上。
    Macaron 需要Sensor Mirror/flip 配合: Rot 90 + Sensor Mirror Rot 180 + Sensor Mirror/flip Rot 270 + Sensor Flip
    Pudding 单纯使用
    Ispahan 单纯使用
  • 举例

    Pretzel Rotation 使用方法如下:

    stVpeChannelInfo.eRunningMode = E_MI_VPE_RUN_REALTIME_TOP_MODE;
    stVpeChannelInfo.eBindSensorId = E_MI_VPE_SENSOR0;
    stVpeChannelInfo.bRotation = TRUE;
    STCHECKRESULT(MI_VPE_CreateChannel(vpechn_top, &stVpeChannelInfo));
    STCHECKRESULT(MI_VPE_StartChannel(vpechn_top));
    
    VpePort=0//only can use port0
    STCHECKRESULT(MI_VPE_SetPortMode(vpechn_top, VpePort, &stVpeMode));
    STCHECKRESULT(MI_VPE_EnablePort(vpechn_top, VpePort));
    
    stVpeChannelInfo.eRunningMode = E_MI_VPE_RUN_REALTIME_BOTTOM_MODE;
    stVpeChannelInfo.eBindSensorId = E_MI_VPE_SENSOR_INVALID;
    stVpeChannelInfo.bRotation = TRUE;
    STCHECKRESULT(MI_VPE_CreateChannel(vpechn_bot, &stVpeChannelInfo));
    STCHECKRESULT(MI_VPE_StartChannel(vpechn_bot));
    
    STCHECKRESULT(MI_VPE_SetChannelRotation(vpechn_bot, E_MI_SYS_ROTATE_90));
    
    VpePort=2//0~3
    STCHECKRESULT(MI_VPE_SetPortMode(vpechn_bot, VpePort, &stVpeMode));
    STCHECKRESULT(MI_VPE_EnablePort(vpechn_bot, VpePort));
    
    /*****************************/
    /*  call sys bind interface 
        Bind vpechn_top vpechn_bot*/
    /*****************************/
    
  • 相关主题

    MI_VPE_GetChannelRotation


2.16. MI_VPE_GetChannelRotation

  • 描述

    获取VPE通道视频旋转类型.

  • 语法

    MI_S32 MI_VPE_GetChannelRotation (MI_VPE_CHANNEL VpeCh,  MI_SYS_Rotate_e *pType);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    peType 旋转角度设定 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • Channel已经创建成功。
  • 相关主题

    MI_VPE_SetChannelRotation


2.17. MI_VPE_SetPortMode

  • 描述

    设定VPE端口模式.

  • 语法

    MI_S32 MI_VPE_SetPortMode(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort,
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    pstVpeMode VPE端口模式 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • Max width/height
    芯片 Port0 Port1 Port2 Port3 Port4 (IR) Port5 Port6 Port7
    Pretzel MaxWidth = 3840 MaxWidth = 2688 MaxWidth = 2688 MaxWidth = 3840 Scaling down ½ No support No support No support
    Macaron No Scaling MaxWidth = 2688 MaxWidth = 2688 No support No support No support No support No support
    Pudding MaxWidth = 3840 MaxWidth = 3840 MaxWidth = 3840 No Scaling Scaling down ½ No scaling No support No support
    Ispahan MaxWidth = 2688 MaxWidth = 2688 MaxWidth = 1920 MaxWidth = 1920 No support No support No support No support
    Tiramisu  MaxWidth:非yuv422 4608 Yuv422 8192 MaxWidth:非yuv422 4608 Yuv422 8192 MaxWidth = 4096 No Scaling Scaling down ½ MaxWidth = 4096 MaxWidth = 4096 MaxWidth = 4096
    Ikayaki MaxWidth:非Yuv422 1920 Yuv422 3840 No support No support MaxWidth = 1920 Scaling down ½ No support No support No support
    • Pixel Format
    芯片 Port0 Port1 Port2 Port3 Port4 (IR) Port5 Port6 Port7
    Pretzel YUV420 /YUV422 /ARGB8888/BGRA8888 同Port0 同Port0 同Port0 YUV420 NV12 No support No support No support
    Macaron YUV420 /YUV422 同Port0 同Port0 No support No support No support No support No support
    Pudding YUV420 /YUV422 /ARGB8888/BGRA8888/ABGR8888 同Port0 同Port0 YUV420 /YUV422 YUV420 NV12 同Port3 No support No support
    Ispahan YUV420 /YUV422 同Port0 同Port0 同Port0 No support No support No support No support
    Tiramisu  YUV420 /YUV422 /ARGB8888/BGRA8888/ABGR8888 同Port0 同Port0 YUV420 /YUV422 YUV420 NV12 同Port0 同Port0 同Port0
    Ikayaki YUV420/YUV422/ARGB8888/BGRA8888/ABGR8888 No support No support YUV420/YUV422 YUV420 NV12 No support No support No support
    • Bind type
    芯片 Port0 Port1 Port2 Port3 Port4 (IR) Port5 Port6 Port7
    Pretzel Frame mode Frame mode Frame mode Frame mode Frame mode No support No support No support
    Macaron Frame mode /Jpeg realtime Frame mode /H26x ring mode Frame mode No support No support No support No support No support
    Pudding Frame /JPEG ring /JPEG realtime 同Port0 同Port0 Frame mode Frame mode 同Port3 No support No support
    Ispahan Frame mode /JPEG realtime Frame mode /H26x ring mode Frame mode Realtime bind DIVP No support No support No support No support
    Tiramisu Frame /Jpeg ring /Jpeg realtime /h26x ring 同Port0 同Port0 Frame mode Frame mode 同Port0 同Port0 Realtime bind DIVP
    Ikayaki Frame mode/JPEG realtime No support No support Frame mode Frame mode No support No support No support
  • 相关主题

    MI_VPE_GetPortMode


2.18. MI_VPE_GetPortMode

  • 描述

    获取VPE端口模式.

  • 语法

    MI_S32 MI_VPE_GetPortMode (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_VPE_PortMode_t *pstVpeMode);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    pstVpeMode VPE端口模式 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 相关主题

    MI_VPE_SetPortMode


2.19. MI_VPE_SetPortCrop

  • 描述

    设定VPE output port crop window.

  • 语法

    MI_S32 MI_VPE_SetPortCrop (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t  *pstOutCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE Output port号。 输入
    *pstOutCropInfo VPE Output port crop window 设置 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    • Pretzel 各个port crop 如下:

      图2-2

      由于port1,2的Source是port0 的output:

      1. port0 enable,port1,2 的crop win \< port0 size,

      2. port0 disable, port1,2 的crop win \< Vpe input

    • Pudding 和 Ispahan的 port crop 如下:

      图2-3

      Macaron系列芯片没有上图Scaler0,其它一致。

      由于port2的Source是port1的output:

      1. port1 enable,port2 的crop win \< port1 size;

      2. port1 disable, port2 的crop win \< Vpe input.

  • 相关主题

    MI_VPE_GetPortCrop


2.20. MI_VPE_GetPortCrop

  • 描述

    获取VPE out port crop window设置参数。

  • 语法

    MI_S32 MI_VPE_GetPortCrop (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t  *pstOutCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE Output port号。 输入
    *pstOutCropInfo VPE Output port crop window 参数 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 相关主题

    MI_VPE_SetPortCrop


2.21. MI_VPE_SetPortShowPosition

  • 描述

    设置vpe output port 显示位置

  • 语法

    MI_S32 MI_VPE_SetPortShowPosition(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t *pstPortPositionInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    * pstPortPositionInfo 显示位置参数 输入
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    1. 在没有调用此API 的情况下, 默认是Show width/height = PortMode width/height显示。

    2. 需要在MI_VPE_SetPortMode后设置,没有show 画面的区域将填黑。

      PortMode width/height 和Show width/height 关系如下图

      图2-4

  • 相关主题

    MI_VPE_GetPortShowPosition


2.22. MI_VPE_GetPortShowPosition

  • 描述

    获取vpe output port 显示位置

  • 语法

    MI_S32 MI_VPE_GetPortShowPosition(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t *pstPortPositionInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    * pstPortPositionInfo 显示位置参数 输出
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 相关主题

    MI_VPE_SetPortShowPosition


2.23. MI_VPE_Alloc_IspDataBuf

  • 描述

    申请MI_ISP API Data Buffer

  • 语法

    MI_S32 MI_VPE_Alloc_IspDataBuf(MI_U32 u32Size,void **pUserVirAddr);
    
  • 参数

    参数名称 描述 输入/输出
    u32Size Alloc Buffer Size 输入
    **pUserVirAddr User Buffer 指针地址 输出
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    一个线程申请一块isp data buffer,避免线程间buffer共用,导致线程之间buffer 互踩

  • 举例

    #define  MI_ISP_MAX_DATA_SIZE  (80*1024)
    MI_VPE_Alloc_IspDataBuf(MI_ISP_MAX_DATA_SIZE, &pIspBuffer);
    MI_ISP_IQ_COLORTOGRAY_TYPE_t *pstColorToGray = (MI_ISP_IQ_COLORTOGRAY_TYPE_t *)pIspBuffer;
    MI_ISP_IQ_GetColorToGray( Channel, pstColorToGray);
    if(pstColorToGray->bEnable == SS_TRUE)
        pstColorToGray->bEnable = SS_FALSE;
    else
        pstColorToGray->bEnable = SS_TRUE;
    MI_ISP_IQ_SetColorToGray( Channel, pstColorToGray);
    
    MI_ISP_IQ_CONTRAST_TYPE_t  *pstContrast = (MI_ISP_IQ_CONTRAST_TYPE_t *)pIspBuffer;
    MI_ISP_IQ_GetContrast( Channel, pstContrast);
    MI_ISP_IQ_SetContrast( Channel, pstContrast);
    
    MI_VPE_Free_IspDataBuf(pIspBuffer)
    
  • 相关主题

    MI_VPE_Free_IspDataBuf


2.24. MI_VPE_Free_IspDataBuf

  • 描述

    释放MI_ISP API Data 申请的Buffer

  • 语法

    MI_S32 MI_VPE_Free_IspDataBuf(void *pUserBuf);
    
  • 参数

    参数名称 描述 输入/输出
    *pUserBuf 申请的Isp Api Data Buffer 指针 输入
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    MI_VPE_Alloc_IspDataBuf 成对出现

  • 举例

    MI_VPE_Alloc_IspDataBuf 举例

  • 相关主题

    MI_VPE_Alloc_IspDataBuf


2.25. MI_VPE_LDCBegViewConfig

  • 描述

    开始配置所有Ldc 窗口的bin 档

  • 语法

    MI_S32 MI_VPE_LDCBegViewConfig(MI_VPE_CHANNEL VpeCh);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    1. 仅Pudding 芯片支持LDC 功能, MI_VPE_ChannelAttr_t 中bEnLdc= TRUE,启用LDC

    2. MI_VPE_LDCEndViewConfig 成对出现。

    3. 在窗口数量发生变化时才需要使用此API, 如果只是单独更换其中某一个窗口属性不需要调用此api。

  • 举例

    MI_VPE_LDCBegViewConfig(vpechn);
    
    for(i=0; i<viewnum;i++)
    
    {
    
        MI_VPE_LDCSetViewConfig(vpechn, ldcBinBuffer[i], u32LdcBinSize[i]);
    
        free(ldcBinBuffer[i]);
    
    }
    
    MI_VPE_LDCEndViewConfig(vpechn);
    
  • 相关主题

    MI_VPE_LDCEndViewConfig


2.26. MI_VPE_LDCEndViewConfig

  • 描述

    结束配置所有Ldc 窗口的bin 档

  • 语法

    MI_S32 MI_VPE_LDCEndViewConfig(MI_VPE_CHANNEL VpeCh)
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    1. 仅Pudding 芯片支持LDC 功能, MI_VPE_ChannelAttr_t 中bEnLdc= TRUE,启用LDC

    2. MI_VPE_LDCBegViewConfig 成对出现。

    3. 在窗口数量发生变化时才需要使用此API, 如果只是单独更换其中某一个窗口不需要调用此api。

  • 举例

    MI_VPE_LDCBegViewConfig举例。

  • 相关主题

    MI_VPE_LDCBegViewConfig


2.27. MI_VPE_LDCSetViewConfig

  • 描述

    配置Ldc view窗口Config bin 档。

  • 语法

    MI_S32 MI_VPE_LDCSetViewConfig(MI_VPE_CHANNEL VpeCh, void *pConfigAddr, MI_U32 u32ConfigSize);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pConfigAddr Bin buffer 指针地址 输入
    u32ConfigSize Bin buffer size 输入
  • 返回值

    • 1 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    1. 仅Pudding 芯片支持LDC 功能, MI_VPE_ChannelAttr_t 中bEnLdc= TRUE,启用LDC

    2. 如果没有发生窗口数量变化, 只是改变某几个窗口bin buffer 时, 该api 可以单独使用;在窗口数量发生变化时,需要配合MI_VPE_LDCBegViewConfigMI_VPE_LDCEndViewConfig 使用。

      每一个config bin buffer 对应一个view 窗口的设置。

  • 举例

    MI_VPE_LDCBegViewConfig举例。

  • 相关主题

    MI_VPE_LDCBegViewConfig

    MI_VPE_LDCEndViewConfig


2.28. MI_VPE_SkipFrame

  • 描述

    设置跳过frame num。

  • 语法

    MI_S32 MI_VPE_SkipFrame(MI_VPE_CHANNEL VpeCh, MI_U32 u32FrameNum);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    u32FrameNum Frame 数量 输入
  • 返回值

    • 1, 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so


2.29. MI_VPE_InitDev

  • 描述

    初始化VPE设备。

  • 语法

    MI_S32 MI_VPE_InitDev(MI_VPE_InitParam_t *pstInitParam);
    
  • 参数

    参数名称 描述 输入/输出
    pstInitParam 设备初始化参数。 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a


2.30. MI_VPE_DeInitDev

  • 描述

    反初始化VPE设备。

  • 语法

    MI_S32 MI_VPE_DeInitDev(void);
    
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a


2.31. MI_VPE_CreateMultiChannelStitch

  • 描述

    创建多通道融合通道。

  • 语法

    MI_S32 MI_VPE_CreateMultiChannelStitch(MI_VPE_CHANNEL VpeCh, MI_VPE_MultiChannelStitchAttr_t *pstVpeChAttr);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstVpeChAttr VPE channel属性指针。 输入
  • 返回值

    • MI_OK 成功。

    • 非MI_OK 失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 举例

    图2-5

    /************************************************
    Step1:  init VIF Multi Dev
    *************************************************/
    MI_VIF_DevAttr_t stDevAttr;
    memset(&stDevAttr, 0x0, sizeof(MI_VIF_DevAttr_t));
    
    stDevAttr.eIntfMode = stPad0Info.eIntfMode;
    stDevAttr.eWorkMode = pstVifDevAttr->eWorkMode;
    stDevAttr.eHDRType = (MI_VIF_HDRType_e)pstVpeChnattr->eHdrType;
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
        stDevAttr.eClkEdge = stPad0Info.unIntfAttr.stBt656Attr.eClkEdge;
    else
        stDevAttr.eClkEdge = E_MI_VIF_CLK_EDGE_DOUBLE;
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_MIPI)
        stDevAttr.eDataSeq =stPad0Info.unIntfAttr.stMipiAttr.eDataYUVOrder;
    else
        stDevAttr.eDataSeq = E_MI_VIF_INPUT_DATA_YUYV;
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
        memcpy(&stDevAttr.stSyncAttr, &stPad0Info.unIntfAttr.stBt656Attr.stSyncAttr, sizeof(MI_VIF_SyncAttr_t));
    
    stDevAttr.eBitOrder = E_MI_VIF_BITORDER_NORMAL;
    stDevAttr.u32DevStitchMask = E_MI_VIF_DEVICE_ID0|E_MI_VIF_DEVICE_ID2;
    
    STCHECKRESULT(MI_VIF_SetDevAttr(vifDev, &stDevAttr));
    STCHECKRESULT(MI_VIF_EnableDev(vifDev));
    
    MI_VIF_ChnPortAttr_t stVifPortInfo;
    memset(&stVifPortInfo, 0, sizeof(MI_VIF_ChnPortAttr_t));
    stVifPortInfo.stCapRect.u16X = stSnrPlane0Info.stCapRect.u16X;
    stVifPortInfo.stCapRect.u16Y = stSnrPlane0Info.stCapRect.u16Y;
    stVifPortInfo.stCapRect.u16Width =  stSnrPlane0Info.stCapRect.u16Width;
    stVifPortInfo.stCapRect.u16Height = stSnrPlane0Info.stCapRect.u16Height;
    stVifPortInfo.stDestSize.u16Width = u32CapWidth;
    stVifPortInfo.stDestSize.u16Height = u32CapHeight;
    stVifPortInfo.ePixFormat = ePixFormat;
    
    if(stDevAttr.eIntfMode == E_MI_VIF_MODE_BT656)
    {
        stVifPortInfo.eFrameRate = E_MI_VIF_FRAMERATE_FULL;
        stVifPortInfo.eCapSel = E_MI_SYS_FIELDTYPE_BOTH;
        stVifPortInfo.eScanMode = E_MI_SYS_FRAME_SCAN_MODE_PROGRESSIVE;
    }
    STCHECKRESULT(MI_VIF_SetChnPortAttr(vifChn, vifPort, &stVifPortInfo));
    STCHECKRESULT(MI_VIF_EnableChnPort(vifChn, vifPort));
    
    /************************************************
    Step2:  init VPE (create one VPE)
    *************************************************/
    MI_VPE_MultiChannelStitchAttr_t stChannelVpeAttr;
    memset(&stChannelVpeAttr, 0, sizeof(MI_VPE_MultiChannelStitchAttr_t));
    
    stChannelVpeAttr.u16MaxW = u32CapWidth;
    stChannelVpeAttr.u16MaxH = u32CapHeight;
    stChannelVpeAttr.ePixFmt = ePixFormat;
    stChannelVpeAttr.eRunningMode = E_MI_VPE_RUN_CAM_MODE;
    stChannelVpeAttr.u32StitchedSensorBitmap = E_MI_VPE_SENSOR0|E_MI_VPE_SENSOR1;
    stChannelVpeAttr.bEnLdc = pstVpeChnattr->bEnLdc;
    stChannelVpeAttr.u32ChnPortMode = E_MI_VPE_ZOOM_LDC_MAX;
    stChannelVpeAttr.eHDRType = pstVpeChnattr->eHdrType;
    stChannelVpeAttr.u32MultiChannelNum = 2;
    stChannelVpeAttr.u32Sync3AType = E_MI_VPE_SYNC3A_AE|E_MI_VPE_SYNC3A_AWB|E_MI_VPE_SYNC3A_IQ;
    stChannelVpeAttr.bForceOutputBufBeforeLDC = 0;
    STCHECKRESULT(MI_VPE_CreateMultiChannelStitch(vpechn, &stChannelVpeAttr));
    
    //sensor0和sensor1的图像通过vif dev0 dev2 接收下来, 并通过vpe
    将两个sensor图像拼接融合成一张图像,融合效果由MI_VPE_LDCSetViewConfig 中的ldc bin 决定
    
  • 注意

    • MI_VPE_CreateChannel api使用上互斥

    • 必须u32ChnPortMode = E_MI_VPE_ZOOM_LDC_MAX。

    • bEnLdc=TRUE 即有融合效果, bEnLdc=FALSE只拼接不融合。

  • 相关主题

    MI_VPE_MultiChannelStitchAttr_t


2.32. MI_VPE_CallBackTask_Register

  • 描述

    向MI_VPE 注册回调接口。

  • 语法

    MI_S32 MI_VPE_CallBackTask_Register(MI_VPE_CallBackParam_t *pstCallBackParam);
    
  • 参数

    参数名称 描述 输入/输出
    pstCallBackParam 回调参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 注意

  • 举例

    MI_S32 _MI_ISP_vsync1(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
    
        return 0;
    }
    
    MI_S32 _MI_ISP_vsync2(MI_U64 u64Data)
    {
        DBG_ERR("DATA %llu \n", u64Data);
    
        return 0;
    }
    
    static MS_S32 _MI_VPE_testRegVpeCallback(void)
    {
        MI_VPE_CallBackParam_t stCallBackParam1;
        MI_VPE_CallBackParam_t stCallBackParam2;
    
        memset(&stCallBackParam1, 0x0, sizeof(MI_VPE_CallBackParam_t));
        memset(&stCallBackParam2, 0x0, sizeof(MI_VPE_CallBackParam_t));
    
        stCallBackParam1.eCallBackMode = E_MI_VPE_CALLBACK_ISR;
        stCallBackParam1. eIrqType = E_MI_VPE_IRQ_ISPVSYNC;
        stCallBackParam1.pfnCallBackFunc = _mi_ISP_vsync1;
        stCallBackParam1.u64Data = 12;
        MI_VPE_CallBackTask_Register(&stCallBackParam1);
    
        stCallBackParam2.eCallBackMode = E_MI_VPE_CALLBACK_ISR;
        stCallBackParam2. eIrqType = E_MI_VPE_IRQ_ISPVSYNC;
        stCallBackParam2.pfnCallBackFunc = _mi_ISP_vsync2;
        stCallBackParam2.u64Data = 23;
        MI_VPE_CallBackTask_Register(&stCallBackParam2);
    
        return 0;
    }
    
    static MS_S32 _mi_ldc_testUnRegVpeCallback(void)
    {
        MI_VPE_CallBackParam_t stCallBackParam1;
        MI_VPE_CallBackParam_t stCallBackParam2;
    
    memset(&stCallBackParam1, 0x0, sizeof(MI_VPE_CallBackParam_t));
        memset(&stCallBackParam2, 0x0, sizeof(MI_VPE_CallBackParam_t));
    
        stCallBackParam1.eCallBackMode = E_MI_VPE_CALLBACK_ISR;
        stCallBackParam1.eIrqType = E_MI_VPE_IRQ_ISPVSYNC;
        stCallBackParam1.pfnCallBackFunc = _mi_ISP_vsync1;
        stCallBackParam1.u64Data = 12;
        MI_VPE_CallBackTask_Unregister(&stCallBackParam1);
    
        stCallBackParam2.eCallBackMode = E_MI_VPE_CALLBACK_ISR;
        stCallBackParam2.eIrqType = E_MI_VPE_IRQ_ISPVSYNC;
        stCallBackParam2.pfnCallBackFunc = _mi_ISP_vsync2;
        stCallBackParam2.u64Data = 23;
        MI_VPE_CallBackTask_Unregister(&stCallBackParam2);
    
        return 0;
    }
    
  • 相关主题

    MI_VPE_CallBackTask_Unregister


2.33. MI_VPE_CallBackTask_Unregister

  • 描述

    向MI_VPE 反注册回调接口。

  • 语法

    MI_S32 MI_VPE_CallBackTask_Unregister(MI_VPE_CallBackParam_t *pstCallBackParam);
    
  • 参数

    参数名称 描述 输入/输出
    pstCallBackParam 回调参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 注意

  • 举例

    MI_VPE_CallBackTask_Register举例。

  • 相关主题

    MI_VPE_CallBackTask_Register


2.34. MI_VPE_LoadPortZoomTable

  • 描述

    端口载入Zoom table。

  • 语法

    MI_S32 MI_VPE_LoadPortZoomTable(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_VPE_ZoomTable_t *pZoomTable);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    pZoomTable Zoom Table参数 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 注意

    • zoom 运行过程中不能重复load table,需要先MI_VPE_StopPortZoom再重新载入table。

    • 使用zoom过程中,MI_VPE_SetPortCrop api 功能失效。

  • 相关主题

    MI_VPE_StartPortZoom

    MI_VPE_StopPortZoom


2.35. MI_VPE_StartPortZoom

  • 描述

    端口开始运行Zoom。

  • 语法

    MI_S32 MI_VPE_StartPortZoom (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_VPE_ZoomAttr_t *pstZoomAttr);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    pstZoomAttr 开始运行的zoom属性。 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 注意

    MI_VPE_StopPortZoom成对调用。

  • 举例

    X0 Y0 W0 H0 SensorId=0
    X1 Y1 W1 H1 SensorId=0
    X2 Y2 W2 H2 SensorId=1
    X3 Y3 W3 H3 SensorId=1

    u32FromEntryIndex 和 u32ToEntryIndex 为table中index0~3 任意一个。

    当u32FromEntryIndex != u32ToEntryIndex, 逐帧会分别应用从u32FromEntryIndex到u32ToEntryIndex的crop 参数。 当u32FromEntryIndex == u32ToEntryIndex, 会停在当前u32FromEntryIndex参数。

    当MI内部检测到下一个entry的sensorid 和当前sensor id 不一致时,当前帧做完后会将sensirid通知给sensor driver, 切换到对应sensor 上。

  • 相关主题

    MI_VPE_StopPortZoom


2.36. MI_VPE_StopPortZoom

  • 描述

    端口停止运行Zoom。

  • 语法

    MI_S32 MI_VPE_StopPortZoom (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 注意

    MI_VPE_StartPortZoom 成对调用。

  • 相关主题

    MI_VPE_StartPortZoom


2.37. MI_VPE_GetPortCurZoomAttr

  • 描述

    获取当前端口zoom 属性。

  • 语法

    MI_S32 MI_VPE_GetPortCurZoomAttr (MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_VPE_ZoomAttr_t *pstZoomAttr);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE port号。 输入
    pstZoomAttr 当前zoom 属性。 输出
  • 返回值

    • MI_OK成功。

    • 非MI_OK失败,参照错误码

  • 依赖

    • 头文件:mi_common.h、mi_vpe.h

    • 库文件:libmi_vpe.a

  • 相关主题

    MI_VPE_StartPortZoom

    MI_VPE_StopPortZoom


2.38. MI_VPE_EnableInputPort

  • 描述

    启用VPE 输入端口.

  • 语法

    MI_S32 MI_VPE_EnableInputPort(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort Vpe Port号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    使用前必须调用: MI_VPE_StartChannel start Channel

  • 相关主题

    MI_VPE_StartChannel

    MI_VPE_DisableInputPort


2.39. MI_VPE_DisableInputPort

  • 描述

    禁用VPE 输入端口.

  • 语法

    MI_S32 MI_VPE_DisableInputPort(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort Vpe Port号。 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    使用前必须调用: MI_VPE_StartChannel start Channel

  • 相关主题

    MI_VPE_StartChannel

    MI_VPE_EnableInputPort


2.40. MI_VPE_LDCSetBatchViewConfig

  • 描述

    批量配置Ldc view窗口Config bin 档。

  • 语法

    MI_S32 MI_VPE_LDCSetBatchViewConfig(MI_VPE_CHANNEL VpeCh, MI_VPE_LdcConfig_t *pstCfg, MI_U32 u32CfgNum);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    pstCfg Ldc Config的指针 输入
    u32CfgNum Ldc Config 的数量 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    1. 仅Pudding 芯片支持LDC 功能, MI_VPE_ChannelAttr_t 中bEnLdc= TRUE,启用LDC

    2. 如果在窗口数量发生变化或者设置的ldc 窗口配置需马上生效,可以调用该接口。

    3. 每一个config bin buffer 对应一个view 窗口的设置。

  • 举例

    MI_VPE_LdcConfig_t *pstLdcConfig =
        (MI_VPE_LdcConfig_t *)malloc(u32ViewNum * sizeof(MI_VPE_LdcConfig_t));
    
    for(i=0; i< u32ViewNum;i++)
    {
        pstLdcConfig[i].pCfgAddr = ldcBinBuffer[i]
        pstLdcConfig[i].u32CfgSize = u32LdcBinSize[i]
    }
    
    MI_VPE_LDCSetBatchViewConfig(vpechn, pstLdcConfig, viewnum);
    free(pstLdcConfig);
    

2.41. MI_VPE_SetInputportCrop

  • 描述

    设定VPE Input port crop window.

  • 语法

    MI_S32 MI_VPE_SetInputportCrop(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t *pstInCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE Input port号。 输入
    pstInCropInfo VPE Input port crop window 设置 输入
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 注意

    RunningMode = E_MI_VPE_RUN_REALTIME_MODE 时不支持此功能。

  • 相关主题

    MI_VPE_GetInputportCrop


2.42. MI_VPE_GetInputportCrop

  • 描述

    获取VPE Input port crop window设置参数.

  • 语法

    MI_S32 MI_VPE_GetInputportCrop(MI_VPE_CHANNEL VpeCh, MI_VPE_PORT VpePort, MI_SYS_WindowRect_t *pstInCropInfo);
    
  • 参数

    参数名称 描述 输入/输出
    VpeCh VPE channel号。 输入
    VpePort VPE Input port号。 输入
    pstInCropInfo VPE Input port crop window 设置 输出
  • 返回值

    • 0 成功。

    • 非0 失败,参照错误码

  • 需求

    • 头文件:mi_vpe.h

    • 库文件:libmi_vpe.a/libmi_vpe.so

  • 相关主题

    MI_VPE_SetInputportCrop


3. VPE 数据类型


3.1. 数据类型定义

VPE模块相关数据类型定义如下:

数据类型 定义
MI_VPE_CHANNEL 定义VPE channel的类型
MI_VPE_PORT 定义VPE port的类型
MI_VPE_RunningMode_e 定义VPE 运行模式
MI_VPE_SensorChannel_e 定义VPE 绑定sensor的ID
MI_VPE_ChnPortMode_e 定义Port的输出模式
MI_VPE_IspApiHeader_t 定义VPE传给ISP 数据头的信息
MI_VPE_ChannelAttr_t 定义 VPE channel 静态属性参数
MI_VPE_PqParam_t 定义VPE PQ种NR, EdgeGain, Contrast的设置
MI_VPE_HDRType_e 定义VPE HDR 开关模式
MI_VPE_3DNR_Level_e 定义3DNR 设置等级
MI_VPE_ChannelPara_t 定义 VPE channel动态属性参数
MI_VPE_RegionInfo_t 定义VPE通道区域统计信息
MI_VPE_PortMode_t 定义 VPE 端口模式
MI_VPE_IspInitPara_t 定义VPE ISP初始参数Buffer
MI_VPE_InitParam_t 定义VPE设备初始化参数
MI_VPE_SYNC3A_e 定义同步各通道3A 参数
MI_VPE_MultiChannelStitchAttr_t 定义多通道融合参数
MI_VPE_CALLBK_FUNC 定义回调函数类型
MI_VPE_CallBackMode_e 定义回调模式
MI_VPE_IrqType_e 定义硬件中断类型
MI_VPE_CallBackParam_t 定义回调参数
MI_VPE_PortSource_e 定义output port source类型
MI_VPE_OutputPortId_e 定义output port id
CHN_PORT_MODE 定义设置ChnPortMode算式
MI_VPE_ZoomEntry_t 定义Zoom单元条目类型
MI_VPE_ZoomTable_t 定义Zoom Table 类型
MI_VPE_ZoomAttr_t 定义Zoom 属性
MI_VPE_LdcConfig_t 定义LDC 的配置类型

3.2. MI_VPE_CHANNEL

  • 说明

    定义MI_VPE_CHANNEL类型。

  • 定义

    typedef MI_S32 MI_VPE_CHANNEL
    

3.3. MI_VPE_PORT

  • 说明

    定义MI_VPE_PORT类型。

  • 定义

    typedef MI_S32 MI_VPE_PORT
    

3.4. MI_VPE_RunningMode_e

  • 说明

    定义VPE工作在某种模式下。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_RUN_INVALID = 0x00,
    
        E_MI_VPE_RUN_DVR_MODE = 0x01,
    
        E_MI_VPE_RUN_CAM_TOP_MODE = 0x02,
    
        E_MI_VPE_RUN_CAM_BOTTOM_MODE = 0x04,
    
        E_MI_VPE_RUN_CAM_MODE =
    
        E_MI_VPE_RUN_CAM_TOP_MODE|E_MI_VPE_RUN_CAM_BOTTOM_MODE,
    
        E_MI_VPE_RUN_REALTIME_TOP_MODE = 0x08,
    
        E_MI_VPE_RUN_REALTIME_BOTTOM_MODE = 0x10,
    
        E_MI_VPE_RUN_REALTIME_MODE =
    
        E_MI_VPE_RUN_REALTIME_TOP_MODE |
        E_MI_VPE_RUN_REALTIME_BOTTOM_MODE,
    
        E_MI_VPE_RUNNING_MODE_MAX,
    
    } MI_VPE_RunningMode_e;
    
  • 注意事项

    E_MI_VPE_RUN_DVR_MODE:当输入是YUV格式时,ISP bypass, 不经过ISP处理。

    图3-1

    E_MI_VPE_RUN_CAM_MODE:当输入是Bayer格式时,且数据来自DRAM, ISP支持分时复用,例如多sensor 场景。

    图3-2

    E_MI_VPE_RUN_REALTIME_MODE:当输入是Bayer格式,VIF和ISP 之间硬件直连,ISP不支持分时复用, 只支持一个通道,例如单sensor场景。

    图3-3

    仅在Pretzel 芯片上支持Top/Bottom mode, 用在rotation场景,Top/Bottom是指ISP 与Scaler之间的连接关系。

    图3-4

    Top通道没有scaling 能力, Bottom通道实现Rotation,使用方法参考MI_VPE_SetChannelRotation举例。


3.5. MI_VPE_SensorChannel_e

  • 说明

    定义VPE与哪个sensor有绑定关系。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_SENSOR_INVALID = 0,
    
        E_MI_VPE_SENSOR0 = 0x1,
    
        E_MI_VPE_SENSOR1 = 0x2,
    
        E_MI_VPE_SENSOR2 = 0x4,
    
        E_MI_VPE_SENSOR3 = 0x8,
    
        E_MI_VPE_SENSOR4 = 0x10,
    
        E_MI_VPE_SENSOR5 = 0x20,
    
        E_MI_VPE_SENSOR6 = 0x40,
    
        E_MI_VPE_SENSOR7 = 0x80,
    
        E_MI_VPE_SENSOR_MAX
    
    }MI_VPE_SensorChannel_e;
    
    与硬件上sensor Pad接口位置对应
    
  • 注意事项

    当vpe前端不接sensor的时候使用E_MI_VPE_SENSOR_INVALID。

  • 相关数据类型及接口

    MI_VPE_ChannelAttr_t

    MI_VPE_MultiChannelStitchAttr_t


3.6. MI_VPE_ChnPortMode_e

  • 说明

    定义VPE channel中每一个port的输出效果模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_ZOOM_LDC_NULL,
    
        E_MI_VPE_ZOOM_LDC_PORT0 = 0X01,
    
        E_MI_VPE_ZOOM_LDC_PORT1 = 0X02,
    
        E_MI_VPE_ZOOM_LDC_PORT2 = 0X04,
    
        E_MI_VPE_ZOOM_LDC_MAX = E_MI_VPE_ZOOM_LDC_PORT0\|
    
        E_MI_VPE_ZOOM_LDC_PORT1\|E_MI_VPE_ZOOM_LDC_PORT2,
    
        }MI_VPE_ChnPortMode_e;
    
    port0,1,2 输出包含zoom/ldc 效果。
    
  • 注意事项

    参考MI_VPE_ChannelAttr_t中注意说明

  • 相关数据类型及接口

    MI_VPE_ChannelAttr_t


3.7. MI_VPE_IspApiHeader_t

  • 说明

    定义VPE传给ISP 的数据信息。

  • 定义

    typedef struct MI_VPE_IspApiHeader_s
    
    {
    
        MI_U32 u32HeadSize; //Size of MIIspApiHeader_t
    
        MI_U32 u32DataLen; //Data length;
    
        MI_U32 u32CtrlID; //Function ID
    
        MI_U32 u32Channel; //Isp channel number
    
        MI_S32 s32Ret; //Isp api retuen value
    
    } MI_VPE_IspApiHeader_t;
    
  • 相关数据类型及接口

    MI_VPE_IspApiData_t


3.8. MI_VPE_ChannelAttr_t

  • 说明

    定义 VPE channel静态属性。

  • 定义

    typedef struct MI_VPE_ChannelAttr_s
    
    {
    
        MI_U16 u16MaxW;
    
        MI_U16 u16MaxH;
    
        MI_SYS_PixelFormat_e ePixFmt;
    
        MI_VPE_SensorChannel_e eSensorBindId;
    
        MI_BOOL bNrEn;
    
        MI_BOOL bEdgeEn;
    
        MI_BOOL bEsEn;
    
        MI_BOOL bContrastEn;
    
        MI_BOOL bUvInvert;
    
        MI_BOOL bRotation;
    
        MI_VPE_RunningMode_e eRunningMode;
    
        MI_VPE_IspInitPara_t tIspInitPara;
    
        MI_BOOL bEnLdc;
    
        MI_U32 u32ChnPortMode;
    
    }MI_VPE_ChannelAttr_t;
    
  • 成员

    成员名称 描述
    u32MaxW 最大图像宽度。
    u32MaxH 最大图像高度。
    ePixFmt 输入像素格式。
    eSensorBindId 前端接sensor时设置绑定sensorid。
    bNrEn 去噪使能。
    bEdgeEn 锐化使能。
    bEsEn 边缘平滑使能。
    bContrastEn 对比度使能。
    bUvInvert UV反转使能。
    eRunningMode VPE运行模式。
    bRotation 旋转功能使能。
    tIspInitPara 初始isp参数。
    bEnLdc 使能ldc。
    u32ChnPortMode 当前channel下port 输出模式,通过CHN_PORT_MODE获取该参数。
  • 注意事项

    • 静态属性创建channel时设定,不可更改。

    • ePixFmt:当eRunningMode为E_MI_VPE_RUN_DVR_MODE时只支持E_MI_SYS_PIXEL_FRAME_YUV422_YUYV,其它的 Running mode pixel 由sensor转换得到, 如:

      ePixFormat =
      (MI_SYS_PixelFormat_e)RGB_BAYER_PIXEL(stSnrPlane0Info.ePixPrecision,
      stSnrPlane0Info.eBayerId);
      
    • eSensorBindId:vpe channel 前端sensor 插的sensor Pad 位置。当eRunningMode为E_MI_VPE_RUN_DVR_MODE时, eSensorBindId = E_MI_VPE_SENSOR_INVALID。

    • bNrEn/bEdgeEn/bEsEn/bContrastEn/bUvInvert 只有在MSR930 芯片上设置有效。

    • bRotation 只在Pretzel 系列芯片rotation场景设置, 参考MI_VPE_SetChannelRotation举例

    • Pudding 中u32ChnPortMode/ bEnLdc控制如下图所示

      图3-5

      1. 普通场景,u32ChnPortMode=0, ISP与所有SCL 之间realtime 连接, 硬件直连, 不消耗buffer.

      2. scl1,2是同一个source, scl0和scl½ 可以通过u32ChnPortMode 独立选择source是来自Realtime还是RDMA,一共是有4中组合, 例如:

        u32ChnPortMode = E_MI_VPE_ZOOM_LDC_PORT0; //port0 from RDMA

        u32ChnPortMode = E_MI_VPE_ZOOM_LDC_PORT1| E_MI_VPE_ZOOM_LDC_PORT2;//port1,2 from RDMA

        u32ChnPortMode = E_MI_VPE_ZOOM_LDC_NULL; // all port from realtime

        u32ChnPortMode = E_MI_VPE_ZOOM_LDC_PORT0|

        E_MI_VPE_ZOOM_LDC_PORT1| E_MI_VPE_ZOOM_LDC_PORT2;//all scl from RDMA

      3. bEnLdc==TRUE, RDMA buffer 来自LDC out, port3 from LDC,

      bEnLdc==FALSE, RDMA buffer 来自ZOOM out, port3 from ZOOM.

    • Tiramisu系列芯片u32ChnPortMode的设置比Pudding系列芯片多了一条yuv realtime source如下图,使用上需用CHN_PORT_MODE来获取参数,用法参考CHN_PORT_MODE的举例。

  • 相关数据类型及接口

    MI_VPE_RunningMode_e

    MI_VPE_SensorChannel_e

    MI_VPE_IspInitPara_t

    MI_VPE_ChnPortMode_e


3.9. MI_VPE_PqParam_t

  • 说明

    定义 VPE channel属性参数。

  • 定义

    typedef struct MI_VPE_ChannelPara_s
    {
        MI_U8 u8NrcSfStr; //0 ~ 255;
        MI_U8 u8NrcTfStr; //0 ~ 255
        MI_U8 u8NrySfStr; //0 ~ 255
        MI_U8 u8NryTfStr; //0 ~ 255
        MI_U8 u8NryBlendMotionTh; //0 ~ 15
        MI_U8 u8NryBlendStillTh; //0 ~ 15
        MI_U8 u8NryBlendMotionWei; //0 ~ 31
        MI_U8 u8NryBlendOtherWei; //0 ~ 31
        MI_U8 u8NryBlendStillWei; //0 ~ 31
        MI_U8 u8EdgeGain[6];//0~255
        MI_U8 u8Contrast;//0~255
    } MI_VPE_ChannelPara_t;
    
  • 成员

    成员名称 描述
    u8NrcSfStr 0~255, 空间域降彩噪强度
    u8NrcTfStr 0~255, 时间域降彩噪强度
    u8NrySfStr 0~255, 空间域降明度噪点强度
    u8NryTfStr 0~255, 时间域降明度噪点强度
    u8NryBlendMotionTh 0~15, 空间域明度降噪画面变动区侦测阀值
    u8NryBlendStillTh 0~15, 空间域明度降噪画面静止区侦测阀值
    u8NryBlendMotionWei 0~31, 画面变动区空间域降噪相对时域降噪的比重
    u8NryBlendOtherWei 0~31, 静止与变动区间空间域降噪相对时域的比重
    u8NryBlendStillWei 0~31, 画面静止区空间域降噪相对时域降噪的比重
    u8EdgeGain[6] 根據不同邊緣程度,做不同的銳化效果,index 0代表代表发丝、草地等细小纹理,越往大邊緣程度越大。
    u8Contrast 影响暗区和亮区调整幅度,值越大,暗区调整越明显,而亮度不會過曝
  • 注意事项

    BLEND_WEI 数值愈大空间域去噪点强度愈强,建议针对画面动态区设较强的值可达到较好的去噪点效果;针对静止区设定较弱的值,可保留较多细节。

  • 相关数据类型及接口

    MI_VPE_ChannelPara_t


3.10. MI_VPE_HDRType_e

  • 说明

    定义VPE是否开HDR,开HDR是使用哪种方式。

  • 定义

    typedef enum
    {
        E_MI_VPE_HDR_TYPE_OFF,
        E_MI_VPE_HDR_TYPE_VC,       //virtual channel mode HDR,vc0->long, vc1->short
        E_MI_VPE_HDR_TYPE_DOL,
        E_MI_VPE_HDR_TYPE_EMBEDDED, //compressed HDR mode
        E_MI_VPE_HDR_TYPE_LI,       //Line interlace HDR
        E_MI_VPE_HDR_TYPE_MAX
    } MI_VPE_HDRType_e
    
  • 注意事项

    具体使用哪一种HDR Type 可以通过MI_SNR_GetPadInfo 接口获取。

  • 相关数据类型及接口

    MI_VPE_ChannelPara_t


3.11. MI_VPE_3DNR_Level_e

  • 说明

    定义VPE开启3DNR 等级。

  • 定义

    typedef enu
    
    {
    
        E_MI_VPE_3DNR_LEVEL_OFF,
    
        E_MI_VPE_3DNR_LEVEL1,
    
        E_MI_VPE_3DNR_LEVEL2,
    
        E_MI_VPE_3DNR_LEVEL3,
    
        E_MI_VPE_3DNR_LEVEL4,
    
        E_MI_VPE_3DNR_LEVEL5,
    
        E_MI_VPE_3DNR_LEVEL6,
    
        E_MI_VPE_3DNR_LEVEL7,
    
        E_MI_VPE_3DNR_TYPE_NUM
    
     } MI_VPE_3DNR_Level_e;
    
  • 注意事项

    Create channel 后设置,为静态属性只能设置一次。

    有关3DNR等级,会导致部分3DNR API参数(NR3D_PARAM_t)无法使用,请参考下表。

  • 名称

    变量名称 LEVEL_OFF Level 1 ~ 3 Level 4 ~ 7
    u16MdThd X O O
    u16MdDiv X O O
    u8TfStr X O O
    u8TfStrEx X O O
    u16MdThdPre X X O
    u16MdGainPre X X O
    u8TfStrPre X X O
    u8TfStrExPre X X O
    u8MdThdByY[16] X O O
    u8MdDivByY[16] X O O
    u8M2SLut[16] X O O
    u8TfLut[16] X O O
    u8YSfStr O O O
    u8YSfBlendLut[16] X O O
    u8CSfStr O O O
    u8CSfExStr O O O
    u8CSfExBlendGain X O O
    u16CSfExBlendClip X O O
    u16ShpBlendLut[16] X O O
  • 相关数据类型及接口

    MI_VPE_ChannelPara_t

    MI_ISP_IQ_SetNR3D

    MI_ISP_IQ_GetNR3D

    MI_ISP_IQ_NR3D_TYPE_t

    NR3D_PARAM_t


3.12. MI_VPE_ChannelPara_t

  • 说明

    定义VPE开启3DNR 等级。

  • 定义

    typedef struct MI_VPE_ChannelPara_s
    
    {
    
    MI_VPE_PqParam_t      stPqParam; // only dvr use
    
    MI_VPE_HDRType_e      eHDRType;
    
    MI_VPE_3DNR_Level_e   e3DNRLevel;
    
        MI_BOOL                bMirror;
    
        MI_BOOL                bFlip;
    
    MI_BOOL        bWdrEn;    //Wdr on/off
    
        MI_BOOL                bEnLdc;
    
    } MI_VPE_ChannelPara_t;
    
  • 成员

    成员名称 描述
    stPqParam Pq参数设置
    eHDRType HDR 开关参数
    e3DNRLevel 3dnr 量级参数
    bMirror 使能Input Mirror
    bFlip 使能Input Flip
    bWdrEn 使能WDR
    bEnLdc 使能Ldc
  • 注意事项

    芯片 MAX e3DNRLevel 是否支持bMirror/ bFlip
    Pretzel E_MI_VPE_3DNR_LEVEL7 不支持
    Macaron E_MI_VPE_3DNR_LEVEL2 不支持
    Pudding E_MI_VPE_3DNR_LEVEL2 支持
    Ispahan E_MI_VPE_3DNR_LEVEL2 支持
    • 不同chip 支持的最大3dnr level如上表, 设置超过MAX, 内部自动采用MAX Level,Level越高3DNR 强度越强,消耗的buffer也会多一点。

    • 支持的eHDRType 可以通过MI_SNR_GetPadInfo 查询。

    • stPqParam 仅DVR mode 可用。

    • bMirror/ bFlip 支持芯片系列如上表, 预防某些Sensor不支持翻转。

  • 相关数据类型及接口

    MI_VPE_PqParam_t

    MI_VPE_HDRType_e

    MI_VPE_3DNR_Level_e


3.13. MI_VPE_RegionInfo_t

  • 说明

    定义VPE通道区域统计信息。

  • 定义

    typedef struct MI_VPE_RegionInfo_s
    
    {
    
        MI_VPE_Region_t *pstRegion; // region attribute
    
        MI_U32 u32RegionNum; // count of the region
    
    } MI_VPE_RegionInfo_t;
    
  • 成员

    成员名称 描述
    pstRegion 统计区域信息
    u32RegionNum 统计区域数量

3.14. MI_VPE_PortMode_t

  • 说明

    定义 VPE 端口模式。

  • 定义

    typedef struct MI_VPE_PortMode_s
    
    {
    
    MI_U32 u32Width; // Width of target image
    
    MI_U32 u32Height; // Height of target image
    
    MI_SYS_PixelFormat_e ePixelFormat; // Pixel format of target image
    
    MI_SYS_CompressMode_e eCompressMode; // Compression mode of the output
    
    }MI_VPE_PortMode_t;
    
  • 成员

    成员名称 描述
    u32Width 端口输出画面水平大小
    u32Height 端口输出画面竖直大小
    ePixelFormat 端口输出pixel format
    eCompressMode 端口输出压缩模式
  • 注意事项

    相关限制说明参考MI_VPE_SetPortMode注意说明。

  • 相关数据类型及接口

    MI_SYS_PixelFormat_e

    MI_SYS_CompressMode_e

    MI_VPE_SetPortMode


3.15. MI_VPE_IspInitPara_t

  • 说明

    定义VPE ISP初始参数Buffer。

  • 定义

    typedef struct MI_VPE_IspInitPara_s
    
    {
    
        MI_U32 u32Revision;
    
        MI_U32 u32Size;
    
        MI_U8 u8Data[64];
    
    }MI_VPE_IspInitPara_t;
    
  • 成员

    成员名称 描述
    u32Revision 版本
    u32Size Buffer size
    u8Data 数据
  • 举例

    #include <CusEarlyInit_para.h>
    
    MasterEarlyInitParam_t *pstEarlyInitParam = (MasterEarlyInitParam_t*) &stVpeChnAttr.tIspInitPara.u8Data[0];
    
    pstEarlyInitParam->u16SnrEarlyFps = pCameraBootSetting->u8SensorFrameRate;
    pstEarlyInitParam->u16SnrEarlyFlicker = pCameraBootSetting->u8AntiFlicker;
    pstEarlyInitParam->u32SnrEarlyShutter = pCameraBootSetting->u32shutter;
    pstEarlyInitParam->u32SnrEarlyGainX1024 = pCameraBootSetting->u32SensorGain;
    pstEarlyInitParam->u32SnrEarlyDGain = pCameraBootSetting->u32DigitalGain;
    pstEarlyInitParam->u16SnrEarlyAwbRGain = pCameraBootSetting->u16AWBRGain;
    pstEarlyInitParam->u16SnrEarlyAwbGGain = pCameraBootSetting->u16AWBGGain;
    pstEarlyInitParam->u16SnrEarlyAwbBGain = pCameraBootSetting->u16AWBBGain;
    
    stVpeChnAttr.tIspInitPara.u32Revision = EARLYINIT_PARAM_TYPE_MASTER;//branch or customer abbreviation
    stVpeChnAttr.tIspInitPara.u32Size = sizeof(MasterEarlyInitParam_t);
    
  • 相关数据类型及接口

    MI_VPE_ChannelAttr_t


3.16. MI_VPE_InitParam_t

  • 说明

    VPE设备初始化参数。

  • 定义

    typedef struct MI_VPE_InitParam_s
    
    {
    
        MI_U32 u32DevId;
    
        MI_U8 *u8Data;
    
    } MI_VPE_InitParam_t;
    
  • 成员

    成员名称 描述
    u32DevId 设备ID
    u8Data 数据指针buffer
  • 相关数据类型及接口

    MI_VPE_InitDev


3.17. MI_VPE_SYNC3A_e

  • 说明

    同步各通道3A 参数。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_SYNC3A_NONE = 0x00,
    
        E_MI_VPE_SYNC3A_AE = 0x01,
    
        E_MI_VPE_SYNC3A_AWB = 0x02,
    
        E_MI_VPE_SYNC3A_IQ = 0x04
    
    }MI_VPE_SYNC3A_e;
    
  • 成员

    成员名称 描述
    E_MI_VPE_SYNC3A_NONE 不同步3A
    E_MI_VPE_SYNC3A_AE 同步自动曝光
    E_MI_VPE_SYNC3A_AWB 同步自动白平衡
    E_MI_VPE_SYNC3A_IQ 同步图像质量参数设置
  • 相关数据类型及接口

    MI_VPE_MultiChannelStitchAttr_t


3.18. MI_VPE_MultiChannelStitchAttr_t

  • 说明

    多通道融合参数。

  • 定义

    typedef struct MI_VPE_MultiChannelStitchAttr_s
    
    {
    
        MI_U16 u16MaxW;
    
        MI_U16 u16MaxH;
    
        MI_SYS_PixelFormat_e ePixFmt;
    
        MI_VPE_HDRType_e eHDRType;
    
        MI_U32 u32StitchedSensorBitmap; //multi sensor bitmask by
    
        MI_VPE_SensorChannel_e
    
        MI_VPE_RunningMode_e eRunningMode;
    
        MI_VPE_IspInitPara_t tIspInitPara;
    
        MI_BOOL  bEnLdc;
    
        MI_U32   u32ChnPortMode;
    
        MI_U32  u32MultiChannelNum;
    
        MI_U32  u32Sync3AType; //sync 3a bitmask by MI_VPE_SYNC3A_e
    
        MI_BOOL bForceOutputBufBeforeLDC;
    
    }MI_VPE_MultiChannelStitchAttr_t;
    
  • 成员

    成员名称 描述
    u32MaxW 最大图像宽度。
    u32MaxH 最大图像高度。
    ePixFmt 输入像素格式。
    eHDRType HDR 类型参数
    u32StitchedSensorBitmap 前端接sensor时设置绑定sensorid。
    eRunningMode VPE运行模式。
    tIspInitPara 初始isp参数。
    bEnLdc 使能ldc。
    u32ChnPortMode 当前channel下port 输出模式,由MI_VPE_ChnPortMode_e成员赋值。
    u32MultiChannelNum 同时创建通道数量,各通道属性一致
    u32Sync3AType 各通道3a 同步设置
    bForceOutputBufBeforeLDC Port3 输出Ldc input数据
  • 相关数据类型及接口

    MI_VPE_CreateMultiChannelStitch


3.19. MI_VPE_CALLBK_FUNC

  • 说明

    定义回调函数类型。

  • 定义

    typedef MI_S32 (*MI_VPE_CALLBK_FUNC)(MI_U64 u64Data);
    
  • 相关数据类型及接口

    MI_VPE_CallBackParam_t


3.20. MI_VPE_CallBackMode_e

  • 说明

    定义回调模式。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_CALLBACK_ISR,
    
        E_MI_VPE_CALLBACK_MAX,
    
    } MI_VPE_CallBackMode_e;
    
  • 成员

    成员名称 描述
    E_MI_VPE_CALLBACK_ISR 硬件中断模式回调
    E_MI_VPE_CALLBACK_MAX 回调模式最大值
  • 注意事项

    目前只支持ISR 回调模式。

  • 相关数据类型及接口

    MI_VPE_CallBackParam_t


3.21. MI_VPE_IrqType_e

  • 说明

    定义硬件中断类型

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_IRQ_ISPVSYNC,
    
        E_MI_VPE_IRQ_ISPFRAMEDONE,
    
        E_MI_VPE_IRQ_MAX,
    
    } MI_VPE_IrqType_e;
    
  • 成员

    成员名称 描述
    E_MI_VPE_IRQ_ISPVSYNC ISP Vsync 中断类型
    E_MI_VPE_IRQ_ISPFRAMEDONE ISP Frame done 中断类型
  • 注意事项

    • E_MI_VPE_IRQ_ISPVSYNC: 每一帧第一个pixel的信号

    • E_MI_VPE_IRQ_ISPFRAMEDONE:isp 写出每一张结束的信号, 当MI_VPE port3 打开, 或者开LDC时,该硬件中断就会打开。

  • 相关数据类型及接口

    MI_VPE_CallBackParam_t


3.22. MI_VPE_CallBackParam_t

  • 说明

    定义回调参数

  • 定义

    typedef struct MI_VPE_CallBackParam_s
    
    {
    
        MI_VPE_CallBackMode_e eCallBackMode;
    
        MI_VPE_IrqType_e  eIrqType;
    
        MI_VPE_CALLBK_FUNC  pfnCallBackFunc;
    
        MI_U64    u64Data;
    
    } MI_VPE_CallBackParam_t;
    
  • 成员

    成员名称 描述
    eCallBackMode Callback mode
    eIrqType Hardware interrupt type
    pfnCallBackFunc 回调函数
    u64Data 回调函数参数
  • 相关数据类型及接口

    MI_VPE_CallBackTask_Register

    MI_VPE_CallBackTask_Unregister


3.23. MI_VPE_PortSource_e

  • 说明

    Output Port 的source 选择。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_PORTSRC_FRAME = 0X0,
    
        E_MI_VPE_PORTSRC_YUV_REALTIME = 0x01,
    
        E_MI_VPE_PORTSRC_BAYER_REALTIME = 0x02,
    
        E_MI_VPE_PORTSRC_MAX = 0xFF,
    
    }MI_VPE_PortSource_e;
    
  • 成员

    成员名称 描述
    E_MI_VPE_PORTSRC_FRAME Source 从frame buffer 来
    E_MI_VPE_PORTSRC_YUV_REALTIME Source 从yuv realtime来,input port2
    E_MI_VPE_PORTSRC_BAYER_REALTIME Source 从bayer realtime来, input port0
    E_MI_VPE_PORTSRC_MAX Source的最大数量
  • 相关数据类型及接口

    CHN_PORT_MODE


3.24. MI_VPE_OutputPortId_e

  • 说明

    定义Output Port Id。

  • 定义

    typedef enum
    
    {
    
        E_MI_VPE_OUTPUT_PORT0 = 0X01,//scl0
    
        E_MI_VPE_OUTPUT_PORT1 = 0X02,//scl1
    
        E_MI_VPE_OUTPUT_PORT2 = 0X04,//scl2
    
        E_MI_VPE_OUTPUT_PORT3 = 0X08,//isp dma/ldc
    
        E_MI_VPE_OUTPUT_PORT4 = 0X10,//ir port
    
        E_MI_VPE_OUTPUT_PORT5 = 0X20,//scl3
    
        E_MI_VPE_OUTPUT_PORT6 = 0X40,//scl4
    
        E_MI_VPE_OUTPUT_PORT7 = 0X80,//virtual port only src from bayer realtime
    
        E_MI_VPE_PORT_ALL = 0xFF
    
    }MI_VPE_OutputPortId_e;
    
  • 相关数据类型及接口

    CHN_PORT_MODE


3.25. CHN_PORT_MODE

  • 说明

    定义设置ChnPortMode算式。

  • 定义

    #define CHN_PORT_MODE(PortSrc, PortId) (PortId <<(8* PortSrc))
    u32ChnPortMode 按照byte 分成4部分
    bit0~7   E_MI_VPE_PORTSRC_FRAME           //RDMA 路径
    bit8~15  E_MI_VPE_PORTSRC_YUV_REALTIME   //input port2 路径
    bit16~23 E_MI_VPE_PORTSRC_BAYER_REALTIME  //input port0 路径
    bit24~31 invalid
    
  • 注意事项

    • output port¾/7 的source 固定为input port0不可选。

    • u32ChnPortMode=0, 或者没有选择port的source, 默认port sourc是BAYER_REALTIME。

  • 举例

    port0/1 source 为BAYER_REALTIME,port2 source为YUV_REALTIME,port5/6 source为FRAME。
    u32ChnPortMode = 
    CHN_PORT_MODE(E_MI_VPE_PORTSRC_BAYER_REALTIME, E_MI_VPE_OUTPUT_PORT0|E_MI_VPE_OUTPUT_PORT1)
    | CHN_PORT_MODE(E_MI_VPE_PORTSRC_YUV_REALTIME , E_MI_VPE_OUTPUT_PORT2)
    | CHN_PORT_MODE(E_MI_VPE_PORTSRC_FRAME , 
    E_MI_VPE_OUTPUT_PORT5| E_MI_VPE_OUTPUT_PORT6);
    
  • 相关数据类型及接口

    MI_VPE_ChannelAttr_t


3.26. MI_VPE_ZoomEntry_t

  • 说明

    定义Zoom单元条目类型。

  • 定义

    typedef struct MI_VPE_ZoomEntry_s
    
    {
    
        MI_SYS_WindowRect_t stCropWin;
    
        MI_U8 u8ZoomSensorId;
    
    } MI_VPE_ZoomEntry_t;
    
  • 成员

    成员名称 描述
    stCropWin Crop位置参数
    u8ZoomSensorId Crop 参数对应的sensor Id
  • 注意事项

    u8ZoomSensorId和sensor driver中pCus_sensor_GetCurSwtichSensorId回调函数回传值对应。

  • 相关数据类型及接口

    MI_VPE_LoadPortZoomTable

    MI_VPE_ZoomTable_t


3.27. MI_VPE_ZoomTable_t

  • 说明

    定义Zoom Table 类型。

  • 定义

    typedef struct MI_VPE_ZoomTable_s
    
    {
    
        MI_U32 u32EntryNum;
    
        MI_VPE_ZoomEntry_t *pVirTableAddr;
    
    } MI_VPE_ZoomTable_t;
    
  • 成员

成员名称 描述
u32EntryNum Zoom Table 中包含条目数量
pVirTableAddr Zoom Table Buffer Pointer

3.28. MI_VPE_ZoomAttr_t

  • 说明

    定义Zoom 属性。

  • 定义

    typedef struct MI_VPE_ZoomAttr_s
    
    {
    
        MI_U32  u32FromEntryIndex;
    
        MI_U32  u32ToEntryIndex;
    
        MI_U32  u32CurEntryIndex;
    
    } MI_VPE_ZoomAttr_t;
    
  • 成员

    成员名称 描述
    u32FromEntryIndex 开始运行Zoom的条目索引
    u32ToEntryIndex 结束运行Zoom 的条目索引
    u32CurEntryIndex 当前Zoom 位置的索引
  • 相关数据类型及接口

    MI_VPE_StartPortZoom

    MI_VPE_GetPortCurZoomAttr


3.29. MI_VPE_LdcConfig_t

  • 说明

    定义LDC 配置类型。

  • 定义

    typedef struct MI_VPE_LdcConfig_s
    {
        void *pCfgAddr;
        MI_U32 u32CfgSize;
    } MI_VPE_LdcConfig_t;
    
  • 成员

    成员名称 描述
    pCfgAddr 配置的地址
    u32CfgSize 配置的大小
  • 相关数据类型及接口

    MI_VPE_LDCSetBatchViewConfig


4. 错误码

VPE API 错误码如表4-1所示:

表4-1 VPE API错误码

错误代码 宏定义 描述
0xA0078001 MI_ERR_VPE_INVALID_CHNID Chanel 通道号无效
0xA0078002 MI_ERR_VPE_INVALID_PORITD Port 端口号无效
0xA0078003 MI_ERR_VPE_ILLEGAL_PARAM Chanel 参数设置无效
0xA0078004 MI_ERR_VPE_EXIST Chanel port已创建
0xA0078005 MI_ERR_VPE_UNEXIST Chanel port未创建
0xA0078006 MI_ERR_VPE_NULL_PTR 输入参数空指针错误
0xA0078008 MI_ERR_VPE_NOT_SUPPORT 操作不支持
0xA0078009 MI_ERR_VPE_NOT_PERM 操作不允许
0xA007800C MI_ERR_VPE_NOMEM 分配内存失败
0xA007800D MI_ERR_VPE_NOBUF 分配BUF池失败
0xA007800E MI_ERR_VPE_BUF_EMPTY 图像队列为空
0xA0078010 MI_ERR_VPE_NOTREADY Chanel 系统未初始化
0xA0078012 MI_ERR_VPE_BUSY Chanel 系统忙