DM6437视频处理框架如下:
VPFE:720*576 PAL
VPBE:VIDWIN0 1024*768 yuv422, OSDWIN0 640*480 RGB565
VENC:1024*768 LCD RGB888 Digital output
问题描述:前端视频经过Resizer后 放入VPBE VIDWIN0缓冲区,未发现丢数据现象(数据回写问题引起的视频有白色或者黑色的线条),当打开OSDWIN0后,即使加入了回写函数,也会在VIDWIN0上出现数据丢失现象。是哪里出现了问题?谢谢
Chris Meng:
你好,
cache写回是可以指定写回的地址的,请问写回地址和vidwin0使用的地址有关系么?
请问你的屏是1024×768@60f/s的屏么?如果减小OSD串口的大小,例如开一个100×100的,或者关闭采集,是否现象相同,还是改善?我想看看是否是DDR吞吐导致的问题。
mr bryant:
回复 Chris Meng:
Thanks a lot!
Cache写回是指定地址的:BCACHE_wbInv((Uint8*)vpbeFrameBuf->frame.frameBufferPtr, (VPBE_WIDTH*VPBE_HEIGHT*2), TRUE);
LCD显示屏1024*768@60FPS;
OSD窗口由320*240(Zoomed to 640*480)减小到128*128(No zoom),数据丢失现象几乎消失。
基于以上应该可以证明是DDR吞吐所致?
我们又做了这样一个实验:
前端视频不经过Resizer,直接粘到VPBE视频帧缓冲区,也就是后端视频的显示(尺寸仍为1024*768)只有720*576的视频信息,其余为灰色。
发现此时打开OSD窗口也无数据丢失现象。此现象是否可以解释为Resizer模块占用了较多的DDR带宽?
但是Resizer和OSD(320*240)都是必须要使用的,那此问题该如何解决?减小LCD刷新频率?谢谢!!
Chris Meng:
回复 mr bryant:
Bryant,
DDR控制器有一个寄存器叫PBBPR,请看看目前是否设置为0XFF,如果是,请修改为0x10~0x50范围的值尝试。
mr bryant:
回复 Chris Meng:
你好,
修改了PBBPR寄存器的值,数据丢失现象依然存在!这个寄存器的含义是什么?
mr bryant:
回复 Chris Meng:
你好,程序中内存拷贝很少。我们也怀疑是DDR带宽问题,在下一版硬件中使用双DDR,到时候看效果如何吧。谢谢
mr bryant:
回复 Chris Meng:
Sorry for late reply!
在第二版本的硬件中使用双DDR2,数据丢失问题得到解决,也就是说单DDR2的带宽勉强能支持720p 60Hz的数字视频输出。谢谢Chris Meng的指导!
Chris Meng:
回复 mr bryant:
Bryant,
非常感谢你在这里更新了最终的结果!