在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
Pei Jacky:
请问TI的工程师或其他做这个的朋友,能否给些建议?
Chris Meng:
请问你需要的主码流和附码流分别是多大分辨率和帧率?
除了上面的修改,你还需要修改ISS驱动部分,把RSZB的输出分辨率改为720P。
你可以先尝试着主码流下修改。
Pei Jacky:
回复 Chris Meng:
编辑有问题,请看下面帖子回复
Pei Jacky:
回复 Chris Meng:
我们用的版本是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.
Chris Meng:
回复 Pei Jacky:
能否在最新的v3.2代码上尝试是否有还有类似的问题?
DM8127的h264enc支持baseline/MP/HP。附件的错误提示已经提示你配置的问题在哪里,一个是SCALINGMATRIXPRESET,一个是TRANSFORMBLOCKSIZE。
请查看h264enc user guide,你可以看到这两个错误的具体解释,以及这两个参数目前的配置只有HP才支持,需要修改
scalingMatrixPreset=0
IH264ENC_TransformBlockSize=IH264_TRANSFORM_4x4
Pei Jacky:
回复 Chris Meng:
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都需要配置哪些地方?
Chris Meng:
回复 Pei Jacky:
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
Pei Jacky:
回复 Chris Meng:
Hi, Chris
IH264ENC_PROFILE_INCOMPLAINT_ENTROPYCODINGMODE
这个错误从哪看出来的?
串口打印没有这个啊?
Chris Meng:
回复 Pei Jacky:
抱歉,搜错关键字了。请问你熵变化(ENTROPYCODING)设置正确么?
如果配置正确还有上面的错误,能否共享一下你所有的参数配置?
Pei Jacky:
回复 Chris Meng:
我的配置都是默认的,(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是否做过相关测试?如果做过,能否告知修改方式?
我觉得更快的方法就是您那边也做一下相关的修改。