Edit online

常见问题

摄像头初始化失败

板子启动后,摄像头的 device 注册失败,此时 DVP 的注册流程也因此不完整,在 Sysfs 中会找不到 /dev/video0 不存在。

原因分析

一般情况下,摄像头需要通过 I2C 来访问,所以要确保 I2C 和摄像头两个模块是否打开。
  • 摄像头的打开方法:打开 Camera

  • I2C 的打开方法,请参考 C 模块的使用说明

同时,要确认以下配置是否正确:
  1. 硬件上,摄像头是连接到哪个 C 通道,对应的 DTS 配置是否正确,配置参见

  2. 摄像头的 C 设备地址是否正确,参见 中的参数 camera@3C

  3. 摄像头的供电是否正常。

画面的流畅度问题

界面显示的摄像头画面有明显卡顿情况。

解决方法
  1. 如果 DVP 驱动中的调试信息打开了,每一帧数据处理都有输出 log,会影响帧率,需要关掉。修改方法见

  2. 尝试增加 dvp 中的 buffer 数量,保证 buf 队列中有充裕的空闲 buf。buffer 数量定义见:
    #define VID_BUF_NUM     3

画面被矩形切割

从摄像头采集并回显到屏幕,画面出现被矩形切割成多份,如下图

../images/fr_too_bigger.png

原因分析

摄像头内部会根据 OUT 产生一个 pixclk,
  1. pixclk 的驱动能力有上限值,由驱动芯片决定

  2. pixclk 的频率值由分辨率、帧率决定,分辨率、帧率越高需要的 pixclk 也越高

  3. 相应的, pixclk 的频率值越高,要求驱动能力也要越高

比如 x 开发板上驱动芯片只能支持 pixclk 到最高 50MHz,如果预期的 pixclk 超出 50MHz 就会导致同步信号发生异常,于是画面出现不对齐的情况。

解决方法

调低摄像头驱动中的帧率、分辨率配置。以 OV5640 为例,可调整以下配置参数(详见 c):
/* Format configuration of OV5640 */
#define OV5640_MODE             OV5640_MODE_PAL_720_576
#define OV5640_FPS              OV5640_24_FPS