视频这块的工作都快一年多了。发现在自己还是那么多菜。继续努力。言归正传。
由于我们用的是三星的s5p6443芯片(其实就是阉割版的6440或者s5p6410),没有camera的接口,但我们公司的做的gps设备基本都需要AVIN功能,主要用来做倒车镜功能来用。所以我一们一直采用s5p6443+fpga+tvp5150的架构来做avin的功能。其实,基本工作原理就是,tvp5150将标准的模拟信号(NTSC/PAL/SECAM制式)转换为YCBCR数字信号后,送给fpga,fpga再将其转为RGB565的数据,然后再将数据打包,以sd协议,发给s5p6443。
由于cpu收到的数据是,打过包的数据,也就是有包头的。就像tcp/ip的数据,在网络上传输是有20个字节ip包头。呵呵。所以我们,avin的驱动,就需要在接受到数据后,将其解包,然后奇偶场数据合并成一帧,在再经过post放缩到合适的大小在送到framebuffer来显示。
这种架构,有一个很大的问题就是,cpuloading太高,对小的屏,基本还能接受,但是大屏就不行了。在我们4.3寸的屏上,avin的loading就将近55%。
最近老大们,一直让我们的avin的驱动,要把loading给将下来。这可头疼死我们了。
首先,为了降cpu的loading,我先分别测试了一下,avin整个功能模块上,各个模块所耗费的cpuloading。最后发现,整个cpuloading的主要耗费在数据解包和内存数据搬运中,特别是内存数据搬运。因为一阵数据&