他的回复:
1.MANER_NUM_TEN 没有定义,我定义的10 2.VT_SYS_RESOLUTION_MAX_WIDTH和VT_SYS_RESOLUTION_MAX_HEIGHT 也没有定义,我试过(2560,2560)和(1920,1080)两组值。3. VT_DECODER_VPSS_STATIC_CHN_ID没有定义,我定义的1.结果:1. 第一步 HI_MPI_VB_SetConfig 就返回出错 (0xa0018012)2. HI_MPI_VPSS_GetModParam和HI_MPI_VPSS_SetModParam都返回出错(0xffffffff)3. 出现刷屏日志“[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported ”4. HI_MPI_VDEC_SetChnParam 第一遍 直接获取(HI_MPI_VDEC_GetChnParam)到的参数就设置,不出错5. HI_MPI_VDEC_SetChnParam 第二遍,在第一遍HI_MPI_VDEC_SetChnParam 之后只修改vdecChnParam.stVdecVideoParam.enDecMode = VIDEO_DEC_MODE_IPB; 报错(0xa0058003)主要是VIDEO_DEC_MODE_IPB一设置下去就报错(0xa0058003),是不是我的这台设备就不支持解码B帧?文档错误码:《0xA0058003 HI_ERR_VDEC_ILLEGAL_PARAM 参数超出合法范围》, 注:HISICHECKRET(HI_MPI_VB_Init()); HISICHECKRET(HI_MPI_SYS_Init());这两个函数不调用就没有刷屏日志“[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported”代码如下:{ { //1. MPP 初始化 VB_CONFIG_S stVbConfig; memset_s(&stVbConfig, sizeof(VB_CONFIG_S), 0, sizeof(VB_CONFIG_S)); stVbConfig.u32MaxPoolCnt = 1; stVbConfig.astCommPool[0].u32BlkCnt = 10 * 1; stVbConfig.astCommPool[0].u64BlkSize = COMMON_GetPicBufferSize(2560, 2560, PIXEL_FORMAT_YVU_SEMIPLANAR_420, DATA_BITWIDTH_8, COMPRESS_MODE_NONE, 0); HISICHECKRET(HI_MPI_VB_SetConfig(&stVbConfig)); HISICHECKRET(HI_MPI_VB_Init()); HISICHECKRET(HI_MPI_SYS_Init()); VDEC_MOD_PARAM_S modParam; HISICHECKRET(HI_MPI_VDEC_GetModParam(&modParam)); modParam.enVdecVBSource = VB_SOURCE_USER; //VB_SOURCE_PRIVATE; HISICHECKRET(HI_MPI_VDEC_SetModParam(&modParam)); VPSS_MOD_PARAM_S vpsstModParam; HISICHECKRET(HI_MPI_VPSS_GetModParam(&vpsstModParam)); vpsstModParam.bHdrSupport = HI_TRUE; HISICHECKRET(HI_MPI_VPSS_SetModParam(&vpsstModParam)); } { //2. 创建解码通道 DATA_BITWIDTH_E eDatabw = DATA_BITWIDTH_8;//DATA_BITWIDTH_8; //DATA_BITWIDTH_10; VDEC_CHN_ATTR_S vdecChnAttr{}; vdecChnAttr.enType = FormatTransform(format); vdecChnAttr.u32PicWidth = width; vdecChnAttr.u32PicHeight = height; vdecChnAttr.enMode = VIDEO_MODE_STREAM; vdecChnAttr.u32StreamBufSize = width * height * 3 / 2; vdecChnAttr.stVdecVideoAttr.u32RefFrameNum = 5; //海思自编码流:推荐设为3。其他码流:推荐设为5。测试码流:推荐设为16。 vdecChnAttr.u32FrameBufSize = VDEC_GetPicBufferSize(FormatTransform(format), width, height, PIXEL_FORMAT_YVU_SEMIPLANAR_420, eDatabw, 32); //仅PrivateVB模式有效 vdecChnAttr.u32FrameBufCnt = 6; //参考帧+显示帧+1, 仅PrivateVB模式有效 HISICHECKRET(HI_MPI_VDEC_CreateChn(m_channel, &vdecChnAttr)); // 3. Attach VB pool VB_POOL_CONFIG_S stVbPoolCfg; memset_s(&stVbPoolCfg, sizeof(VB_POOL_CONFIG_S), 0, sizeof(VB_POOL_CONFIG_S)); stVbPoolCfg.u64BlkSize = VDEC_GetPicBufferSize(vdecChnAttr.enType, width, height, PIXEL_FORMAT_YUV_SEMIPLANAR_420, DATA_BITWIDTH_8, 0); stVbPoolCfg.u32BlkCnt = vdecChnAttr.stVdecVideoAttr.u32RefFrameNum + 3; stVbPoolCfg.enRemapMode = VB_REMAP_MODE_NONE; m_stChnPool.hPicVbPool = HI_MPI_VB_CreatePool(&stVbPoolCfg); if (VB_INVALID_POOLID == m_stChnPool.hPicVbPool) { MLOG_ERRO("ZXB HI_MPI_VB_CreatePool PicVbPool failed"); } memset_s(&stVbPoolCfg, sizeof(VB_POOL_CONFIG_S), 0, sizeof(VB_POOL_CONFIG_S)); stVbPoolCfg.u64BlkSize = VDEC_GetTmvBufferSize(vdecChnAttr.enType, width, height); stVbPoolCfg.u32BlkCnt = vdecChnAttr.stVdecVideoAttr.u32RefFrameNum + 1; stVbPoolCfg.enRemapMode = VB_REMAP_MODE_NONE; m_stChnPool.hTmvVbPool = HI_MPI_VB_CreatePool(&stVbPoolCfg); if (VB_INVALID_POOLID == m_stChnPool.hTmvVbPool) { MLOG_ERRO("ZXB HI_MPI_VB_CreatePool TmvVbPool failed"); } HISICHECKRET(HI_MPI_VDEC_AttachVbPool(m_channel, (VDEC_CHN_POOL_S*)&m_stChnPool)); } { // 4. 高级参数 IPB VDEC_CHN_PARAM_S vdecChnParam{}; HISICHECKRET(HI_MPI_VDEC_GetChnParam(m_channel, &vdecChnParam)); MLOG_INFO("ZXB: enType:{} u32DisplayFrameNum:{} enDecMode:{} enOutputOrder:{} enVideoFormat:{} s32ErrThreshold:{} enCompressMode:{} ", vdecChnParam.enType,vdecChnParam.u32DisplayFrameNum, vdecChnParam.stVdecVideoParam.enDecMode,vdecChnParam.stVdecVideoParam.enOutputOrder, vdecChnParam.stVdecVideoParam.enVideoFormat,vdecChnParam.stVdecVideoParam.s32ErrThreshold, vdecChnParam.stVdecVideoParam.enCompressMode); HISICHECKRET(HI_MPI_VDEC_SetChnParam(m_channel, &vdecChnParam)); vdecChnParam.stVdecVideoParam.enDecMode = VIDEO_DEC_MODE_IPB; // vdecChnParam.stVdecVideoParam.enOutputOrder = VIDEO_OUTPUT_ORDER_DISP; // vdecChnParam.stVdecVideoParam.enCompressMode = COMPRESS_MODE_NONE; // vdecChnParam.stVdecVideoParam.enVideoFormat = VIDEO_FORMAT_TILE_64x16; HISICHECKRET(HI_MPI_VDEC_SetChnParam(m_channel, &vdecChnParam)); } // 5.设置完VDEC高级参数,设置一下显示模式 HISICHECKRET(HI_MPI_VDEC_SetDisplayMode(m_channel, VIDEO_DISPLAY_MODE_PREVIEW)); { // 6 VPSS 通道并绑定 VPSS_GRP_ATTR_S grpAttr{}; grpAttr.u32MaxW = width; grpAttr.u32MaxH = height; grpAttr.stFrameRate.s32SrcFrameRate = -1;//attr.srcFps; grpAttr.stFrameRate.s32DstFrameRate = -1;//attr.destFps; grpAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; grpAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; grpAttr.bNrEn = HI_FALSE; //attr.enableNR ? HI_TRUE : HI_FALSE; if(grpAttr.bNrEn) { grpAttr.stNrAttr.enNrType = VPSS_NR_TYPE_VIDEO; grpAttr.stNrAttr.enNrMotionMode = NR_MOTION_MODE_NORMAL; grpAttr.stNrAttr.enCompressMode = COMPRESS_MODE_FRAME; } HISICHECKRET(HI_MPI_VPSS_CreateGrp(m_channel, &grpAttr)); { VPSS_CHN_ATTR_S vpssChnAttr; vpssChnAttr.u32Width = width; // 解码目标图像宽 vpssChnAttr.u32Height = height; // 解码目标图像高 vpssChnAttr.enChnMode = VPSS_CHN_MODE_USER; // AUTO下不支持帧率控制,不支持getFrame vpssChnAttr.enCompressMode = COMPRESS_MODE_NONE; vpssChnAttr.enDynamicRange = DYNAMIC_RANGE_SDR8; vpssChnAttr.enPixelFormat = PIXEL_FORMAT_YVU_SEMIPLANAR_420; vpssChnAttr.stFrameRate.s32SrcFrameRate = -1; // 源帧率 -1表示不进行帧率控制 vpssChnAttr.stFrameRate.s32DstFrameRate = -1; // 目标帧率 vpssChnAttr.u32Depth = 5; // 要GetFrame不能设置为0 vpssChnAttr.bMirror = HI_FALSE; vpssChnAttr.bFlip = HI_FALSE; vpssChnAttr.stAspectRatio.enMode = ASPECT_RATIO_NONE; vpssChnAttr.enVideoFormat = VIDEO_FORMAT_LINEAR; HISICHECKRET(HI_MPI_VPSS_SetChnAttr(m_channel, VT_DECODER_VPSS_STATIC_CHN_ID, &vpssChnAttr)); HISICHECKRET(HI_MPI_VPSS_EnableChn(m_channel, VT_DECODER_VPSS_STATIC_CHN_ID)); HISICHECKRET(HI_MPI_VPSS_StartGrp(m_channel)); MPP_CHN_S stSrcChn; MPP_CHN_S stDestChn; stSrcChn.enModId = HI_ID_VDEC; stSrcChn.s32DevId = 0; stSrcChn.s32ChnId = m_channel; stDestChn.enModId = HI_ID_VPSS; stDestChn.s32DevId = m_channel; stDestChn.s32ChnId = VT_DECODER_VPSS_STATIC_CHN_ID; HISICHECKRET(HI_MPI_SYS_Bind(&stSrcChn, &stDestChn)); } } // 开始接收数据 HISICHECKRET(HI_MPI_VDEC_StartRecvStream(m_channel));}日志:I1106 16:03:08.832293 2333 HisiVdecChannel.cpp:48] [HisiVdecChannel] HI_MPI_VB_SetConfig(&stVbConfig) -> 0xa0018012I1106 16:03:08.832365 2333 HisiVdecChannel.cpp:50] [HisiVdecChannel] HI_MPI_VB_Init() -> 0x0I1106 16:03:08.832415 2333 HisiVdecChannel.cpp:51] [HisiVdecChannel] HI_MPI_SYS_Init() -> 0x0[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported !I1106 16:03:08.832525 2333 HisiVdecChannel.cpp:54] [HisiVdecChannel] HI_MPI_VDEC_GetModParam(&modParam) -> 0x0I1106 16:03:08.832651 2333 HisiVdecChannel.cpp:56] [HisiVdecChannel] HI_MPI_VDEC_SetModParam(&modParam) -> 0x0I1106 16:03:08.832777 2333 HisiVdecChannel.cpp:59] [HisiVdecChannel] HI_MPI_VPSS_GetModParam(&vpsstModParam) -> 0xffffffffI1106 16:03:08.832841 2333 HisiVdecChannel.cpp:61] [HisiVdecChannel] HI_MPI_VPSS_SetModParam(&vpsstModParam) -> 0xffffffff[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported ![Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported !I1106 16:03:08.835489 2634 VideoFileReader.cpp:250] [DoThreadStart] detected key frame.[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported ![Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported !I1106 16:03:08.837093 2333 HisiVdecChannel.cpp:78] [HisiVdecChannel] HI_MPI_VDEC_CreateChn(m_channel, &vdecChnAttr) -> 0x0I1106 16:03:08.837430 2333 HisiVdecChannel.cpp:103] [HisiVdecChannel] HI_MPI_VDEC_AttachVbPool(m_channel, (VDEC_CHN_POOL_S*)&m_stChnPool) -> 0x0I1106 16:03:08.837487 2333 HisiVdecChannel.cpp:110] [HisiVdecChannel] HI_MPI_VDEC_GetChnParam(m_channel, &vdecChnParam) -> 0x0I1106 16:03:08.837512 2333 HisiVdecChannel.cpp:115] [HisiVdecChannel] ZXB: enType:96 u32DisplayFrameNum:2 enDecMode:1 enOutputOrder:1 enVideoFormat:1 s32ErrThreshold:30 enCompressMode:0I1106 16:03:08.837568 2333 HisiVdecChannel.cpp:116] [HisiVdecChannel] HI_MPI_VDEC_SetChnParam(m_channel, &vdecChnParam) -> 0x0I1106 16:03:08.837597 2333 HisiVdecChannel.cpp:123] [HisiVdecChannel] HI_MPI_VDEC_SetChnParam(m_channel, &vdecChnParam) -> 0xa0058003I1106 16:03:08.837635 2333 HisiVdecChannel.cpp:127] [HisiVdecChannel] HI_MPI_VDEC_SetDisplayMode(m_channel, VIDEO_DISPLAY_MODE_PREVIEW) -> 0x0I1106 16:03:08.838016 2333 HisiVdecChannel.cpp:145] [HisiVdecChannel] HI_MPI_VPSS_CreateGrp(m_channel, &grpAttr) -> 0x0[Func]:mpi_sys_check_bind_chn [Line]:163 [Info]:mod_id:24() is not supported !I1106 16:03:08.838258 2333 HisiVdecChannel.cpp:162] [HisiVdecChannel] HI_MPI_VPSS_SetChnAttr(m_channel, VT_DECODER_VPSS_STATIC_CHN_ID, &vpssChnAttr) -> 0x0I1106 16:03:08.838318 2333 HisiVdecChannel.cpp:164] [HisiVdecChannel] HI_MPI_VPSS_EnableChn(m_channel, VT_DECODER_VPSS_STATIC_CHN_ID) -> 0x0I1106 16:03:08.838351 2333 HisiVdecChannel.cpp:165] [HisiVdecChannel] HI_MPI_VPSS_StartGrp(m_channel) -> 0x0I1106 16:03:08.838377 2333 HisiVdecChannel.cpp:179] [HisiVdecChannel] HI_MPI_SYS_Bind(&stSrcChn, &stDestChn) -> 0x0I1106 16:03:08.838434 2333 HisiVdecChannel.cpp:184] [HisiVdecChannel] HI_MPI_VDEC_StartRecvStream(m_channel) -> 0x0I1106 16:03:08.838464 2333 HisiModuleBinder.cpp:19] [HisiSysBind] HI_MPI_SYS_Bind(&stSrcChn, &stDestChn) -> 0xa0028009I1106 16:03:08.838506 2333 HisiVpssChannel.cpp:44] [SetAttr] HI_MPI_VPSS_SetChnAttr(m_vpssGroup->GetGroup(), m_channel, &chnAttr) -> 0x0I1106 16:03:08.838647 2333 HisiVpssChannel.cpp:14] [HisiVpssChannel] HI_MPI_VPSS_EnableChn(m_vpssGroup->GetGroup(), m_channel) -> 0x0I1106 16:03:08.838721 2333 HisiVpssChannel.cpp:17] [HisiVpssChannel] HI_MPI_VPSS_GetChnAttr(m_vpssGroup->GetGroup(), m_channel, &chnAttr) -> 0x0I1106 16:03:08.838743 2333 HisiVpssChannel.cpp:19] [HisiVpssChannel] HI_MPI_VPSS_SetChnAttr(m_vpssGroup->GetGroup(), m_channel, &chnAttr) -> 0x0