TIwilliam hill官网
直播中

胡楚翘

7年用户 218经验值
私信 关注
[问答]

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;

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

回帖(7)

乔婧

2018-6-21 01:50:55
你好,
目前TI的h264enc是基于单个IVAHD的。即使是CYG4的DM8168也不能完成一个IVAHD实现你需要的分辨率的30编码。
能否只拼接两个1080p图像,利用两个IVAHD分别编码一个拼接图像,在解码侧在把2个拼接的图像再进行拼接?
举报

胡楚翘

2018-6-21 02:04:07
引用: 物是人非aaa 发表于 2018-6-21 01:50
你好,
目前TI的h264enc是基于单个IVAHD的。即使是CYG4的DM8168也不能完成一个IVAHD实现你需要的分辨率的30编码。
能否只拼接两个1080p图像,利用两个IVAHD分别编码一个拼接图像,在解码侧在把2个拼接的图像再进行拼接?

你好!
        谢谢你的解答,问题解决了。
        我在拼接完后把一个通道的3840 * 2160_30的视频数据又分为两个通道(每个通道就是3840 * 2160_15)给传给编码LINK,这样每个通道就可以一个IVAHD
代码修改如下:
  
/* 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 = [1, 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 = 2,
.EncChList = [0, 1, 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_ChCreateParams *chCreatePrm;
EncLink_CreateParams_Init (&encPrm);
for(chId = 0; chId < MOSAIC_OUTPUT_CH_NUM; chId++)
[
chCreatePrm = &(encPrm.chCreateParams[chId]);
chCreatePrm->format = IVIDEO_H264HP;
chCreatePrm->profile = IH264_HIGH_PROFILE; /* 使用高配置文件 */
chCreatePrm->dataLayout = IVIDEO_FIELD_SEPARATED; /* ? */
chCreatePrm->fieldMergeEncodeEnable = FALSE; /* 区域合并编码关闭 */
chCreatePrm->maxBitRate = -1; /* 没限制 */
chCreatePrm->enableHighSpeed = TRUE;
chCreatePrm->rateControlPreset = IVIDEO_LOW_DELAY; /* 速度管理预测 */
chCreatePrm->encodingPreset = XDM_USER_DEFINED; /* 编码预测 高质量,高速, */
chCreatePrm->enableAnalyticinfo = FALSE; /* 向视频流添加MV数据 */
chCreatePrm->enableWaterMarking = FALSE; /* 给视频增加水印 */
chCreatePrm->defaultDynamicParams.intraFrameInterval = FRAME_OUT_RATE;
chCreatePrm->defaultDynamicParams.inputFrameRate = FRAME_OUT_RATE;
chCreatePrm->defaultDynamicParams.targetBitRate = ENCODE_BITE_RATE;
chCreatePrm->defaultDynamicParams.interFrameInterval = 1;
chCreatePrm->defaultDynamicParams.mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
chCreatePrm->defaultDynamicParams.rcAlg = 0 ;
chCreatePrm->defaultDynamicParams.qpMin = 10;
chCreatePrm->defaultDynamicParams.qpMax = 40;
chCreatePrm->defaultDynamicParams.qpInit = -1;
chCreatePrm->defaultDynamicParams.vbrDuration = 8;
chCreatePrm->defaultDynamicParams.vbrSensitivity = 0;
]

encPrm.inQueParams.prevLinkId = IpcFrameVideoInID;
encPrm.inQueParams.prevLinkQueId= 0;
encPrm.outQueParams.nextLink = IPCBitOutVideoID;
encPrm.numBufPerCh[0] = 6;
encPrm.numBufPerCh[1] = 6;
encPrm.numBufPerCh[2] = 6;
encPrm.numBufPerCh[3] = 6;
举报

胡楚翘

2018-6-21 02:17:20
引用: 物是人非aaa 发表于 2018-6-21 01:50
你好,
目前TI的h264enc是基于单个IVAHD的。即使是CYG4的DM8168也不能完成一个IVAHD实现你需要的分辨率的30编码。
能否只拼接两个1080p图像,利用两个IVAHD分别编码一个拼接图像,在解码侧在把2个拼接的图像再进行拼接?

你好!
        这个视频拼接还有点问题, 我用一个IVAHD编码3840*2160_30可以达到20帧,会什么用两个IVADH分别编码3840*2160_15一共只能达到24帧。
这3个IVAHD 不是独立工作的么? 
举报

乔婧

2018-6-21 02:29:31
引用: asd002 发表于 2018-6-21 02:17
你好!
        这个视频拼接还有点问题, 我用一个IVAHD编码3840*2160_30可以达到20帧,会什么用两个IVADH分别编码3840*2160_15一共只能达到24帧。
这3个IVAHD 不是独立工作的么? 

你好,
可能是DDR资源的影响。
请问你编码是否有使用high speed模式,如果没有,配置请参考 http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/58037.aspx。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分