6.3. API参考

该功能模块为用户提供以下API:


6.3.1. CVI_VPSS_CreateGrp

【描述】

创建一个VPSS GROUP

【语法】

CVI_S32 CVI_VPSS_CreateGrp(VPSS_GRP VpssGrp, const VPSS_GRP_ATTR_S *pstGrpAttr);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstGrpAttr

VPSS GROUP 属性指针。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • 使用之前要先创建 VPSS_GRP_ATTR_S

【举例】

VPSS_GRP_ATTR_S stVpssGrpAttr;
VPSS_CHN VpssChn = VPSS_CHN0;
CVI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM] = {0};
VPSS_CHN_ATTR_S astVpssChnAttr[VPSS_MAX_PHY_CHN_NUM];
CVI_S32 s32Ret = CVI_SUCCESS;
VPSS_CROP_INFO_S pstCropInfo;

stVpssGrpAttr.stFrameRate.s32SrcFrameRate = -1;
stVpssGrpAttr.stFrameRate.s32DstFrameRate = -1;
stVpssGrpAttr.enPixelFormat = PIXEL_FORMAT_YUV_PLANAR_420;
stVpssGrpAttr.u32MaxW = stSize.u32Width;
stVpssGrpAttr.u32MaxH = stSize.u32Height;

astVpssChnAttr[VpssChn].u32Width = 800;
astVpssChnAttr[VpssChn].u32Height = 600;
astVpssChnAttr[VpssChn].enChnMode = VPSS_CHN_MODE_USER;
astVpssChnAttr[VpssChn].enVideoFormat = VIDEO_FORMAT_LINEAR;
astVpssChnAttr[VpssChn].enPixelFormat = PIXEL_FORMAT_BGR_888_PLANAR;
astVpssChnAttr[VpssChn].stFrameRate.s32SrcFrameRate = 30;
astVpssChnAttr[VpssChn].stFrameRate.s32DstFrameRate = 30;
astVpssChnAttr[VpssChn].u32Depth = 0;
astVpssChnAttr[VpssChn].bMirror = CVI_FALSE;
astVpssChnAttr[VpssChn].bFlip = CVI_FALSE;
astVpssChnAttr[VpssChn].stAspectRatio.enMode = ASPECT_RATIO_NONE;

/*start vpss*/
VPSS_CHN VpssChn;
s32Ret = CVI_VPSS_CreateGrp(0, &stVpssGrpAttr);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_CreateGrp failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_SetChnAttr(0, 0, &astVpssChnAttr[0]);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_SetChnAttr failed with %#x\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_EnableChn(0, 0);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_EnableChn failed with %#x\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_StartGrp(0);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_StartGrp failed with %#x\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_GetGrpCrop(0, &pstCropInfo);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_ GetGrpCrop failed with %#x\n", s32Ret);
  return CVI_FAILURE;
}

pstCropInfo.stCropRect.s32X = 0;
pstCropInfo.stCropRect.s32Y = 0;
pstCropInfo.stCropRect.u32Width = 600;
pstCropInfo.stCropRect.u32Height = 600;

s32Ret = CVI_VPSS_SetGrpCrop(0, &pstCropInfo);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_ SetGrpCrop failed with %#x\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_DisableChn(0, 0);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_StopGrp(VpssGrp);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

s32Ret = CVI_VPSS_DestroyGrp(VpssGrp);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

【相关主题】


6.3.2. CVI_VPSS_DestroyGrp

【描述】

销毁一个VPSS GROUP

【语法】

CVI_S32 CVI_VPSS_DestroyGrp (VPSS_GRP VpssGrp);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • 调用此接口之前,必须先调用CVI_VPSS_StopGrp 禁用此 GROUP

  • 该函数会释放掉该grp下的所有vb_jobs

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.3. CVI_VPSS_GetGrpAttr

【描述】

获取 VPSS GROUP 属性.

【语法】

CVI_S32 CVI_VPSS_GetGrpAttr (VPSS_GRP VpssGrp, VPSS_GRP_ATTR_S *pstGrpAttr);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstGrpAttr

VPSS GROUP 属性指针。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • GROUP 属性必须合法,其中部分静态属性不可动态设置,具体请参见VPSS_GRP_ATTR_S

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.4. CVI_VPSS_SetGrpAttr

【描述】

设置VPSS GROUP 属性.

【语法】

CVI_S32 CVI_VPSS_SetGrpAttr (VPSS_GRP VpssGrp, const VPSS_GRP_ATTR_S *pstGrpAttr);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstGrpAttr

VPSS GROUP 属性指针。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • GROUP 属性必须合法,其中部分静态属性不可动态设置,具体请参见VPSS_GRP_ATTR_S

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.5. CVI_VPSS_StartGrp

【描述】

启用VPSS GROUP.

【语法】

CVI_S32 CVI_VPSS_StartGrp (VPSS_GRP VpssGrp);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 重复调用该函数设置同一个组返回成功

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.6. CVI_VPSS_StopGrp

【描述】

禁用VPSS GROUP.

【语法】

CVI_S32 CVI_VPSS_StopGrp (VPSS_GRP VpssGrp);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建,不然会返回失败

  • 重复禁用同一 VPSS GROUP 返回成功

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.7. CVI_VPSS_ResetGrp

【描述】

复位VPSS GROUP.

【语法】

CVI_S32 CVI_VPSS_ResetGrp (VPSS_GRP VpssGrp);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

Group必须已经创建

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.8. CVI_VPSS_GetGrpProcAmpCtrl

【描述】

获取一个 VPSS GROUP 颜色控制功能描述.

【语法】

CVI_S32 CVI_VPSS_GetGrpProcAmpCtrl(VPSS_GRP VpssGrp, PROC_AMP_E type, PROC_AMP_CTRL_S *ctrl);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

type

Proc Amp(颜色控制)种类

输入

ctrl

定义ProcAmp的特定,包含min, max, step, default等

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

【举例】

PROC_AMP_CTRL_S stAmpCtrl;
CVI_S32 tmp;

  if (CVI_VPSS_GetGrpProcAmp(0, PROC_AMP_BRIGHTNESS, &tmp) != CVI_SUCCESS) {
    CVI_TRACE_LOG(CVI_DBG_ERR, "CVI_VPSS_GetGrpProcAmp NG on grp0!\n");
    return CVI_FAILURE;
  }

  if (CVI_VPSS_GetGrpProcAmpCtrl(0, PROC_AMP_BRIGHTNESS, &stAmpCtrl) != CVI_SUCCESS) {
    CVI_TRACE_LOG(CVI_DBG_ERR, "CVI_VPSS_GetGrpProcAmpCtrl NG on grp0!\n");
    return CVI_FAILURE;
  }

  if (CVI_VPSS_SetGrpProcAmp(0, PROC_AMP_BRIGHTNESS, stAmpCtrl.maximum) != CVI_SUCCESS) {
    CVI_TRACE_LOG(CVI_DBG_ERR, "CVI_VPSS_SetGrpProcAmp NG on grp0!\n");
    return CVI_FAILURE;
  }

【相关主题】


6.3.9. CVI_VPSS_GetGrpProcAmp

【描述】

获取一个 VPSS GROUP的颜色控制属性.

【语法】

CVI_S32 CVI_VPSS_GetGrpProcAmp(VPSS_GRP VpssGrp, PROC_AMP_E type, CVI_S32 *value);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

type

Proc Amp(颜色控制)种类

输入

value

ProcAmp的设定

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

无。

【举例】

请参见 CVI_VPSS_GetGrpProcAmpCtrl

【相关主题】


6.3.10. CVI_VPSS_SetGrpProcAmp

【描述】

设置一个 VPSS GROUP的颜色控制属性.

【语法】

CVI_S32 CVI_VPSS_SetGrpProcAmp(VPSS_GRP VpssGrp, PROC_AMP_E type, const CVI_S32 value);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

type

ProcAmp(颜色控制)种类

输入

value

ProcAmp的设定

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

无。

【举例】

请参见 CVI_VPSS_GetGrpProcAmpCtrl

【相关主题】


6.3.11. CVI_VPSS_SetGrpParamfromBin

【描述】

根据Bin设置一个 VPSS GROUP的属性.

【语法】

CVI_S32 CVI_VPSS_SetGrpParamfromBin(VPSS_GRP VpssGrp, CVI_U8 scene);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

scene

所欲套用的VPSS输入 Bin场景设定

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • 若使用新的PQ bin,Group必须已经创建

  • 若PQ bin不存在,则使用默认参数

  • 目前仅支持套用ProcAmp(Brightness, Contrast, Hue, Saturation)的设定

【举例】

VPSS_GRP_ATTR_S stVpssGrpAttr;
VPSS_CHN VpssChn = VPSS_CHN0;
CVI_BOOL abChnEnable[VPSS_MAX_PHY_CHN_NUM] = {0};
VPSS_CHN_ATTR_S astVpssChnAttr[VPSS_MAX_PHY_CHN_NUM];
CVI_S32 s32Ret = CVI_SUCCESS;
VPSS_CROP_INFO_S pstCropInfo;

stVpssGrpAttr.stFrameRate.s32SrcFrameRate = -1;
stVpssGrpAttr.stFrameRate.s32DstFrameRate = -1;
stVpssGrpAttr.enPixelFormat = PIXEL_FORMAT_YUV_PLANAR_420;
stVpssGrpAttr.u32MaxW = stSize.u32Width;
stVpssGrpAttr.u32MaxH = stSize.u32Height;

astVpssChnAttr[VpssChn].u32Width = 800;
astVpssChnAttr[VpssChn].u32Height = 600;
astVpssChnAttr[VpssChn].enChnMode = VPSS_CHN_MODE_USER;
astVpssChnAttr[VpssChn].enVideoFormat = VIDEO_FORMAT_LINEAR;
astVpssChnAttr[VpssChn].enPixelFormat = PIXEL_FORMAT_BGR_888_PLANAR;
astVpssChnAttr[VpssChn].stFrameRate.s32SrcFrameRate = 30;
astVpssChnAttr[VpssChn].stFrameRate.s32DstFrameRate = 30;
astVpssChnAttr[VpssChn].u32Depth = 0;
astVpssChnAttr[VpssChn].bMirror = CVI_FALSE;
astVpssChnAttr[VpssChn].bFlip = CVI_FALSE;
astVpssChnAttr[VpssChn].stAspectRatio.enMode = ASPECT_RATIO_NONE;

/*start vpss*/
VPSS_CHN VpssChn;
s32Ret = CVI_VPSS_CreateGrp(0, &stVpssGrpAttr);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_CreateGrp failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

/*vpss grp0套用场景0*/
s32Ret = CVI_VPSS_SetGrpParamfromBin(0, 0);
if (s32Ret != CVI_SUCCESS) {
  SAMPLE_PRT("CVI_VPSS_SetGrpParamfromBin failed with %#x!\n", s32Ret);
  return CVI_FAILURE;
}

【相关主题】


6.3.12. CVI_VPSS_GetChnAttr

【描述】

获取 VPSS 通道属性.

【语法】

CVI_S32 CVI_VPSS_GetChnAttr (VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VPSS_CHN_ATTR_S *pstChnAttr)

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_PHY_CHN_NUM)

输入

pstChnAttr

VPSS 通道属性

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

Group必须已经创建

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.13. CVI_VPSS_SetChnAttr

【描述】

设置 VPSS 通道属性.

【语法】

CVI_S32 CVI_VPSS_SetChnAttr (VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VPSS_CHN_ATTR_S *pstChnAttr)

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_PHY_CHN_NUM)

输入

pstChnAttr

VPSS 通道属性

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

Group必须已经创建

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.14. CVI_VPSS_EnableChn

【描述】

启用 VPSS 通道.

【语法】

CVI_S32 CVI_VPSS_EnableChn(VPSS_GRP VpssGrp, VPSS_CHN VpssChn);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_PHY_CHN_NUM)

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 多次使能返回成功

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.15. CVI_VPSS_DisableChn

【描述】

禁用 VPSS 通道.

【语法】

CVI_S32 CVI_VPSS_DisableChn (VPSS_GRP VpssGrp, VPSS_CHN VpssChn)

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号。

取值范围:[0, VPSS_MAX_PHY_CHN_NUM)。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 重复禁用返回成功

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.16. CVI_VPSS_SetGrpCrop

【描述】

设置 VPSS CROP 功能属性.

【语法】

CVI_S32 CVI_VPSS_SetGrpCrop (VPSS_GRP VpssGrp, const VPSS_CROP_INFO_S *pstCropInfo);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstCropInfo

CROP 功能参数。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • CROP区域尺寸不能小于VPSS最小尺寸,不能超过最大尺寸,否则返回失败

  • Online不支持group裁剪

  • 开启DIS情况下,本设置无效

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.17. CVI_VPSS_GetGrpCrop

【描述】

获取 VPSS CROP 功能属性.

【语法】

CVI_S32 CVI_VPSS_GetGrpCrop (VPSS_GRP VpssGrp, VPSS_CROP_INFO_S *pstCropInfo);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstCropInfo

CROP 功能参数。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

Group必须已经创建

【举例】

请参见 CVI_VPSS_CreateGrp

【相关主题】

CVI_VPSS_CreateGrp


6.3.18. CVI_VPSS_SendFrame

【描述】

用户向 VPSS 发送数据

【语法】

CVI_S32 CVI_VPSS_SendFrame (VPSS_GRP VpssGrp, const VIDEO_FRAME_INFO_S *pstVideoFrame,

CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

pstVideoFrame

待发送的图像信息。具体描述请参见系统控制章节。

输入

s32MilliSec

目前版本暂未用到。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建并且已经启动,不然会返回失败

【举例】

【相关主题】


6.3.19. CVI_VPSS_GetChnFrame

【描述】

用户从通道获取一帧处理完成的图像

【语法】

CVI_S32 CVI_VPSS_GetChnFrame(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VIDEO_FRAME_INFO_S *pstFrameInfo, CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

pstVideoFrame

待发送的图像信息。具体描述请参见“系统控制”章节。

输出

s32MilliSec

超时时间。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 该函数将获得的图像信息保存在pstvideoFrame里面,并包含了图像的虚拟地址和物理地址

【举例】

VIDEO_FRAME_INFO_S pstVideoFrame;
FILE *fp;
size_t image_size;
unsigned char ptr[image_size];
int count = 0;

CVI_VPSS_GetChnFrame(0, 0, &pstVideoFrame, 5000);
image_size = pstVideoFrame.stVFrame.u32Width * pstVideoFrame.stVFrame.u32Height * 3;
pstVideoFrame.
stVFrame.u64VirAddr[i] = CVI_SYS_Mmap(pstVideoFrame -> stVFrame .u64PhyAddr[0], image_size);
for (int i = 0; i < 3; i++) {
  memcpy(&ptr[count], (const CVI_VOID *)pstVideoFrame.stVFrame.u64VirAddr[i], pstVideoFrame.stVFrame.u32Length[i]);
  count += pstVideoFrame.stVFrame.u32Length[i];
}
fp = fopen("/tmp/dump.bin", "w");
if (fp == CVI_NULL) {
  CVI_TRACE_VPSS(CVI_DBG_ERR, "open data file error\n");
  return CVI_FAILURE;
}
fwrite(ptr, image_size, 1, fp);
fclose(fp);
CVI_SYS_Munmap(pstVideoFrame.
stVFrame.u64VirAddr[i], image_size);
if (CVI_VPSS_ReleaseChnFrame(0, 0, &pstVideoFrame) != 0)
  SAMPLE_PRT("CVI_VI_ReleaseChnFrame NG\n");

【相关主题】

CVI_VPSS_ReleaseChnFrame


6.3.20. CVI_VPSS_SendChnFrame

【描述】

用户向VPSS指定通道数据。可藉此来达到画面拼接。

【语法】

CVI_S32 CVI_VPSS_SendChnFrame (VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VIDEO_FRAME_INFO_S *pstVideoFrame, CVI_S32 s32MilliSec);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

pstVideoFrame

待发送的图像信息。具体 描述请参见“系统控制”章节

输入

s32MilliSec

目前版本暂未用到

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group/Chn必须已经创建

【举例】

【相关主题】


6.3.21. CVI_VPSS_ReleaseChnFrame

【描述】

用户释放一帧通道处理完成的图像

【语法】

CVI_S32 CVI_VPSS_ReleaseChnFrame (VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VIDEO_FRAME_INFO_S *pstFrameInfo);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

pstVideoFrame

待发送的图像信息。具体描述请参见“系统控制”章节。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

此接口要与 CVI_VPSS_GetChnFrame 配合使用

【举例】

请参见 CVI_VPSS_GetChnFrame

【相关主题】

CVI_VPSS_GetChnFrame


6.3.22. CVI_VPSS_GetGrpFrame

【描述】

目前该函数暂未实作


6.3.23. CVI_VPSS_ReleaseGrpFrame

【描述】

目前该函数暂未实作


6.3.24. CVI_VPSS_SetChnCrop

【描述】

设置 VPSS 信道裁剪功能属性

【语法】

CVI_S32 CVI_VPSS_SetChnCrop(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VPSS_CROP_INFO_S *pstCropInfo)

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入/输出

pstCropInfo

待发送的图像信息。具体描述请参见“系统控制”章节。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已创建

  • CROP区域尺寸不能小于VPSS最小尺寸,不能超过最大尺寸,否则返回失败

  • 该函数设置的是vpss输出通道的图像,而GrpCrop设置的是vpss输入的图像

【举例】

【相关主题】

CVI_VPSS_GetChnCrop


6.3.25. CVI_VPSS_GetChnCrop

【描述】

获取 VPSS 信道裁剪功能属性

【语法】

CVI_S32 CVI_VPSS_GetChnCrop(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VPSS_CROP_INFO_S *pstCropInfo)

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

pstCropInfo

CROP 功能参数。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_comm_vpss.h、cvi_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已创建

  • 该函数获得的是vpss输出通道的图像裁剪信息,而 CVI_VPSS_GetGrpCrop 获得的是vpss输入的图像裁剪信息

【举例】

【相关主题】

CVI_VPSS_SetChnCrop


6.3.26. CVI_VPSS_SetChnRotation

【描述】

设置 VPSS通道旋转的属性。

【语法】

CVI_S32 CVI_VPSS_SetChnRotation(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, ROTATION_E enRotation);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

enRotation

旋转属性。详见 ROTATION_E 说明。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • 使用本接口前,需先调用 CVI_VPSS_SetChnAttr ,否则提示失败。

  • 必需在设置信道属性后才能设置此属性。

  • CV181x/CV180x不支持180°旋转,180°旋转可以利用mirror+flip实现。

  • 仅支持NV12、NV21及YUV400三种格式的旋转。

  • 旋转后,信道输出的图像大小可能发生变化。
    例如1920x1080输入的图像,旋转90度后,实际输出为1088x1920。
    因为旋转需要64像素对齐,所以会产生无效区域,如果后端对接vo或者venc,后端模块会自动裁剪有效部分,如果是GetChnFrame,有效区域在VIDEO_FRAME_S结构体s16OffsetTop、s16OffsetBottom、s16OffsetLeft、s16OffsetRight指定。

【举例】

【相关主题】


6.3.27. CVI_VPSS_GetChnRotation

【描述】

获取 VPSS通道旋转的属性。

【语法】

CVI_S32 CVI_VPSS_GetChnRotation(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, ROTATION_E *penRotation);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

penRotation

旋转属性指针。 输出详见 ROTATION_E 说明。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

【举例】

【相关主题】

CVI_VPSS_SetChnRotation


6.3.28. CVI_VPSS_SetChnLDCAttr

【描述】

设置 VPSS通道镜头畸变矫正的属性。

【语法】

CVI_S32 CVI_VPSS_SetChnLDCAttr(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VPSS_LDC_ATTR_S *pstLDCAttr);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

pstLDCAttr

镜头畸变矫正属性。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • 使用本接口前,需先调用 CVI_VPSS_SetChnAttr ,否则提示失败。

  • 必需在设置信道属性后才能设置此属性。

  • 仅支持NV21及YUV400两种格式的旋转。

【举例】

【相关主题】

CVI_VPSS_GetChnLDCAttr

VPSS_LDC_ATTR_S


6.3.29. CVI_VPSS_GetChnLDCAttr

【描述】

获取 VPSS通道镜头畸变矫正的属性。

【语法】

CVI_S32 CVI_VPSS_GetChnLDCAttr(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VPSS_LDC_ATTR_S *pstLDCAttr);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

pstLDCAttr

镜头畸变矫正属性。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

【举例】

【相关主题】

CVI_VPSS_SetChnLDCAttr

VPSS_LDC_ATTR_S


6.3.30. CVI_VPSS_GetChnFd

【描述】

获取VPSS通道对应的设备文件句柄。

【语法】

CVI_S32 CVI_VPSS_GetChnFd(VPSS_GRP VpssGrp, VPSS_CHN VpssChn);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

【返回值】

返回值

描述

正数值

成功。

非正数值

无效值。

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

【举例】

【相关主题】


6.3.31. CVI_VPSS_CloseFd

【描述】

关闭VPSS设备通道的文件句柄。

【语法】

CVI_S32 CVI_VPSS_CloseFd(CVI_VOID);

【参数】

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

此接口调用后,VPSS其他 MMF接口失效。

【举例】

【相关主题】

CVI_VPSS_GetChnFd


6.3.32. CVI_VPSS_AttachVbPool

【描述】

将 VPSS 的通道绑定到某个视频缓存VB池中。

【语法】

CVI_S32 CVI_VPSS_AttachVbPool(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VB_POOL hVbPool);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

hVbPool

视频缓存VB 池信息。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 重复调用该函数设置同一个组返回成功

  • 当要切换当前组绑定的VB 池时,只需再调一次接口CVI_VPSS_AttachVbPool

  • 正确配置需要绑定到的VB 池即可。

  • hVbPool必须保证是已创建VB池的有效PoolId。

  • 在调用CVI_VPSS_DetachVbPool后,销毁创建的VB之前,
    需要保证VB没有被VPSS后端绑定的模块使用,
    可以通过sleep或清除后端模块通道缓存的方式先把VB 都释放,再销毁缓存VB 池。
  • VB大小根据VPSS通道输出图像计算,具体计算公式参考 cvi_buffer.h

【举例】

【相关主题】


6.3.33. CVI_VPSS_DetachVbPool

【描述】

将 VPSS 的通道从某个视频缓存VB池中解绑定。

【语法】

CVI_S32 CVI_VPSS_DetachVbPool(VPSS_GRP VpssGrp, VPSS_CHN VpssChn);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

【举例】

【相关主题】


6.3.34. CVI_VPSS_SetChnBufWrapAttr

【描述】

设置低延时卷绕属性。

【语法】

CVI_S32 CVI_VPSS_SetChnBufWrapAttr(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, const VPSS_CHN_BUF_WRAP_S *pstVpssChnBufWrap);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)

输入

pstVpssChnBufWrap

通道buffer卷绕属性结构体。

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

  • 通道使能状态下不支持。

  • 必须在已设置通道属性的前提下才能设置此接口。

  • 不支持semi-planar422 图像,不支持Flip。

  • 信道低延时卷绕开启时,通道的获取、亮度、旋转、CoverEx、OverlayEx、任意角度旋转、LDC将无效

  • 在低延时卷绕通道绑编码场景下,编码不支持软件抽帧。

【举例】

【相关主题】


6.3.35. CVI_VPSS_GetChnBufWrapAttr

【描述】

获取低延时卷绕属性。

【语法】

CVI_S32 CVI_VPSS_GetChnBufWrapAttr(VPSS_GRP VpssGrp, VPSS_CHN VpssChn, VPSS_CHN_BUF_WRAP_S *pstVpssChnBufWrap);

【参数】

参数名称

描述

输入/输出

VpssGrp

VPSS GROUP 号。

取值范围:[0, VPSS_MAX_GRP_NUM)。

输入

VpssChn

VPSS 通道号

取值范围:[0, VPSS_MAX_CHN_NUM)。

输入

pstVpssChnBufWrap

通道buffer卷绕属性结构体。

输出

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

  • Group必须已经创建

【举例】

【相关主题】


6.3.36. CVI_VPSS_GetWrapBufferSize

【描述】

获取低延时卷绕所需缓存大小。

【语法】

CVI_U32 CVI_VPSS_GetWrapBufferSize(CVI_U32 u32Width, CVI_U32 u32Height, PIXEL_FORMAT_E enPixelFormat, CVI_U32 u32BufLine, CVI_U32 u32BufDepth);

【参数】

参数名称

描述

输入/输出

u32Width

图像宽度

输入

u32Height

图像高度

输入

enPixelFormat

图像像素格式

输入

u32BufLine

单个卷绕缓存line数

输入

u32BufDepth

卷绕缓存个数

输入

【返回值】

返回值

描述

0

成功。

非 0

失败,请参见 错误码

【需求】

  • 头文件:cvi_vpss.h, cvi_comm_vpss.h

  • 库文件:libvpu.a

【注意】

【举例】

【相关主题】