最近在freescale mx51平台上调试saf7113芯片,写下一些调试的心得
1. 一个好的工具 YUVtools.exe
这个工具可以用来查看拍摄出来的YUV图片效果, 来发现到底什么地方出了问题,很方便,选项非常多,在调试中碰到的很多问题,比如失帧
图片模糊,格式不对等等都可以通过这个工具对图片进行分析
2. 概念的了解: BT656, MX51 IPU, SAF7113 V4L2这些概念一定要清楚
SAF7113有一套缺省的设置, 按照这套缺省设置基本就可以出图像了。
我设置的saf7113输出是BT656,当初对BT656不太了解,所以在理解MXC V4L2对下层的接口上多花费了一些时间。
3. freescale的代码
毕竟不是为项目定制的,问题还是有一些的,我想当初他们也只是测试了部分代码,所以不要太迷信他的代码,当我放开手脚开始修改MXC V4L2代码后,觉得轻松了很多
另外MXC V4L2中有很多hardcode的代码,如果格式或者制式的原因,可能会使capture和overlay看起来像失帧,其实都是格式惹的祸。
此外MXC ipu3 code 也有值得商榷的地方,反正该改写的地方我都没客气
4. 解隔行, saf7113输出的是隔行数据
使用channel的scan-order可以实现隔行数据的交错, 但是对于动态图像,交错后的数据可能会出现毛刺,锯齿等问题。
还有一种办法,就是使用一场数据代替整帧数据,缺点是会损害静态图像的清晰度。
5. preview很好用
我直接用的freescale的代码,效果很不错,从camera直接到framebuffer,几乎不需要cpu参与。不过freescale android overlay hal使用的是push mode模式,而不是VIDIOC_OVERLAY。
6. 照抄ov3640
驱动框架都是从ov3640.c抄来的,虽然最后已改的面目全非,但是最初还是很有帮助的
7. IPU的channel
这个概念要尽早了解,很重要,了解这个,MXC V4L2的代码看起来相当的简单