TI中文支持网
TI专业的中文技术问题搜集分享网站

IPNC RDK IVAHD H264enc参数修改实例

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

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

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

Chris Meng:

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

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

heng:

回复 Chris Meng:

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

Chris Meng:

回复 heng:

你好,

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

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

yang ran:

回复 Chris Meng:

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

Chris Meng:

回复 yang ran:

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

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

s s4:

你好,使用的平台为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 ERROR:-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: retVal == ENC_LINK_S_SUCCESS : failed !!!

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

Chris Meng:

回复 s s4:

你好,

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

s s4:

回复 Chris Meng:

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

修改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

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

s s4:

回复 Chris Meng:

您好,intracoding已提供,帮我看下有没有问题,以及实现main profile/baseline 下的高速模式,还需要修改哪些地方,谢谢

s s4:

回复 Chris Meng:

你好,我使用的编码器版本为REL.500.V.H264AVC.E.IVAHD.02.00.04.01,

在Doc目录下H264_Encoder_HDVICP2_UserGuide.pdf文档第64页,IH264ENC_IntraCodingPreset为IH264_INTRACODING_HIGH_SPEED的前提是:Intra coding params for highspeed encoding.1、Me algo mode should be IH264ENC_MOTIONESTMODE_HIGH_SPEED.2、IH264ENC_TransformBlockSize should be IH264_TRANSFORM_8x8.

而在第68页,IH264ENC_TransformBlockSize 为 IH264_TRANSFORM_8x8,Transform blocks size is 8×8: Valid for only High Profile 

根据编码器数据手册上的信息,是不是这个版本的编码器不支main/baseline profile下的高速模式。

赞(0)
未经允许不得转载:TI中文支持网 » IPNC RDK IVAHD H264enc参数修改实例
分享到: 更多 (0)