完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
大家好:
我找到一个关于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个回答
|
|
你好,
目前TI的h264enc是基于单个IVAHD的。即使是CYG4的DM8168也不能完成一个IVAHD实现你需要的分辨率的30编码。 能否只拼接两个1080p图像,利用两个IVAHD分别编码一个拼接图像,在解码侧在把2个拼接的图像再进行拼接? |
|
|
|
物是人非aaa 发表于 2018-6-21 01:50 你好! 谢谢你的解答,问题解决了。 我在拼接完后把一个通道的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; |
|
|
|
物是人非aaa 发表于 2018-6-21 01:50 你好! 这个视频拼接还有点问题, 我用一个IVAHD编码3840*2160_30可以达到20帧,会什么用两个IVADH分别编码3840*2160_15一共只能达到24帧。 这3个IVAHD 不是独立工作的么? |
|
|
|
asd002 发表于 2018-6-21 02:17 你好, 可能是DDR资源的影响。 请问你编码是否有使用high speed模式,如果没有,配置请参考 http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/58037.aspx。 |
|
|
|
物是人非aaa 发表于 2018-6-21 02:29 我的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 而且使用的硬件编码器个数越多,重启得就越频繁。 |
|
|
|
asd002 发表于 2018-6-21 02:39 你好, 现在问题是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导致溢出。 |
|
|
|
物是人非aaa 发表于 2018-6-21 02:57 谢谢你的问题,我也想到了,但我现在这用的板子的DDR芯片就只能跑到1333M, 但我用别一个可以跑到1600再试试。 |
|
|
|
只有小组成员才能发言,加入小组>>
348 浏览 1 评论
542 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
786 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
658 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1140 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
74浏览 29评论
248浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
261浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
209浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
67浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 12:08 , Processed in 1.275364 second(s), Total 90, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号