This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM368 H.264编码及ffmpeg解码问题



专家:

        我们使用DM368 H.264编码1080P的视频。

        将H.264编码后的码流保存为H.264文件。然后使用ffmpeg(v 1.0) h.264 decode进行解码。
        解码时发现以下错误信息:
        “左边帧内块(0, y)不能用于该帧内模式”。(0, y) is 宏块的位置

        请问这是什么原因引起的?

        谢谢大家~~~

       以下是H.264的配置

       

初始化参数
pObj->params.maxHeight = create->height;
pObj->params.maxWidth = create->width;
pObj->params.maxFrameRate = ALD_VID_ENC_MAX_FRAMERATE;
pObj->params.maxBitRate = ALD_VID_ENC_MAX_BITRATE;
pObj->params.inputChromaFormat = XDM_YUV_420SP;
pObj->params.dataEndianness = XDM_BYTE;
pObj->params.maxInterFrameInterval = 1;
pObj->params.inputContentType = IVIDEO_PROGRESSIVE;
pObj->params.reconChromaFormat = XDM_YUV_420SP;
pObj->params.size = sizeof(IH264VENC_Params);
pObj->params.rateControlPreset = IVIDEO_USER_DEFINED;
pObj->params_h264.profileIdc = 100;
pObj->params_h264.levelIdc = IH264VENC_LEVEL_40;
pObj->params_h264.Log2MaxFrameNumMinus4 = 0;
pObj->params_h264.ConstraintSetFlag = 0;
pObj->params_h264.entropyMode = 1;
pObj->params_h264.transform8x8FlagIntraFrame = 0;
pObj->params_h264.transform8x8FlagInterFrame = (create->width>2048)?0:1;
pObj->params_h264.enableVUIparams = 7;
pObj->params_h264.meAlgo = 0;
pObj->params_h264.seqScalingFlag = 1;
pObj->params_h264.enableARM926Tcm = 0;
pObj->params_h264.enableDDRbuff = (create->ddrEnable) ? 1 : 0;
pObj->params_h264.sliceMode = 3;
pObj->params_h264.EnableLongTermFrame = 0;
pObj->params_h264.outputDataMode = IH264VENC_TI_ENTIREFRAME;
pObj->params_h264.sliceFormat = IH264VENC_TI_BYTESTREAM;
pObj->params.encodingPreset = XDM_HIGH_QUALITY;
pObj->params_h264.encQuality = 2;
pObj->params_h264.numTemporalLayers = 0;
pObj->params_h264.svcSyntaxEnable = XDAS_FALSE;

动态参数配置
pObj->dynamicParams.intraFrameInterval = 0;
pObj->dynamicParams.forceFrame = IVIDEO_NA_FRAME;
pObj->dynamicParams_h264.sliceSize = ((pObj->createPrm.height/16)*pObj->createPrm.packetsize)/100;
pObj->dynamicParams_h264.airRate = 0;
pObj->dynamicParams_h264.intraFrameQP = 28;//pObj->createPrm.qpinit;
pObj->dynamicParams_h264.interPFrameQP = 28;//pObj->createPrm.qpinit;
pObj->dynamicParams_h264.initQ = 28;//pObj->createPrm.qpinit;
pObj->dynamicParams_h264.rcQMax = 51;//(pObj->createPrm.qpmax>51)?51:pObj->createPrm.qpmax;
pObj->dynamicParams_h264.rcQMin = 1;//(pObj->createPrm.qpmin<=0)?1:pObj->createPrm.qpmin;
pObj->dynamicParams_h264.rcQMaxI = 51;//(pObj->createPrm.qpmax>51)?51:pObj->createPrm.qpmax;
pObj->dynamicParams_h264.rcQMinI = 1;//(pObj->createPrm.qpmin<=0)?1:pObj->createPrm.qpmin;
pObj->dynamicParams_h264.maxDelay = 2000;
pObj->dynamicParams_h264.aspectRatioX = 1;
pObj->dynamicParams_h264.aspectRatioY = 1;
pObj->dynamicParams_h264.lfDisableIdc = 0;
pObj->dynamicParams_h264.enableBufSEI = 1; /*!< Enable Buffering period SEI */
pObj->dynamicParams_h264.enablePicTimSEI = 1; /*!< Enable Picture Timing SEI */
pObj->dynamicParams_h264.perceptualRC = 1;
pObj->dynamicParams_h264.idrFrameInterval = pObj->createPrm.keyFrameInterval;
pObj->dynamicParams_h264.mvSADoutFlag = pObj->createPrm.mbMvOutEnable;
pObj->dynamicParams_h264.resetHDVICPeveryFrame = pObj->createPrm.resetHDVICP;
pObj->dynamicParams_h264.enableROI = 1;
pObj->dynamicParams_h264.metaDataGenerateConsume = 0;
pObj->dynamicParams_h264.maxBitrateCVBR = 0;
pObj->dynamicParams_h264.interlaceRefMode = 0;
pObj->dynamicParams_h264.enableGDR = 0;
pObj->dynamicParams_h264.GDRduration = 0;
pObj->dynamicParams_h264.GDRinterval = 0;
pObj->dynamicParams_h264.LongTermRefreshInterval = 0;
pObj->dynamicParams_h264.UseLongTermFrame = 0;
pObj->dynamicParams_h264.SetLongTermFrame = 0;
pObj->dynamicParams_h264.CustomScaleMatrix_Buffer = NULL;
pObj->dynamicParams_h264.CVBRsensitivity = 0;
pObj->dynamicParams_h264.CVBRminbitrate = 0;
pObj->dynamicParams_h264.LBRmaxpicsize = 0;
pObj->dynamicParams_h264.LBRminpicsize = 0;
pObj->dynamicParams_h264.LBRskipcontrol = 0x050004;
pObj->dynamicParams_h264.maxHighCmpxIntCVBR = 0;
pObj->dynamicParams_h264.disableMVDCostFactor = 0;
pObj->dynamicParams_h264.putDataGetSpaceFxn = NULL;
pObj->dynamicParams_h264.dataSyncHandle = NULL;
pObj->dynamicParams_h264.VUI_Buffer->timingInfoPresentFlag= 1;pObj->dynamicParams_h264.VUI_Buffer->timeScale = 240*(pObj->createPrm.framerate/1000);
pObj->dynamicParams_h264.VUI_Buffer->numUnitsInTicks = 120;