6.3. API参考¶
该功能模块为用户提供以下API:
CVI_VPSS_CreateGrp:创建一个VPSS GROUP。
CVI_VPSS_DestroyGrp:销毁一个VPSS GROUP。
CVI_VPSS_GetGrpAttr:获取VPSS GROUP属性。
CVI_VPSS_SetGrpAttr:设置VPSS GROUP属性。
CVI_VPSS_StartGrp:启用 VPSS GROUP。
CVI_VPSS_StopGrp:禁用 VPSS GROUP。
CVI_VPSS_ResetGrp:重置一个 VPSS GROUP。
CVI_VPSS_GetGrpProcAmpCtrl: 获取一个 VPSS GROUP 的颜色控制功能描述。
CVI_VPSS_GetGrpProcAmp: 获取一个 VPSS GROUP的颜色控制属性。
CVI_VPSS_SetGrpProcAmp: 设置一个 VPSS GROUP的颜色控制属性。
CVI_VPSS_SetGrpParamfromBin: 根据Bin设置一个 VPSS GROUP的属性。
CVI_VPSS_GetChnAttr:获取 VPSS 通道属性。
CVI_VPSS_SetChnAttr:设置 VPSS 通道属性。
CVI_VPSS_EnableChn:启用 VPSS 通道。
CVI_VPSS_DisableChn:禁用 VPSS 通道
CVI_VPSS_SetGrpCrop:设置 VPSS GROUP CROP 功能属性。
CVI_VPSS_GetGrpCrop:获取 VPSS GROUP CROP 功能属性。
CVI_VPSS_SendFrame:用户向VPSS发送数据。
CVI_VPSS_GetChnFrame:用户从通道获取一帧处理完成的图像。
CVI_VPSS_SendChnFrame:用户向VPSS指定通道数据。
CVI_VPSS_ReleaseChnFrame:用户释放一帧通道处理完成的图像
CVI_VPSS_GetGrpFrame:用户从VPSS获得Group所属图像。
CVI_VPSS_ReleaseGrpFrame:用户释放该Group所属图像。
CVI_VPSS_SetChnCrop:设置VPSS信道裁剪功能属性。
CVI_VPSS_GetChnCrop:获取VPSS信道裁剪功能属性。
CVI_VPSS_SetChnRotation:设置 VPSS通道旋转的属性。
CVI_VPSS_GetChnRotation:获取VPSS通道图像旋转属性。
CVI_VPSS_GetChnFd:获取VPSS通道对应的设备文件句柄。
CVI_VPSS_CloseFd:关闭VPSS设备通道的文件句柄。
CVI_VPSS_SetChnBufWrapAttr:设置低延时卷绕属性。
CVI_VPSS_GetChnBufWrapAttr: 获取低延时卷绕属性。
CVI_VPSS_GetWrapBufferSize: 获取所需低延时卷绕缓存大小。
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
【举例】
【相关主题】
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
【举例】
【相关主题】
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
【举例】
【相关主题】
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必须已经创建
重复调用该函数设置同一个组返回成功
【举例】
【相关主题】
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 返回成功
【举例】
【相关主题】
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必须已经创建
【举例】
【相关主题】
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;
}
【相关主题】
PROC_AMP_E
PROC_AMP_CTRL_S
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
【相关主题】
PROC_AMP_E
PROC_AMP_CTRL_S
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
【相关主题】
PROC_AMP_E
PROC_AMP_CTRL_S
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;
}
【相关主题】
PROC_AMP_E
PROC_AMP_CTRL_S
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必须已经创建
【举例】
【相关主题】
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必须已经创建
【举例】
【相关主题】
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必须已经创建
多次使能返回成功
【举例】
【相关主题】
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必须已经创建
重复禁用返回成功
【举例】
【相关主题】
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情况下,本设置无效
【举例】
【相关主题】
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必须已经创建
【举例】
【相关主题】
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");
【相关主题】
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 配合使用
【举例】
【相关主题】
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输入的图像
【举例】
无
【相关主题】
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输入的图像裁剪信息
【举例】
无
【相关主题】
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_SetChnAttr ,否则提示失败。
【举例】
无
【相关主题】
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两种格式的旋转。
【举例】
无
【相关主题】
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_SetChnAttr ,否则提示失败。
【举例】
无
【相关主题】
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接口失效。
【举例】
无
【相关主题】
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
【注意】
无
【举例】
无
【相关主题】
无