为了说明问题我先做个约定简称,如下:
版本1:Linux x3dvbx3-hynix1G-2666 4.14.74 #56 SMP PREEMPT Fri Sep 11 15:51:48 +08 2020 aarch64 GNU/Linux
版本2:Linux x3sdbx3-hynix1G-2666 4.14.74 #20 SMP PREEMPT Thu Oct 22 11:23:27 +08 2020 aarch64 GNU/Linux

有谁知道这是啥问题吗?
为了说明问题我先做个约定简称,如下:
版本1:Linux x3dvbx3-hynix1G-2666 4.14.74 #56 SMP PREEMPT Fri Sep 11 15:51:48 +08 2020 aarch64 GNU/Linux
版本2:Linux x3sdbx3-hynix1G-2666 4.14.74 #20 SMP PREEMPT Thu Oct 22 11:23:27 +08 2020 aarch64 GNU/Linux

有谁知道这是啥问题吗?



VENC_CHN_ATTR_S VEncChnAttr;
memset(&VEncChnAttr, 0, sizeof(VENC_CHN_ATTR_S));
VEncChnAttr.stVencAttr.enType = PT_H264;
VEncChnAttr.stVencAttr.u32PicWidth = 640;
VEncChnAttr.stVencAttr.u32PicHeight = 480;
VEncChnAttr.stVencAttr.enPixelFormat = HB_PIXEL_FORMAT_YUV420P;
VEncChnAttr.stVencAttr.u32FrameBufferCount = 8;
VEncChnAttr.stVencAttr.u32BitStreamBufferCount = 8;
VEncChnAttr.stVencAttr.bExternalFreamBuffer = HB_TRUE;
VEncChnAttr.stVencAttr.enRotation = CODEC_ROTATION_0;
VEncChnAttr.stVencAttr.enMirrorFlip = DIRECTION_NONE;
VEncChnAttr.stVencAttr.stCropCfg.bEnable = HB_FALSE;
VEncChnAttr.stVencAttr.stAttrH264.h264_profile = HB_H264_PROFILE_BP;
VEncChnAttr.stVencAttr.stAttrH264.h264_level = HB_H264_LEVEL_UNSPECIFIED;
VEncChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264VBR;
VEncChnAttr.stRcAttr.stH264Vbr.bQpMapEnable = HB_TRUE;
VEncChnAttr.stRcAttr.stH264Vbr.u32IntraPeriod = 20;
VEncChnAttr.stRcAttr.stH264Vbr.u32IntraQp = 20;
VEncChnAttr.stRcAttr.stH264Vbr.u32FrameRate = 20;
VEncChnAttr.stGopAttr.u32GopPresetIdx = 6;
VEncChnAttr.stGopAttr.s32DecodingRefreshType = 2;
int ret = HB_VENC_CreateChn(0, &m_VEncChnAttr);
if (0 != ret)
{
printf("HB_VENC_CreateChn failed, ret=%x\n", ret);
return -1;
}
VENC_RC_ATTR_S *PstRcParam = &(m_VEncChnAttr.stRcAttr);
VEncChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
ret = HB_VENC_GetRcParam(0, PstRcParam);
if (0 != ret)
{
HB_VENC_DestroyChn(0);
printf("HB_VENC_GetRcParam failed, ret=%d\n", ret);
return -1;
}
PstRcParam->stH264Cbr.u32IntraPeriod = 20;
PstRcParam->stH264Cbr.u32BitRate = 2 * 1024 * 1024;
PstRcParam->stH264Cbr.u32FrameRate = FrameRate;
PstRcParam->stH264Cbr.u32VbvBufferSize = 3000;
ret = HB_VENC_SetChnAttr(0, &m_VEncChnAttr);
if (0 != ret)
{
HB_VENC_DestroyChn(0);
printf("HB_VENC_SetChnAttr failed, ret=%d\n", ret);
return -1;
}

调用HB_VENC_SetChnAttr失败,打印一些错误信息,图片看得不清楚,我贴上日志信息:
[ 40.786284] [VPUDRV]vpu_ioctl:1328: [+]VDI_IOCTL_SET_CTX_INFO
[ 40.788008] [VPUDRV]vpu_ioctl:1345: [-]VDI_IOCTL_SET_CTX_INFO
[ERROR][][video/src/hb_params_adaptive.c:511] [40.784329]hb_rc_params_adaptive_context[511] E: hb_rc_params_adaptive_context:511 Not Support encoding agreement[ 40.789752] [VPUDRV]vpu_ioctl:1262: [+]VDI_IOCTL_FREE_INSTANCE_ID
[ERROR][][video/src/hb_params_adaptive.c:818] [40.784420]hb_venc_chn_attr_adaptive_context[818] E: video/src/hb_params_adaptive.c:818 hb_rc_params_adaptive_context s32Ret = -268958728
[ERROR][][video/src/hb_venc.c:98] [40.784464]MCErrC_2_HBVencErrC[98] E: [HB_VENC] MCErrC_2_HBVencErrC:98 Not Support Venc Error Code(-268958728)!
[ERROR][][video/src/hb_venc.c:856] [40.784487]HB_VENC_SetChnAttr[856] E: [HB_VENC] HB_VENC_SetChnAttr:856 hb_venc_chn_attr_adaptive_context VeChn = 0 s32Ret = -268958728
[ 40.791884] [VPUDRV]vpu_ioctl:1283: [-]VDI_IOCTL_FREE_INSTANCE_ID clear id = 1
HorizonVideoEncoder,1970-01-01 08:00:40 796ms,Init, HB_VENC_SetChnAttr failed, ret=-268958728