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

dm8168编码3840*2160_30的视频丢帧

大家好:

       我找到一个关于dm8168视频编码丢帧的问题麻烦名位帮忙看一下是什么原因,现象如下:

        1. 视频处理流程: 我的视频输入是通过视频采集端口输入4路1080P30的视频,通过自己编写的一个视频拼接LINK将其拼接成了3840 * 2160_30的视频,然后将视频输入给编码LINK,编码完成后通过网络输出。

         2.出现的问题: 现在我测得编码LINK输出的帧率只有每秒20帧, 而我在拼接LINK中打印信息能确定向编码LINK输入的视频是30帧的。

         3.我的疑问:

                           a. dm8168的EncLink得否完成3840 * 2160_30的编码工作,如果能需要怎么设置? 如果不能有什么其它好的办法.

         4.我的编码程序如下:

/* encode */
/* IVA_HD 高清视频图像加速器 在DM8148中有3个IVA,对于每个IVA用户都可指定其要编解码的通道 */
static SystemVideo_Ivahd2ChMap_Tbl systemVid_encDecIvaChMapTbl =
{
.isPopulated = 1,
/* IVA0 */
.ivaMap[0] =
{
.EncNumCh = 1, /* IVA0 需要处理的视频编码通道数 */
.EncChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0 , 0, 0}, /* 分别是那些通道 */
.DecNumCh = 0, /* IVA0 需要处理的视频解码通道数 */
.DecChList = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, /* 分别是那些通道 */
},
/* IVA1 */
.ivaMap[1] =
{
.EncNumCh = 1,
.EncChList = {0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31},
.DecNumCh = 0,
.DecChList = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0 , 0, 0},
},
/* IVA2 */
.ivaMap[2] =
{
.EncNumCh = 1,
.EncChList = {0, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
.DecNumCh = 0,
.DecChList = {12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
},

};

System_linkControl(
SYSTEM_LINK_ID_M3VIDEO,
SYSTEM_COMMON_CMD_SET_CH2IVAHD_MAP_TBL,
&systemVid_encDecIvaChMapTbl,
sizeof(SystemVideo_Ivahd2ChMap_Tbl),
TRUE
);

EncLink_CreateParams encPrm;

EncLink_CreateParams_Init (&encPrm);
encPrm.chCreateParams[0].format = IVIDEO_H264HP;
encPrm.chCreateParams[0].profile = IH264_HIGH_PROFILE; /* 使用高配置文件 */
encPrm.chCreateParams[0].dataLayout = IVIDEO_FIELD_SEPARATED; /* ? */
encPrm.chCreateParams[0].fieldMergeEncodeEnable = FALSE; /* 区域合并编码关闭 */
encPrm.chCreateParams[0].maxBitRate = -1; /* 没限制 */
encPrm.chCreateParams[0].enableHighSpeed = TRUE;
encPrm.chCreateParams[0].rateControlPreset = IVIDEO_LOW_DELAY; /* 速度管理预测 */
encPrm.chCreateParams[0].encodingPreset = XDM_USER_DEFINED; /* 编码预测 高质量,高速, */
encPrm.chCreateParams[0].enableAnalyticinfo = FALSE; /* 向视频流添加MV数据 */
encPrm.chCreateParams[0].enableWaterMarking = FALSE; /* 给视频增加水印 */

encPrm.chCreateParams[0].defaultDynamicParams.intraFrameInterval = FRAME_OUT_RATE;
encPrm.chCreateParams[0].defaultDynamicParams.inputFrameRate = FRAME_OUT_RATE;
encPrm.chCreateParams[0].defaultDynamicParams.targetBitRate = ENCODE_BITE_RATE;
encPrm.chCreateParams[0].defaultDynamicParams.interFrameInterval = 1;
encPrm.chCreateParams[0].defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
encPrm.chCreateParams[0].defaultDynamicParams.rcAlg = 0 ;
encPrm.chCreateParams[0].defaultDynamicParams.qpMin = 10;
encPrm.chCreateParams[0].defaultDynamicParams.qpMax = 40;
encPrm.chCreateParams[0].defaultDynamicParams.qpInit = -1;
encPrm.chCreateParams[0].defaultDynamicParams.vbrDuration = 8;
encPrm.chCreateParams[0].defaultDynamicParams.vbrSensitivity = 0;
encPrm.inQueParams.prevLinkId = IpcFrameVideoInID;
encPrm.inQueParams.prevLinkQueId= 0;
encPrm.outQueParams.nextLink = IPCBitOutVideoID;
encPrm.numBufPerCh[0] = 24;
encPrm.numBufPerCh[1] = 0;
encPrm.numBufPerCh[2] = 0;
encPrm.numBufPerCh[3] = 0;

请大家帮忙看一下怎么解决,谢谢!

ruimin qin:

回复 Chris Meng:

你好!

        这个视频拼接还有点问题, 我用一个IVAHD编码3840*2160_30可以达到20帧,会什么用两个IVADH分别编码3840*2160_15一共只能达到24帧。

这3个IVAHD 不是独立工作的么? 

Chris Meng:

回复 ruimin qin:

你好,

可能是DDR资源的影响。

请问你编码是否有使用high speed模式,如果没有,配置请参考 http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/58037.aspx。

ruimin qin:

回复 Chris Meng:

我的DDR3时钟是675MHz,改为796MHz时应用程序跑起来就挂掉了, 我已经使能了high seed模式,使用这两个配置来实现的

chCreatePrm->enableHighSpeed = TRUE;

chCreatePrm->encodingPreset = XDM_USER_DEFINED;

现在主要是产生了新的问题VPSS总是重启,报错如下:

[m3vpss ] 138390: CAPTURE: Overflow detected on VIP1, Total Resets = 118

[m3vpss ] 138406: CAPTURE: Overflow detected on VIP0, Total Resets = 119

而且使用的硬件编码器个数越多,重启得就越频繁。

Chris Meng:

回复 ruimin qin:

你好,

现在问题是DDR吞吐瓶颈的可能性很大,还需要你解决如何让DDR运行在800Mhz的问题。是否有尝试过800Mhz下的宽松时序(http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/p/101240/269155.aspx#269155)?

VIP overflow可能是编码器抢占了太多DDR资源,导致VIP不能及时把数据写到DDR导致溢出。

ruimin qin:

回复 Chris Meng:

谢谢你的问题,我也想到了,但我现在这用的板子的DDR芯片就只能跑到1333M, 但我用别一个可以跑到1600再试试。

赞(0)
未经允许不得转载:TI中文支持网 » dm8168编码3840*2160_30的视频丢帧
分享到: 更多 (0)