本帖最后由 jl3276 于 2016-9-11 10:37 编辑
然后代码的21行调用了s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL);这样一个函数,
函数的参数中
s32VpssGrpCnt =4;
pstSize->u32Width = 960;
pstSize->u32Height = 576;
至于VPSS_MAX_CHN_NUM,文档里是下面这样的说明,而对于3520d而言,这个值是多少呢?我也没有查到,如果有知道的,还请多指教下小生~
最后一个参数NULL,应该是不希望对该结构体操作吧?
-------------------------------------------------------------------------------------------------------------------
VPSS_MAX_CHN_NUM
【说明】
定义 VPSS 通道的最大个数。
【定义】
#define VPSS_MAX_CHN_NUM (VPSS_MAX_PHY_CHN_NUM + VPSS_MAX_EXT_CHN_NUM +1)
【注意事项】
通道包括物理通道,扩展通道,直通(BYPASS)通道之和。
【相关数据类型及接口】
无。
VPSS_MAX_PHY_CHN_NUM
【说明】
定义 VPSS 物理通道的最大个数。
【定义】
#define VPSS_MAX_PHY_CHN_NUM 2
【注意事项】
和硬件资源相关, Hi3521/Hi3520A 为 4, Hi3518/Hi3516C 为 2
【相关数据类型及接口】
无。
VPSS_MAX_EXT_CHN_NUM
【说明】
定义 VPSS 扩展通道的最大个数。
【定义】
#define VPSS_MAX_EXT_CHN_NUM 2
【注意事项】
数目根据方案设计和系统能力而定。 Hi3518/Hi3516C 为 5
【相关数据类型及接口】
无。
-----------------------------------------------------------------------------------------------------------------------------
我们把函数定义贴出来
[code]/*****************************************************************************
* function : start vpss. VPSS chn with frame
*****************************************************************************/
HI_S32 SAMPLE_COMM_VPSS_Start(HI_S32 s32GrpCnt, SIZE_S *pstSize, HI_S32 s32ChnCnt,VPSS_GRP_ATTR_S *pstVpssGrpAttr)
{
VPSS_GRP VpssGrp;
VPSS_CHN VpssChn;
VPSS_GRP_ATTR_S stGrpAttr;
VPSS_CHN_ATTR_S stChnAttr;
VPSS_GRP_PARAM_S stVpssParam;
HI_S32 s32Ret;
HI_S32 i, j;
/*** Set Vpss Grp Attr ***/
if(NULL == pstVpssGrpAttr)
{
stGrpAttr.u32MaxW = pstSize->u32Width;
stGrpAttr.u32MaxH = pstSize->u32Height;
stGrpAttr.bDrEn = HI_FALSE;
stGrpAttr.bDbEn = HI_FALSE;
stGrpAttr.bIeEn = HI_TRUE;
stGrpAttr.bNrEn = HI_TRUE;
stGrpAttr.bHistEn = HI_FALSE;
stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;
}
else
{
memcpy(&stGrpAttr,pstVpssGrpAttr,sizeof(VPSS_GRP_ATTR_S));
}
for(i=0; i
{
VpssGrp = i;
/*** create vpss group ***/
s32Ret = HI_MPI_VPSS_CreateGrp(VpssGrp, &stGrpAttr);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("HI_MPI_VPSS_CreateGrp failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
/*** set vpss param ***/
s32Ret = HI_MPI_VPSS_GetGrpParam(VpssGrp, &stVpssParam);//获取 VPSS GROUP 高级属性
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
stVpssParam.u32MotionThresh = 0;
s32Ret = HI_MPI_VPSS_SetGrpParam(VpssGrp, &stVpssParam);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("failed with %#x!\n", s32Ret);
return HI_FAILURE;
}
/*** enable vpss chn, with frame ***/
for(j=0; j
{
VpssChn = j;
/* Set Vpss Chn attr */
stChnAttr.bSpEn = HI_FALSE;//Sp 使能开关。
stChnAttr.bFrameEn = HI_TRUE;//边框使能开关。
stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_LEFT] = 0xff00;//stFrame 边框属性。
stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_RIGHT] = 0xff00;
stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_BOTTOM] = 0xff00;
stChnAttr.stFrame.u32Color[VPSS_FRAME_WORK_TOP] = 0xff00;
stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_LEFT] = 2;
stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_RIGHT] = 2;
stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_TOP] = 2;
stChnAttr.stFrame.u32Width[VPSS_FRAME_WORK_BOTTOM] = 2;
s32Ret = HI_MPI_VPSS_SetChnAttr(VpssGrp, VpssChn, &stChnAttr);//设置 VPSS 通道属性。
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("HI_MPI_VPSS_SetChnAttr failed with %#x\n", s32Ret);
return HI_FAILURE;
}
s32Ret = HI_MPI_VPSS_EnableChn(VpssGrp, VpssChn);//启用 VPSS 通道
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("HI_MPI_VPSS_EnableChn failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
/*** start vpss group ***/
s32Ret = HI_MPI_VPSS_StartGrp(VpssGrp);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("HI_MPI_VPSS_StartGrp failed with %#x\n", s32Ret);
return HI_FAILURE;
}
}
return HI_SUCCESS;
}[/code]