大家好:
我找到一个关于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用户都可指定其要编解码的通道 */
sta
tic 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 = I
PCBitOutVideoID;
encPrm.numBufPerCh[0] = 24;
encPrm.numBufPerCh[1] = 0;
encPrm.numBufPerCh[2] = 0;
encPrm.numBufPerCh[3] = 0;
请大家帮忙看一下怎么解决,谢谢!