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页

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐