int CONFIG_VENC_CHN_ATTR(int VencChn, ENCODERCONFIG *compess)
{
HI_U8 flag = 0;
HI_S32 s32Ret;
VENC_CHN_ATTR_S stVencChnAttr;
VENC_RECV_PIC_PARAM_S stRecvParam;
HI_U32 u32StatTime = 1;
//编码类型
PAYLOAD_TYPE_E enType;
PAYLOAD_TYPE_E curenType;
if(compess->encoderType==1)
{
enType =PT_H264;
}
// else if(compess->encoderType==8)
// {
// enType =PT_H265;
// }
SIZE_S stPicSize;
stPicSize.u32Height=compess->height;
stPicSize.u32Width=compess->width;
//码率类型
unsigned int enRcMode =compess->bitType;
HI_FR32 u32FrameRate = compess->videoEncoder.videoFrameRate;
HI_U16 u32Gop = compess->videoEncoder.intervalFrameI;
HI_U32 u32BitRate = compess->videoEncoder.maxVideoBitrate;
printf("enType=%d\n",enType);
printf("enRcMode=%d\n",enRcMode);
printf("u32BitRate=%d\n",u32BitRate);
#if 1
printf("config_chn_attr is enType=%u\n\
stPicSize.u32Width=%u\n\
stPicSize.u32Height=%u\n\
enRcMode=%u\n\
u32FrameRateFZ=%u\n\
u32FrameRateFM=%u\n\
u32Gop=%u\n \
u32BitRate=%u\n",enType,stPicSize.u32Width,stPicSize.u32Height,enRcMode,(u32FrameRate & (HI_U32)65535),((u32FrameRate >> 16) & (HI_U32)65535),u32Gop,u32BitRate);
#endif
#if 1
s32Ret = HI_MPI_VENC_GetChnAttr(VencChn,&stVencChnAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_VENC_GetChnATTR[%d] failed with %#x!\n", \
VencChn, s32Ret);
return s32Ret;
}
printf("iiiiiiiiiiii %d %d\n", stVencChnAttr.stVencAttr.u32MaxPicWidth, stVencChnAttr.stVencAttr.u32MaxPicHeight);
printf("chn_attr is stVencChnAttr.stVencAttr.u32PicWidth=%u\n\
stVencChnAttr.stVencAttr.u32PicHeight=%u\n\
stVencChnAttr.stVencAttr.enType=%u\n\
stVencChnAttr.stVencAttr.u32Profile=%u\n\
stVencChnAttr.stRcAttr.enRcMode=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32Gop=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRateFZ=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRateFM=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime=%u\n\
stVencChnAttr.stGopAttr.enGopMode=%u\n",\
stVencChnAttr.stVencAttr.u32PicWidth,stVencChnAttr.stVencAttr.u32PicHeight,stVencChnAttr.stVencAttr.enType,\
stVencChnAttr.stVencAttr.u32Profile,stVencChnAttr.stRcAttr.enRcMode,stVencChnAttr.stRcAttr.stH264Vbr.u32Gop,\
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate,(stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate & (HI_U32)65535),\
((stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate >> 16) & (HI_U32)65535),stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime,stVencChnAttr.stGopAttr.enGopMode);
#endif
MPP_CHN_S stSrcChn;
stSrcChn.enModId = HI_ID_VPSS;
stSrcChn.s32DevId = 0;
stSrcChn.s32ChnId = 0;
curenType=stVencChnAttr.stVencAttr.enType;
printf("----curenType=%d enType=%d\n",curenType,enType);
if(stVencChnAttr.stVencAttr.enType!=enType)
{
printf("1111111111111111111111 enType\n");
memset(&stVencChnAttr,0,sizeof(VENC_CHN_ATTR_S));
stVencChnAttr.stVencAttr.enType = enType;
stVencChnAttr.stVencAttr.u32MaxPicWidth = stPicSize.u32Width;
stVencChnAttr.stVencAttr.u32MaxPicHeight = stPicSize.u32Height;
stVencChnAttr.stVencAttr.u32PicWidth = stPicSize.u32Width;/*the picture width*/
stVencChnAttr.stVencAttr.u32PicHeight = stPicSize.u32Height;/*the picture height*/
stVencChnAttr.stVencAttr.u32BufSize = stPicSize.u32Width * stPicSize.u32Height * 2;/*stream buffer size*/
stVencChnAttr.stVencAttr.u32Profile = 0;
stVencChnAttr.stVencAttr.bByFrame = HI_TRUE;/*get stream mode is slice mode or frame mode?*/
flag = 1;
s32Ret = HI_MPI_VENC_StopRecvFrame(VencChn);
if (HI_SUCCESS != s32Ret)
{
printf("HI_MPI_VENC_StopRecvPic vechn[%d] failed with %#x!\n", \
VencChn, s32Ret);
return s32Ret;
}
printf("HI_MPI_VENC_StopRecvFrame success\n");
bcloseconsock=1;
stVencChnAttr.stVencAttr.u32PicWidth=stPicSize.u32Width;
stVencChnAttr.stVencAttr.u32PicHeight=stPicSize.u32Height;
int i= 0;
for ( i = 0; i < 8; i++)
{
s32Ret = HI_MPI_RGN_DetachFromChn(20+(VencChn%3)*10+i, &stSrcChn);
if(HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_RGN_DetachFromChn failed with region = %d s32Ret: 0x%x.\n", i, s32Ret);
return HI_FAILURE;
}
}
// s32Ret = HI_MPI_VENC_DestroyChn(VencChn);
// if (HI_SUCCESS != s32Ret)
// {
// printf("HI_MPI_VENC_DestroyChn vechn[%d] failed with %#x!\n", \
// VencChn, s32Ret);
// return s32Ret;
// }
// printf("HI_MPI_VENC_DestroyChn success\n");
}
else
{
printf("2222222222222222222 enType\n");
// if(stVencChnAttr.stVencAttr.u32PicWidth!=stPicSize.u32Width && stVencChnAttr.stVencAttr.u32PicHeight!=stPicSize.u32Height)
// {
printf("3333333333333333333333333333 enType\n");
flag = 1;
s32Ret = HI_MPI_VENC_StopRecvFrame(VencChn);
if (HI_SUCCESS != s32Ret)
{
printf("HI_MPI_VENC_StopRecvPic vechn[%d] failed with %#x!\n", \
VencChn, s32Ret);
return s32Ret;
}
printf("HI_MPI_VENC_StopRecvFrame success\n");
stVencChnAttr.stVencAttr.u32PicWidth=stPicSize.u32Width;
stVencChnAttr.stVencAttr.u32PicHeight=stPicSize.u32Height;
int i= 0;
for ( i = 0; i < 8; i++)
{
s32Ret = HI_MPI_RGN_DetachFromChn(20+(VencChn%3)*10+i, &stSrcChn);
if(HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_RGN_DetachFromChn failed with region = %d s32Ret: 0x%x.\n", i, s32Ret);
return HI_FAILURE;
}
}
// }
}
#if 1
switch(enType)
{
case PT_H264:
{
if (VENC_RC_MODE_H264CBR == enRcMode)
{
printf("-----h264 VENC_RC_MODE_H264CBR\n");
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264CBR)
{
stVencChnAttr.stRcAttr.stH264Cbr.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264Cbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
}
stVencChnAttr.stRcAttr.stH264Cbr.u32BitRate = u32BitRate;
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
stVencChnAttr.stRcAttr.stH264Cbr.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264Cbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264Cbr.u32BitRate = u32BitRate;
}
}
else if (VENC_RC_MODE_H264FIXQP == enRcMode)
{
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264FIXQP)
{
stVencChnAttr.stRcAttr.stH264FixQp.u32Gop = u32Gop;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
}
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264FIXQP;
stVencChnAttr.stRcAttr.stH264FixQp.u32Gop = u32Gop;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264FixQp.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264FixQp.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264FixQp.u32IQp = 25;
stVencChnAttr.stRcAttr.stH264FixQp.u32PQp = 30;
stVencChnAttr.stRcAttr.stH264FixQp.u32BQp = 32;
}
}
else if (VENC_RC_MODE_H264VBR == enRcMode)
{
printf("-----h264 VENC_RC_MODE_H264VBR\n");
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264VBR)
{
stVencChnAttr.stRcAttr.stH264Vbr.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
}
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate = u32BitRate;
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264VBR;
stVencChnAttr.stRcAttr.stH264Vbr.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate = u32BitRate;
}
}
else if(VENC_RC_MODE_H264AVBR == enRcMode)
{
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264AVBR)
{
stVencChnAttr.stRcAttr.stH264AVbr.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264AVbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
}
stVencChnAttr.stRcAttr.stH264AVbr.u32MaxBitRate = u32BitRate;
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264AVBR;
stVencChnAttr.stRcAttr.stH264AVbr.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264AVbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264AVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264AVbr.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264AVbr.u32MaxBitRate = u32BitRate;
}
}
else if(VENC_RC_MODE_H264QVBR == enRcMode)
{
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264QVBR)
{
stVencChnAttr.stRcAttr.stH264QVbr.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264QVbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
}
stVencChnAttr.stRcAttr.stH264QVbr.u32TargetBitRate = u32BitRate;
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264QVBR;
stVencChnAttr.stRcAttr.stH264QVbr.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264QVbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264QVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264QVbr.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264QVbr.u32TargetBitRate = u32BitRate;
}
}
else if(VENC_RC_MODE_H264CVBR == enRcMode)
{
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264CVBR)
{
stVencChnAttr.stRcAttr.stH264CVbr.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264CVbr.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
}
if((u32BitRate < stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMaxBitrate) && (u32BitRate >= stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMaxBitrate))
{
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMaxBitrate = u32BitRate;
stVencChnAttr.stRcAttr.stH264CVbr.u32MaxBitRate = u32BitRate;
}
else if(u32BitRate < stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMinBitrate)
{
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMaxBitrate = u32BitRate;
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMinBitrate = u32BitRate;
stVencChnAttr.stRcAttr.stH264CVbr.u32MaxBitRate = u32BitRate;
}
else
{
stVencChnAttr.stRcAttr.stH264CVbr.u32MaxBitRate = u32BitRate;
}
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CVBR;
stVencChnAttr.stRcAttr.stH264CVbr.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264CVbr.u32StatTime = u32StatTime;
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermStatTime = u32StatTime;
stVencChnAttr.stRcAttr.stH264CVbr.u32ShortTermStatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264CVbr.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264CVbr.fr32DstFrameRate = u32FrameRate;
}
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMaxBitrate = u32BitRate;
stVencChnAttr.stRcAttr.stH264CVbr.u32LongTermMinBitrate = u32BitRate;
stVencChnAttr.stRcAttr.stH264CVbr.u32MaxBitRate = u32BitRate;
}
}
else if(VENC_RC_MODE_H264QPMAP == enRcMode)
{
if(stVencChnAttr.stRcAttr.enRcMode==VENC_RC_MODE_H264QPMAP)
{
stVencChnAttr.stRcAttr.stH264QpMap.u32Gop = u32Gop;
//stVencChnAttr.stRcAttr.stH264QpMap.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if(((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535)) > stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
}
else
{
if((u32FrameRate & (HI_U32)65535) > stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate)
{
stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
}
}
else
{
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264QPMAP;
#if 1
stVencChnAttr.stRcAttr.stH264QpMap.u32Gop = u32Gop;
stVencChnAttr.stRcAttr.stH264QpMap.u32StatTime = u32StatTime;
if((u32FrameRate >> 16) & (HI_U32)65535)
{
if((u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535))
{
stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate = (u32FrameRate & (HI_U32)65535) / ((u32FrameRate >> 16) & (HI_U32)65535) + 1;
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
else
{
stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate = 30;
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
}
else
{
stVencChnAttr.stRcAttr.stH264QpMap.u32SrcFrameRate = u32FrameRate;
stVencChnAttr.stRcAttr.stH264QpMap.fr32DstFrameRate = u32FrameRate;
}
#endif
}
}
else
{
SAMPLE_PRT("%s,%d,enRcMode(%d) not support\n",__FUNCTION__,__LINE__,enRcMode);
return HI_FAILURE;
}
}
break;
case PT_H265:
{
// u32FrameRate=30;
enRcMode+=10;
if (VENC_RC_MODE_H265CBR == enRcMode)
{
VENC_H265_CBR_S stH265Cbr;
printf("-----h265 VENC_RC_MODE_H265CBR\n");
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H265CBR;
stH265Cbr.u32Gop = u32Gop;
stH265Cbr.u32StatTime = u32StatTime; /* stream rate statics time(s) */
stH265Cbr.u32SrcFrameRate = u32FrameRate; /* input (vi) frame rate */
stH265Cbr.fr32DstFrameRate = u32FrameRate; /* target frame rate */
stH265Cbr.u32BitRate = 1024 * 3 + 2048*u32FrameRate/30;
memcpy(&stVencChnAttr.stRcAttr.stH265Cbr, &stH265Cbr, sizeof(VENC_H265_CBR_S));
}
else if (VENC_RC_MODE_H265FIXQP == enRcMode)
{
VENC_H265_FIXQP_S stH265FixQp;
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H265FIXQP;
stH265FixQp.u32Gop = 30;
stH265FixQp.u32SrcFrameRate = u32FrameRate;
stH265FixQp.fr32DstFrameRate = u32FrameRate;
stH265FixQp.u32IQp = 25;
stH265FixQp.u32PQp = 30;
stH265FixQp.u32BQp = 32;
memcpy(&stVencChnAttr.stRcAttr.stH265FixQp, &stH265FixQp, sizeof(VENC_H265_FIXQP_S));
}
else if (VENC_RC_MODE_H265VBR == enRcMode)
{
VENC_H265_VBR_S stH265Vbr;
printf("-----h265 VENC_RC_MODE_H265VBR\n");
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H265VBR;
stH265Vbr.u32Gop = u32Gop;
stH265Vbr.u32StatTime = u32StatTime;
stH265Vbr.u32SrcFrameRate = u32FrameRate;
stH265Vbr.fr32DstFrameRate = u32FrameRate;
stH265Vbr.u32MaxBitRate = 1024 * 3 + 2048*u32FrameRate/30;
memcpy(&stVencChnAttr.stRcAttr.stH265Vbr, &stH265Vbr, sizeof(VENC_H265_VBR_S));
}
else
{
SAMPLE_PRT("%s,%d,enRcMode(%d) not support\n",__FUNCTION__,__LINE__,enRcMode);
return HI_FAILURE;
}
stVencChnAttr.stVencAttr.stAttrH265e.bRcnRefShareBuf = 1;
}
break;
default:
SAMPLE_PRT("cann't support this enType (%d) in this version!\n",enType);
return HI_ERR_VENC_NOT_SUPPORT;
}
#endif
s32Ret = HI_MPI_VENC_DestroyChn(VencChn);
if (s32Ret != HI_SUCCESS)
{
printf("HI_MPI_VENC_DestroyChn err 0x%x\n", s32Ret);
return HI_FAILURE;
}
s32Ret = HI_MPI_VENC_CreateChn(VencChn, &stVencChnAttr);
if (HI_SUCCESS != s32Ret)
{
printf("HI_MPI_VENC_CreateChn err 0x%x\n", s32Ret);
return HI_FAILURE;
}
// if(curenType==enType)
// {
// printf("HI_MPI_VENC_SetChnAttr\n");
// printf("stVencChnAttr.stRcAttr.enRcMode=%u\n", stVencChnAttr.stRcAttr.enRcMode);
// s32Ret = HI_MPI_VENC_SetChnAttr(VencChn, &stVencChnAttr);
// if (HI_SUCCESS != s32Ret)
// {
// SAMPLE_PRT("HI_MPI_VENC_SetChn[%d]Attr faild with %#x! ===\n", \
// VencChn, s32Ret);
// return s32Ret;
// }
// }
// else
// {
// s32Ret = HI_MPI_VENC_CreateChn(VencChn, &stVencChnAttr);
// if (HI_SUCCESS != s32Ret)
// {
// SAMPLE_PRT("HI_MPI_VENC_CreateChn [%d] faild with %#x! ===\n", \
// VencChn, s32Ret);
// return s32Ret;
// }
//
// printf("HI_MPI_VENC_CreateChn success\n");
// s32Ret = SAMPLE_COMM_VENC_CloseReEncode(VencChn);
// if (HI_SUCCESS != s32Ret)
// {
// HI_MPI_VENC_DestroyChn(VencChn);
// return s32Ret;
// }
// }
#if 1
// memset(&stVencChnAttr,0,sizeof(VENC_CHN_ATTR_S));
s32Ret = HI_MPI_VENC_GetChnAttr(VencChn,&stVencChnAttr);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_VENC_GetChnATTR[%d] failed with %#x!\n", \
VencChn, s32Ret);
return s32Ret;
}
printf("iiiiiiiiiiii %d %d\n", stVencChnAttr.stVencAttr.u32MaxPicWidth, stVencChnAttr.stVencAttr.u32MaxPicHeight);
printf("chn_attr is stVencChnAttr.stVencAttr.u32PicWidth=%u\n\
stVencChnAttr.stVencAttr.u32PicHeight=%u\n\
stVencChnAttr.stVencAttr.enType=%u\n\
stVencChnAttr.stVencAttr.u32Profile=%u\n\
stVencChnAttr.stRcAttr.enRcMode=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32Gop=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRateFZ=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRateFM=%u\n\
stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime=%u\n\
stVencChnAttr.stGopAttr.enGopMode=%u\n",\
stVencChnAttr.stVencAttr.u32PicWidth,stVencChnAttr.stVencAttr.u32PicHeight,stVencChnAttr.stVencAttr.enType,\
stVencChnAttr.stVencAttr.u32Profile,stVencChnAttr.stRcAttr.enRcMode,stVencChnAttr.stRcAttr.stH264Vbr.u32Gop,\
stVencChnAttr.stRcAttr.stH264Vbr.u32MaxBitRate,stVencChnAttr.stRcAttr.stH264Vbr.u32SrcFrameRate,(stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate & (HI_U32)65535),\
((stVencChnAttr.stRcAttr.stH264Vbr.fr32DstFrameRate >> 16) & (HI_U32)65535),stVencChnAttr.stRcAttr.stH264Vbr.u32StatTime,stVencChnAttr.stGopAttr.enGopMode);
printf("chn_attr is stVencChnAttr.stVencAttr.u32PicWidth=%u\n\
stVencChnAttr.stVencAttr.u32PicHeight=%u\n\
stVencChnAttr.stVencAttr.enType=%u\n\
stVencChnAttr.stVencAttr.u32Profile=%u\n\
stVencChnAttr.stRcAttr.enRcMode=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.u32Gop=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.u32MaxBitRate=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRateFZ=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRateFM=%u\n\
stVencChnAttr.stRcAttr.stH264Cbr.u32StatTime=%u\n\
stVencChnAttr.stGopAttr.enGopMode=%u\n",\
stVencChnAttr.stVencAttr.u32PicWidth,stVencChnAttr.stVencAttr.u32PicHeight,stVencChnAttr.stVencAttr.enType,\
stVencChnAttr.stVencAttr.u32Profile,stVencChnAttr.stRcAttr.enRcMode,stVencChnAttr.stRcAttr.stH264Cbr.u32Gop,\
stVencChnAttr.stRcAttr.stH264Cbr.u32BitRate,stVencChnAttr.stRcAttr.stH264Cbr.u32SrcFrameRate,(stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate & (HI_U32)65535),\
((stVencChnAttr.stRcAttr.stH264Cbr.fr32DstFrameRate >> 16) & (HI_U32)65535),stVencChnAttr.stRcAttr.stH264Cbr.u32StatTime,stVencChnAttr.stGopAttr.enGopMode);
#endif
if(flag == 1)
{
int i= 0;
for ( i = 0; i < 8; i++)
{
s32Ret = HI_MPI_RGN_AttachToChn(20+(VencChn%3)*10+i, &stSrcChn, &g_stChnAttr[VencChn%3][i]);
if (s32Ret != HI_SUCCESS)
{
SAMPLE_PRT("HI_MPI_RGN_AttachToChn failed! region = %d s32Ret: 0x%x.\n", i, s32Ret);
return s32Ret;
}
}
stRecvParam.s32RecvPicNum = -1;
s32Ret = HI_MPI_VENC_StartRecvFrame(VencChn, &stRecvParam);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("HI_MPI_VENC_StartRecvPic faild with%#x! \n", s32Ret);
return s32Ret;
}
}
printf("CONFIG_VENC_CHN_ATTR is success!!!\n");
return s32Ret;
}