海思Hi3559A支持单帧多slice解码的方法配置(不花屏不卡顿)
Hi3559A中,默认单帧最多支持16个slice,解码时通过:cat /proc/umap/vdec可以查询到MaxVPSMaxSPSMaxPPSMaxSlice以上是与H.264、H.265解码相关的内存分配参数。如果用默认参数,对于单帧多slice和频繁gop的情况,会出现花屏和卡顿,解决方法是修改sample_comm_vdec.c在SAMPLE_COMM_VDEC_Start函数中,增加
·
Hi3559A中,默认单帧最多支持16个slice,解码时通过:
cat /proc/umap/vdec
可以查询到
MaxVPS MaxSPS MaxPPS MaxSlice
以上是与H.264、H.265解码相关的内存分配参数。
如果用默认参数,对于单帧多slice和频繁gop的情况,会出现花屏和卡顿,解决方法是修改
sample_comm_vdec.c
在SAMPLE_COMM_VDEC_Start函数中,增加VDEC_PRTCL_PARAM_S ProtocolParam的设置就可以了。
代码如下:
VDEC_PRTCL_PARAM_S ProtocolParam;
HI_S32 s32Ret;
if (PT_H264 == pastSampleVdec[i].enType)
{
HI_MPI_VDEC_GetProtocolParam(i, &ProtocolParam);
printf("s32MaxSliceNum = %d, s32MaxSpsNum = %d, s32MaxPpsNum = %d\n", ProtocolParam.stH264PrtclParam.s32MaxSliceNum,
ProtocolParam.stH264PrtclParam.s32MaxSpsNum, ProtocolParam.stH264PrtclParam.s32MaxPpsNum);
ProtocolParam.stH264PrtclParam.s32MaxSliceNum = 300;
ProtocolParam.stH264PrtclParam.s32MaxSpsNum = 32;
ProtocolParam.stH264PrtclParam.s32MaxPpsNum = 256;
s32Ret = HI_MPI_VDEC_SetProtocolParam(i, &ProtocolParam);
if (HI_SUCCESS != s32Ret)
{
SAMPLE_PRT("chn %d HI_MPI_VDEC_SetProtocolParam fail for s32Ret=0x%x!\n", i, s32Ret);
}
}
增加的位置是for(i=0; i<s32ChnNum; i++)中,对各个通道进行设置的代码里,然后重新make生成sample_vdec。
上面是对应H.264的配置,H.265的配置类似,参考《HiMPP V4.0 媒体处理软件开发参考.pdf》的第7章49页,总的956页
更多推荐
已为社区贡献4条内容
所有评论(0)