在dm8168中我的osd叠加出来,如果画面静止 的话显示效果是正常的,但是如果画面变化比较剧烈,显示不正常,osd叠加的内容会出现飘得现象,画面剩余部分会有比较严重的马赛克现象,如图1。我把osd叠加去掉,dsp什么都不做然后晃动画面发现显示不会出现马赛克。这是不是说明是SWOSD_blendWindow函数造成的?
然后我再画面上画两根线,晃动画面,发现也有很严重的飘得现象。。这是怎么回事
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在dm8168中我的osd叠加出来,如果画面静止 的话显示效果是正常的,但是如果画面变化比较剧烈,显示不正常,osd叠加的内容会出现飘得现象,画面剩余部分会有比较严重的马赛克现象,如图1。我把osd叠加去掉,dsp什么都不做然后晃动画面发现显示不会出现马赛克。这是不是说明是SWOSD_blendWindow函数造成的?
然后我再画面上画两根线,晃动画面,发现也有很严重的飘得现象。。这是怎么回事
Brad,
请问你系统(DDR)的负荷是否比较重?如果是,可能是DDR带宽不够导致的问题。请参考下面论坛讨论里面的文档,调整各个访问DDR的master的优先级。
https://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/716/p/475154/1708797
这个应该不是啊!为了测试 我只画了很短的两根线都会这样,处理的数据很少,每帧处理时间不到1ms,这是不是说明不是ddr3造成的
Brad,
不单单是SWOSD处理的复杂度,是你系统访问DDR的loading。
简单来说,如果你不编码,只是本地显示,是否会有同样的问题?
dsp不处理或者在dsp里面处理的时候如果不访问ddr3的时候 没有出现这个问题
有编码解码 只要dsp不对像素点进行操作就不会有马赛克。但是编码解码也去读ddr3了,是不是说明是dsp读ddr3的问题?
还有就是 我再dsp里面做memcpy,把图像拷贝一下,不做其他操作,输出没有马赛克,这应该可以说明和访问ddr3 没有关系吧?
Brad,
请问我下面的理解是否正确?
使用DSP处理SWOSD+显示,编码,会出现该问题
如果上述理解正确,请问如果DSP处理SWOSD+显示,不编码,是否会出现该问题?
是的 使用DSP处理SWOSD+显示,编码,会马赛克。我们这个是没有本地显示的,,都是编码后通过网络发送出去显示的,所以测不了不编码的效果。
我测试过两种情况:
1 在alg_priv.c中定义一个数组,每一帧都memcpy到这个数组中,DSP不做其他任何处理,每一帧处理时间12-13ms,显示没有马赛克
2 在alg_priv.c中定义一个数组(大小为每帧图像大小的1/4),memset为0,然后memcpy给每一帧,dsp不做其他任何处理,每帧处理时间2-3ms,显示有马赛克
这说明读ddr3没问题,写ddr3会有问题。这也和前面我说明的情况一样 。可能是什么原因造成写ddr3会这样?
brad white 说:使用DSP处理SWOSD+显示,编码,会马赛克。我们这个是没有本地显示的,,都是编码后通过网络发送出去显示的,所以测不了不编码的效果。
能否保持几帧编码前的数据,但是不编码?
下面链接里面的方法,你可以尝试一下,看是否有改善?
http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/p/93914/242271.aspx#242271
chris
如果经过dsp处理而不编码的数据不花屏的话说明什么问题?
brad white 说:chris
如果经过dsp处理而不编码的数据不花屏的话说明什么问题?
你的问题和DDR峰值吞吐过高相关的可能性很大。
如果是这个问题应该改PBBPR.PR_OLD_COUNT这个?可是我没找到地方改啊? 我用的是DM8168。DVRRDK3.5 ,这个东西是在哪里?。。
你好,
这是DDR的参数,请在uboot相关地方修改。
你好,
如果想测试是否有效果,你也可以利用写mem_rdwr.out工具直接访问该寄存器修改。
如果是因为ddr3峰值吞吐的问题的话不应该是直接整帧都丢掉了吗?。。所以应该是卡而不是花屏吧?
估计不少这个原因。因为我在dsp里面把每一帧的半帧数据(整帧的话耗时太长)memcpy出来,然后再memcpy回去,不会花屏。这说明写ddr3是没有问题的。
主要就是prfamed的数据改了就会花屏。这个会不会是因为,ipcframeoutvpss把数据给dsp处理,dsp处理完了再还回去,这个过程会不会有原始数据和处理后的数据叠加到一起引起了混乱?。
你好,
OSD link这个dsp process link是使用完这个buffer,然后把这个buffer返回,用的是同一个指针。
http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/80041.aspx
chris 你好,通过修改dspalglink可以改成一般的link吗,就是有privelink和nextlink的,处理完了直接ipcframeoutdsplink扔给ipcframeinvideo?这样可以吗
Brad,
TI提供的link都是源码,你可以修改。
默认的OSD link是没有next link的。
Chris,你好。系统给的usecase里面的dspalg调用的都是mcfw/linksc6xdsp里面的alglink,我怎么去调用mcfw/links_common里面的alglink?
你好,
我比较了一下,两个工目录的代码不太一样,link_common/alglink里面的代码是给M3用的。
那就是dsp里面不能调用吗? 我现在跑通了ipcframeindsp>ipcframeoutdsp》ipcframeinvideo的通路,现在需要中间的alglink需要有nextlink.
我想将dsp用的alg改成有nextlink的形式,然后看到linkcommon里面的alg是有nextlink的,所以想直接调用。如果不能调用的话,那我dsp里面的相应link直接照linkcommon里面修改,按道理是可以使用的吧?
你好,
请问你有认真看了我提供的链接讨论么?
http://www.deyisupport.com/question_answer/dsp_arm/davinci_digital_media_processors/f/39/t/80041.aspx
如果使能enableScdAlgLink,就如同你说的,alglink是有next link的。但如果使能的是enableOsdAlgLink,alg的next link就为空了。
下面代码请参考:DVRRDK_04.01.00.02\dvr_rdk\mcfw\src_linux\mcfw_api\usecases\ti816x\multich_progressive_vcap_venc_vdec_vdis.c
dspAlgPrm[1].enableOSDAlg = FALSE;
dspAlgPrm[1].enableSCDAlg = enableScdAlgLink;
dspAlgPrm[1].outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink = ipcBitsOutDSPId;
看了,,我自己也看到了scd有nextlink,,但是我现在是想叠加osd并且同时有nextlink。。
好的。我还有点不明白的是 为什么scd处理完了出去的是ipcbits?进来的不是frame吗?没有编码怎么变成bits了?
你好,
SCD是Scene Change Detection的缩写,输出的结果是检测结果,而不是整帧的数据。
看样子你还得参考其他有frame输出的link。