IPNC RDK IVAHD H264enc参数修改实例

IPNC RDK IVAHD H264enc参数修改实例

  • 状元69448分

    目前的IPNC RDK默认支持的是High profile的h264编码。为了兼容性的需要,用户也需需要配置main profile或者的是baseline。下面的代码可以实现main profile的配置,baseline也是同理。

    TI的h264编码器提供高质量和高速度的选项,在高质量情况下图像质量最好,但性能略差。在高速度的情况下,性能最优。为了满足系统的要求,用户会需要配置高速模式,在high profile的1080p分辨率use case下,高速度模式已经支持。但在megapixel编码模式和MP/Baseline的情况下,需要做一定修改来支持高速模式。

    如何修改高速模式下的Main profile

    5280.How to change IVAHD h264enc to Main Profile with High Speed Mode based on IPNC SW.pdf

    如果我的回答解决了你的问题,请点击绿色“”按钮,谢谢!

  • 状元69448分

    目前的IPNC RDK代码支持的是P帧的qpMax/min的修改。在实际应用中,为了实现最好的效果,用户需要减少qpMinI的值。为了获得最小的码流来满足码率控制,用户需要增加qpMaxI的值。这两点需要通过下面文档的介绍来修改。

    如何修改默认的qpMaxI/qpMinI/qpI的值。

    4201.How to change IVAHD h264enc to param qpMaxI_qpMinI_qpI.pdf

    如果我的回答解决了你的问题,请点击绿色“”按钮,谢谢!

  • 秀才170分

    此方法适用于dm36x的IPNC SDK 5.1V吗?如果不适用,如何修改?

  • 状元69448分

    你好,

    此方法适用于dm36x的IPNC SDK 5.1V吗?如果不适用,如何修改?

    不可以。两者使用的算法库的参数是不同的。

    如果我的回答解决了你的问题,请点击绿色“”按钮,谢谢!

  • 秀才290分
    您好,请问次方法适用于dvr rdk吗?
  • 状元69448分

    yang ran
    您好,请问次方法适用于dvr rdk吗?

    基本可以使用,DVR RDK里面使用的库是一样的,只是应用程序上可能有些差别,基本是一样的。

    如果我的回答解决了你的问题,请点击绿色“”按钮,谢谢!

  • 秀才20分

    你好,使用的平台为DM8127J3,IPNC_RDKV3.5.0,运行在双通道模式下,H264:1080P,H264:D1.按照pdf文档中的方法修改,出现下面的错误:

    [m3video]  4183: ENCODE: Create in progress ... !!!                                    
     [m3video]  4242: ENCODE: Creating CH0 of 1920 x 1080, pitch = (1920, 1920) [PROGRESSIVE
    ] [NON-TILED  ], bitrate = 8000 Kbps ...                                                
     [m3video] 4349:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[191]::INTERNAL ER
    ROR:-1                                                                                  
     [m3video] ALGCONTROL FAILED:CMD:1                                                      
     [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,                                            
     [m3video] ERROR: XDM_FATALERROR = 15                                                   
     [m3video] ERROR: IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,                          
     [m3video] ERROR: IH264ENC_UNSUPPORTED_H264ENCDYNAMICPARAMS = 31,                       
     [m3video]                                                                              
     [m3video] 4349:ERR::linkID:10000025::channelID:0::errorCode:-5::FileName:links_m3video/
    iva_enc/encLink_h264.c::linuNum:1379::errorCondition:(algStatus == XDM_EOK)             
     [m3video] ENCLINK_H264:HEAPID:0        USED:1896                                       
     [m3video]  4350: Assertion @ Line: 901 in links_m3video/iva_enc/encLink_common.c: retVa
    l == ENC_LINK_S_SUCCESS : failed !!!

    请问还有什么地方需要修改的,多谢!

  • 状元69448分

    你好,

    提示的是IH264ENC_UNSUPPORTED_INTRACODINGPARAMS错误,你能提供一下你的intracoding的动态参数么?

    如果我的回答解决了你的问题,请点击绿色“”按钮,谢谢!

  • 秀才20分

    你好,下面是修改的静态及动态参数:  

    修改1处:static Int enclink_h264_set_params_stream_preset(){...........

    if(staticParams->videnc2Params.profile != IH264_HIGH_PROFILE )
        {
            staticParams->transformBlockSize = IH264_TRANSFORM_4x4;
            staticParams->rateControlParams.scalingMatrixPreset = IH264_SCALINGMATRIX_NONE;
            dynamicParams->rateControlParams.scalingMatrixPreset = IH264_SCALINGMATRIX_NONE;
    #if 0
            staticParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_DEFAULT;
            dynamicParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_DEFAULT;
            staticParams->interCodingParams.interCodingPreset = IH264_INTERCODING_USERDEFINED;
            dynamicParams->interCodingParams.interCodingPreset = IH264_INTERCODING_USERDEFINED;
    #endif
            staticParams->intraCodingParams.intraCodingBias = IH264ENC_INTRACODINGBIAS_HIGH_SPEED;
            dynamicParams->intraCodingParams.intraCodingBias = IH264ENC_INTRACODINGBIAS_HIGH_SPEED;
            staticParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_HIGH_SPEED;
            dynamicParams->intraCodingParams.intraCodingPreset = IH264_INTRACODING_HIGH_SPEED;


            staticParams->interCodingParams.interCodingPreset = IH264_INTERCODING_HIGH_SPEED;
            dynamicParams->interCodingParams.interCodingPreset = IH264_INTERCODING_HIGH_SPEED;


            staticParams->intraCodingParams.lumaIntra4x4Enable = 255;
            dynamicParams->intraCodingParams.lumaIntra4x4Enable = 255;
            staticParams->intraCodingParams.lumaIntra8x8Enable = 0;
            dynamicParams->intraCodingParams.lumaIntra8x8Enable = 0;
        }.......

    }

    修改2处:if((algObj->u.h264AlgIfObj.dynamicParams.videnc2DynamicParams.inputWidth == 1920 &&
                  algObj->u.h264AlgIfObj.dynamicParams.videnc2DynamicParams.inputHeight == 1080 &&
                     algObj->u.h264AlgIfObj.dynamicParams.videnc2DynamicParams.targetFrameRate <= 30000) ||
                        algObj->u.h264AlgIfObj.staticParams.videnc2Params.profile != IH264_HIGH_PROFILE )
                {
                #if 0
                    algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.interCodingPreset = IH264_INTERCODING_USERDEFINED;
                    algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.meAlgoMode = IH264ENC_MOTIONESTMODE_DEFAULT;
                    algObj->u.h264AlgIfObj.dynamicParams.intraCodingParams.intraCodingPreset = IH264_INTRACODING_USERDEFINED;
                     algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.minBlockSizeP = IH264_BLOCKSIZE_8x8;
                     algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.minBlockSizeB = IH264_BLOCKSIZE_8x8;
                   #endif
                       algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.interCodingPreset = IH264_INTERCODING_HIGH_SPEED;
                    algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.meAlgoMode = IH264ENC_MOTIONESTMODE_HIGH_SPEED;
                    algObj->u.h264AlgIfObj.dynamicParams.intraCodingParams.intraCodingPreset = IH264_INTRACODING_HIGH_SPEED;
                    algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.minBlockSizeP = IH264_BLOCKSIZE_16x16;
                    algObj->u.h264AlgIfObj.dynamicParams.interCodingParams.minBlockSizeB = IH264_BLOCKSIZE_16x16;
                }

    修改3处:for (chId=0; chId < VENC_CHN_MAX; chId++) {
            //pContext->h264Profile[chId] = VENC_CHN_HIGH_PROFILE;
            pContext->h264Profile[chId] = VENC_CHN_MAIN_PROFILE;//test main profile with high speed

    下面是只作了"修改3处"的修改,改为MAIN profile;而未做"修改1处,修改2处"的修改,即为原始代码,程序可以正常运行,打印出的动态参数信息:

     [m3video] intraCodingParams -> intraCodingPreset          : 0                                                                      
     [m3video] intraCodingParams -> lumaIntra4x4Enable         : 255                                                                    
     [m3video] intraCodingParams -> lumaIntra8x8Enable         : 0                                                                      
     [m3video] intraCodingParams -> lumaIntra16x16Enable       : 15                                                                     
     [m3video] intraCodingParams -> chromaIntra8x8Enable       : 15                                                                     
     [m3video] intraCodingParams -> chromaComponentEnable      : 1                                                                      
     [m3video] intraCodingParams -> intraRefreshMethod         : 0                                                                      
     [m3video] intraCodingParams -> intraRefreshRate           : 0                                                                      
     [m3video] intraCodingParams -> gdrOverlapRowsBtwFrames    : 0                                                                      
     [m3video] intraCodingParams -> constrainedIntraPredEnable : 0                                                                      
     [m3video] intraCodingParams -> intraCodingBias            : 0

    请帮我看看有没有问题,谢谢!