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.

[参考译文] TMDXEVM8148:DM814x 编码器

Guru**** 2546020 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/697357/tmdxevm8148-dm814x-encoder

器件型号:TMDXEVM8148

您好!

我正在使用两个评估板(每个 TMDXEVM8148)。 一个电路板上的应用程序正在捕获视频(PAL/NTSC)并对 H.264 AVC 的帧进行编码。

这些帧通过 UDP 传输到另一个电路板。 接收器板对帧进行解码并显示它们。  

问题:

当接收器板在发送器板之前唤醒并接收所有帧 A 时-视频显示正确。

但是   、当发送器板在接收器板尚未唤醒时开始传输帧、因此无法接收 第一个帧(包含 SPS 和 pps 零)。  

在这种情况下,我们会看到几分钟的白屏,之后,视频会显示在显示屏上。

请帮我解决这个问题。

B.R

软件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shlomo Weiss、

    您能回答以下问题吗:

    1. 您使用的 H.264编码器和解码器有哪些版本?
    2.  您的应用程序中设置了什么时段内间隔值? 尝试将其设置为30。  
    3. 如果#2、无法解决问题、请提供完整的 H.264编码器参数集?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Prashanth,

    感谢您的回复。

     H.264编码器和解码器版本为 h264enc_02_00_02_02 和 h264vdec 02_00_07_00

    2.设置 时段内间隔 没有帮助

    3.编码参数

    OMX_ERRORTYPE IL_ClientSetEncodeParams (IL_Client *pAppData)

    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
    OMX_HANDLETYPE pHandle =空;
    OMX_VIDEO_PARAM_PROFILEVELTYPE tProfileLevel;
    OMX_VIDEO_PARAM_ENCODER_PRESETTYPE 编码器预设;
    OMX_VIDEO_PARAM_BITRATYPE tVidEncBitRate;
    OMX_VIDEO_PARAM_PORTFORMATTYPE tVideoParams;
    OMX_PARAM_PORTDESINITTYPE tPortDef;
    OMX_VIDEO CONFIG_DYNAMICPARAMS tDynParams;
    OMX_VIDEO PARAM_STATICPARAMS tStaticParam;
    OMX_VIDEO_CONFIG_QPSETTINGSTYPE s_dyn;

    pHandle = pAppData->pEncHandle;

    /*要编码的帧数*/
    pAppData->encILComp->numFrames=6;


    OMX_INIT_PARAM (_tPortDef);
    /*获取端口数*/

    tPortDef.nPortIndex = OMX_VIDENC_INPUT_PORT;
    eError = OMX_GetParameter (pHandle、OMX_IndexParamPortDefinition、&tPortDef);
    /*设置所需缓冲区的实际数量*/
    tPortDef.nBufferCountActual = IL_CLIENT_ENC_INPUT_Buffer_COUNT;
    /*设置视频格式设置*/

    tPortDef.format.video.nFrameWidth = 720;
    tPortDef.format.video.nStride = 720;
    tPortDef.format.video.nFrameHeight = 576;

    tPortDef.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
    /* OMX_IndexParamVideoPortFormat 的设置*/
    tPortDef.nBufferSize =(720 * 576 * 3)>> 1;
    eError = OMX_SetParameter (pHandle、OMX_IndexParamPortDefinition、&tPortDef);
    if (eError!= OMX_ErrorNone)

    错误("无法为输入\n"设置编码 OMX_IndexParamPortDefinition);

    OMX_INIT_PARAM (_tPortDef);

    tPortDef.nPortIndex = OMX_VIDENC_OUTPUT 端口;
    eError = OMX_GetParameter (pHandle、OMX_IndexParamPortDefinition、&tPortDef);
    /* OMX_IndexParamPortDefinition 的设置*/
    /*设置所需缓冲区的实际数量*/

    tPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC;
    tPortDef.format.video.xFramerate =(6 << 16);
    tVideoParams.xFramerate =(6 << 16);
    tPortDef.format.video.nBitrate = 50000;
    /* OMX_IndexParamVideoPortFormat 的设置*/

    eError = OMX_SetParameter (pHandle、OMX_IndexParamPortDefinition、&tPortDef);
    if (eError!= OMX_ErrorNone)

    错误("无法为输出设置编码 OMX_IndexParamPortDefinition \n");

    /*可使用以下索引来更改比特率*/
    OMX_INIT_PARARAM (&tVidEncBitRate);

    tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT;
    eError = OMX_GetParameter (pHandle、OMX_IndexParamVideoBitrate、
    tVidEncBitRate);

    tVidEncBitRate.eControlRate = OMX_Video_ControlRateVariable;
    tVidEncBitRate.nTargetBitrate = 50000;
    eError = OMX_SetParameter (pHandle、OMX_IndexParamVideoBitrate、
    tVidEncBitRate);

    if (eError!= OMX_ErrorNone)

    错误("设置编码比特率失败\n");

    /*设置 H264的配置文件和级别*/
    OMX_init_Param (&tProfileLevel);
    tProfileLevel.nPortIndex = OMX_VIDENC_OUTPUT;

    eError = OMX_GetParameter (pHandle、OMX_IndexParamVideoProfileLevelCurrent、
    tProfileLevel (&T);

    /*设置为基线4.2级*/

    tProfileLevel.eProfile = OMX_VIDEO_AVCProfileMain;
    //tProfileLevel.eProfile = OMX_VIDEO_AVCProfileBaseline;
    tProfileLevel.eLevel = OMX_VIDEO_AVCLevel42;

    eError = OMX_SetParameter (pHandle、OMX_IndexParamVideoProfileLevelCurrent、
    tProfileLevel (&T);
    if (eError!= OMX_ErrorNone)
    错误("无法设置编码器 pfofile \n");

    /*编码器预设设置*/
    OMX_INIT_PARAM (&T 编码器预设);
    tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT;
    eError = OMX_GetParameter (pHandle、OMX_TI_IndexVideoParamEncoderPreset、
    编码器预设(&T);

    tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_Default;
    tEncoderPreset.eRateControlPreset = OMX_Video_RC_None;

    eError = OMX_SetParameter (pHandle、OMX_TI_IndexVideoEncoderPreset、
    编码器预设(&T);
    if (eError!= OMX_ErrorNone)

    错误("编码器预设失败"\n);

    /* IH264VENC_STATIC 参数*/


    OMX_init_Param (_tStaticParam);

    tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT;

    eError = OMX_GetParameter (pHandle、OMX_TI_IndexVideoParameterStaticParams、
    tStaticParam (&T);

    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_USER_defined;



    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;


    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level = IH264_LEVEL_42;


    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY;/* CBR */


    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.minBitRate = 0;
    tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.maxBitRate =-1;
    tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra4x4Enable = 0x1f;

    tStaticParam.videoStaticParams.h264EncStaticParams.numTemporalLayer = IH264_Temperature_Layers_1;


    /*仅限基本配置文件*/
    tStaticParam.videoStaticParams.h264EncStaticParams.transformBlockSize = IH264_transform_4x4;
    tStaticParam.videoStaticParams.h264EncStaticParams.entropyCodingMode = IH264_ENTROPYCODING_CAVLC;
    /*表示基本配置文件结束*/

    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_userdefined;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence |= 0x180;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture |= 0x180;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture &&~0x180;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskNonIntraPicture &&~0x180;
    tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskEndOfSequence |= 0x180;


    tStaticParam.videoStaticParams.h264EncStaticParams.IDRFrameInterval = 10;  

    eError = OMX_SetParameter (pHandle、OMX_TI_IndexParamVideoStaticParams、
    tStaticParam (&T);



    OMX_INIT_PARAM (&s_dyn);

    S_dyn.nPortIndex = OMX_VIDENC_OUTPUT;

    eError = OMX_getconfig (pHandle、
    OMX_TI_IndexConfigVideoQPSettings、
    s_dyn);

    s_dyn.nQpI = 40;// 36 //初始设置被注释
    s_dyn.nQpMinI = 40;// 36
    s_dyn.nQpMaxI = 42;// 36
    s_dyn.nQpP = 36;// 36
    s_dyn.nQpMinP = 36;// 36
    s_dyn.nQpMaxP = 38;// 36
    s_dyn.nQpOffsetB = 4;// 4.
    s_dyn.nQpMinB = 5;// 51
    S_dyn.nQpMaxB = 50;// 26.


    eError = OMX_SetConfig (pHandle、
    OMX_TI_IndexConfigVideoQPSettings、//OMX_TI_IndexParamVideoDynamicParams、
    s_dyn);
    if (eError!= OMX_ErrorNone)

    printf ("\n OMX_SetConfig 中的错误:%x\n"、eError);

    其他

    printf ("\n 在 OMX_SetConfig 中成功\n");


    /*在创建 Use Set_parameters 之前,要更改运行时,请使用 set_config
    所有支持编解码器的参数均可使用此索引*/进行设置

    OMX_init_Param (&tDynParams);

    tDynParams.nPortIndex = OMX_VIDENC_OUTPUT;

    eError = OMX_GetParameter (pHandle、OMX_TI_IndexVideoDynamicParams、
    tDynParams (&T);

    /*设置 I 帧间隔*/
    tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.intraFrameInterval = pAppData->GOP_SIZE;

    eError = OMX_SetParameter (pHandle、OMX_TI_IndexVideoDynamicParams、
    tDynParams (&T);

    返回 eError;

    BR

    软件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 、Shlomo Weiss、

    感谢您的参数。

    [引用 user="Shlomo Weiss"]1.  H.264编码器和解码器的版本为 h264enc_02_00_02_02 和 h264vdec 02_00_07_00[/quot]

    您能否将编解码器版本升级到最新版本? 它们有很多错误修复、您目前正在使用这些修复。

    H.264编码器:02.00.09.00

    H.264解码器:02.00.21.00