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.

8127 RDK_V2.8 如何实现720P



在Full Feature的usecase里,修改D1那条流实现720P,代码如下:

...

pCameraOutPrm = &pCameraInstPrm->outParams[1];  

pCameraOutPrm->dataFormat = SYSTEM_DF_YUV420SP_VU;  

pCameraOutPrm->scEnable = FALSE;

pCameraOutPrm->scOutWidth = 1280;   // 720

pCameraOutPrm->scOutHeight = 720;   // 480

pCameraOutPrm->standard = SYSTEM_STD_720P_60;   // SYSTEM_STD_NTSC;//SYSTEM_STD_PAL;  

pCameraOutPrm->outQueId = 1;

...

但从VLC连接看,分辨率还是D1,并没有实现720P,而串口打印信息:

[m3video]  13297: ENCODE: Creating CH1 of 1280 x 720, pitch = (1280, 1280) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ...

没有错误提示,貌似是配置进去了。

请问,v2.8是否支持这样配置,如果支持,是否还有哪里要修改?

谢谢。

Pei Jacky

  • 请问TI的工程师或其他做这个的朋友,能否给些建议?

  • 请问你需要的主码流和附码流分别是多大分辨率和帧率?

    除了上面的修改,你还需要修改ISS驱动部分,把RSZB的输出分辨率改为720P。

    你可以先尝试着主码流下修改。

  • 编辑有问题,请看下面帖子回复
  • 我们用的版本是V2.8.0,这个版本的分辨率已经不需要修改ISS驱动了吧。

    我做过如下修改:

    分辨率修改:

    1.MJPEG_1080P --> MJPEG_720P,板子能正常工作;

    2.H264_1080P --> H264720P,失败。

    3.两条1080P都改成720P,失败。

    (2)、(3)的错误应该是720p那条流引起的,

    出错代码位置:

    encLink_h264.c

    enclink_h264_set_algObject()

    UTILS_assert((status->videnc2Status.bufInfo.minOutBufSize[i].bytes < algCreateParams->mvDataSize));

    h264那条从1080p改到720p后,bufInfo.minOutBufSize[1].bytes的值没变,都是148172;

    而 algCreateParams->mvDataSize的值随着分辨率由194400变为了86400。所以这里校验会错(148172<86400).

    奇怪的是,将h264_1080P改为1600×900,板子能正常工作,上面校验的两个值都发生的了变化且能保证校验通过,不知道为什么720P的时候minOutBufSize[1].byte没有变,和1080p时一样。

    4.将D1改成CIF,失败,串口信息:

    [m3video]  11314: ENCODE: Creating CH1 of 360 x 120, pitch = (360, 360) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ...  

    [m3video] 11422:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[195]::INTERNAL ERROR:-1  

    [m3video] ALGCONTROL FAILED:CMD:1  

    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,  

    [m3video] ERROR: XDM_FATALERROR = 15  

    [m3video] ERROR: IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS = 30,

    以上!

    所以,如果要求高清的支持1080P和720P,其他支持D1和CIF,应该能支持吧,那么720P和CIF该如何实现?

    H264编码修改(profile):

    由High profile的修改Main profile和BaseLine profiel,没有成功。

    修改代码如下:

    ======code========

    1. Venc_params_init() :

    // pContext->h264Profile[chId] = VENC_CHN_HIGH_PROFILE;

    if(chId==0)

       pContext->h264Profile[chId] = VENC_CHN_MAIN_PROFILE;

    2. MultiCh_createTriStreamFullFtr():

    // case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break;  //"TRIPLE_H264"

    case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264MP:IVIDEO_H264MP; break;  //"TRIPLE_H264"

    ======code========

    附件是修改profile的错误信息

    8127是否支持Main profile和Baseline profile编码,如果支持,如何修改?

    以上用的都是在fullfeature usecase.

  • 能否在最新的v3.2代码上尝试是否有还有类似的问题?

    DM8127的h264enc支持baseline/MP/HP。附件的错误提示已经提示你配置的问题在哪里,一个是SCALINGMATRIXPRESET,一个是TRANSFORMBLOCKSIZE。

    请查看h264enc user guide,你可以看到这两个错误的具体解释,以及这两个参数目前的配置只有HP才支持,需要修改

    scalingMatrixPreset=0

    IH264ENC_TransformBlockSize=IH264_TRANSFORM_4x4

  • Hi, Chris Meng

    对于Error:

    IH264ENC_PROFILE_INCOMPLAINT_TRANSFORMBLOCKSIZE = 3

    IH264ENC_PROFILE_INCOMPLAINT_SCALINGMATRIXPRESET = 5

    我已经修改掉了,修改代码

    encLink_h264.c

    line:653:  staticParams->transformBlockSize = IH264_TRANSFORM_4x4;//IH264_TRANSFORM_8x8 ;

    line:661:  staticParams->rateControlParams.scalingMatrixPreset =

                           IH264_SCALINGMATRIX_NONE;//IH264_SCALINGMATRIX_NORMAL;

    line:738:  staticParams->transformBlockSize  = IH264_TRANSFORM_4x4;//IH264_TRANSFORM_8x8 ;

    line:752:  staticParams->transformBlockSize = IH264_TRANSFORM_4x4;//IH264_TRANSFORM_8x8 ;

    line:1080:  dynamicParams->rateControlParams.scalingMatrixPreset =

                           IH264_SCALINGMATRIX_NONE;//IH264_SCALINGMATRIX_NORMAL;

    下面的错误我找不到如何修改!!:

    [m3video] ALGCONTROL FAILED:CMD:6

    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,

    [m3video] ERROR: XDM_FATALERROR = 15

    [m3video] ERROR: IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,

    [m3video] 11216:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[195]::INTERNAL ERROR:-1

    [m3video] ALGCONTROL FAILED:CMD:9

    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,

    [m3video] ERROR: XDM_FATALERROR = 15

    [m3video] ERROR: IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,

    [m3video] 11216:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[195]::INTERNAL ERROR:-1

    [m3video] ALGCONTROL FAILED:CMD:3

    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,

    [m3video] ERROR: XDM_FATALERROR = 15

    [m3video] ERROR: IH264ENC_UNSUPPORTED_INTRACODINGPARAMS = 23,

    [m3video]  

    [m3video] 11217:ERR::linkID:10000024::channelID:0::errorCode:-5::FileName:links_m3video/iva_enc/encLink_h264.c::linuNum:1336::errorCondition:(algStatus == XDM_EOK)

    [m3video] ENCLINK_H264:HEAPID:0        USED:1896

    [m3video]  11218: Assertion @ Line: 907 in links_m3video/iva_enc/encLink_common.c: retVal == ENC_LINK_S_SUCCESS : failed !!!

    <h264_user_guide>上对于讲IH264ENC_IntraCodingParams中任何参数配置不正确就好出现IH264ENC_UNSUPPORTED_INTRACODINGPARAMS 错误,我没找到具体是哪个参数配置不正确!

    对于这个问题,有没有一个具体的文档,配置MP和BP都需要配置哪些地方?

  • Jacky,

    在h264enc 的user guide里面有清楚的描述这个问题是在没有配置为HP/MP的时候使用了cabac。

    解决方法就是不使用cabac,而是cavlc。

    IH264ENC_PROFILE_INCOMPLAINT_ENTROPYCODINGMODE

    Bit 6 - Profile in-complaint entropycoding mode setting.

    This error is set when cabac is used without IH264_HIGH_PROFILE/MAIN_PROFILE.

    This is create time error

  • Hi, Chris

    IH264ENC_PROFILE_INCOMPLAINT_ENTROPYCODINGMODE

    这个错误从哪看出来的?

    串口打印没有这个啊?

  • 抱歉,搜错关键字了。请问你熵变化(ENTROPYCODING)设置正确么?

    如果配置正确还有上面的错误,能否共享一下你所有的参数配置?

  • 我的配置都是默认的,(IPNC V2.8.0 Fullfeature usecase)

    只是在Venc和mcfw usecase做了下面修改:

    ======code========

    1. Venc_params_init() :

    // pContext->h264Profile[chId] = VENC_CHN_HIGH_PROFILE;

      pContext->h264Profile[chId] = VENC_CHN_MAIN_PROFILE;

    2. MultiCh_createTriStreamFullFtr():

    // case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264HP:IVIDEO_H264HP; break;  //"TRIPLE_H264"

    case 8: pLinkChPrm->format = (i==0)? IVIDEO_H264MP:IVIDEO_H264MP; break;  //"TRIPLE_H264"

    ======code========

    TI的开发不是基于MCFW和link的吗,对于这个BP、MP的配置,TI是否做过相关测试?如果做过,能否告知修改方式?

    我觉得更快的方法就是您那边也做一下相关的修改。

  • Hi, Chris

    V3.2已经能正确配置HP和BP了!但是分辨率修改还不成功!

    我需要做如下修改:

    1. 将fullfeature usecase中的H264_1080p改成720p;

    2. 将D1改成CIF(352*288);

    我的修改方式如下(修改函数MultiCh_createTriStreamFullFtr()):

    720p分辨率可以通过两种方式修改,

    1是直接修改camere输出分辨率,这样两条1080p(h264和mjpeg)都将改为720p;

    2是在h264_1080p那条流上加一个scaler link。

    这两种方式都会引起assert错误:

    [m3video]  9728: ENCODE: Creating CH0 of 1280 x 720, pitch = (1280, 1280) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ...

    [m3video]  9834: Assertion @ Line: 863 in links_m3video/iva_enc/encLink_h264.c: (status->videnc2Status.bufInfo.minOutBufSize[i].bytes < algCreateParams->mvDataSize) : failed !!!

    CIF分辨率修改:

    直接将D1的camera输出分辨率改为CIF,错误信息:

    [m3video]  11314: ENCODE: Creating CH1 of 360 x 120, pitch = (360, 360) [PROGRESSIVE] [NON-TILED  ], bitrate = 2000 Kbps ...  

    [m3video] 11422:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[195]::INTERNAL ERROR:-1  

    [m3video] ALGCONTROL FAILED:CMD:1  

    [m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,  

    [m3video] ERROR: XDM_FATALERROR = 15  

    [m3video] ERROR: IH264ENC_UNSUPPORTED_VIDENC2DYNAMICPARAMS = 30,

    所以,我想知道,是我的切入点不对,还是其他别的原因!

    能否告诉我,具体的实现方式?

    万分感谢!

  • 建议一个流一个流的调试,关于主流videnc2Status.bufInfo.minOutBufSize[i].bytes < algCreateParams->mvDataSize

    这个说明mvDataSize设置大了,可以跟一下看为什么,

    关于附流,enc link中有个参数print的开关,默认是关的,可以打开确认参数.