荣品四核S5P4418开发板之摄像头OV5645调试
1、1、camera驱动文件是ov5645.c
a) camera驱动是I2C驱动,必须要实现id_table,名字与驱动名字相同。
2、b) 开启camera时,camera应用调用到HAL层,打开camera设备文件,调用到v4l2层,最终调用ov5645_init函数,对camera复位,向写入寄存器特定的值,使camera能够正常工作。
3、c camera在开启时和拍照后调用ov5645_s_stream函数重新设置,图像格式,
图像的格式、分辨率由写入的寄存器的值决定。
1、2、camera参数部分在device.c
a) camera驱动是I2C驱动,除了要实现id_table,还要将camera设备注册到I2C总线上,所以要有实现i2c_board_info。名字与驱动名字相同,地址就是camera的I2C地址,地址必须要正确才能获得来自camera的数据。
2、 b) camera的时序、引脚、频率设置、供电控制都在device.c,都保存在capture_plat_data[]
1、3、HAL层文件NXCameraHWInterface2.cpp、OV5645.cpp
a) camera应用打开时,调用到framework层,然后到HAL层最终调用到NXCameraHWInterface2.cpp中的camera_device_open函数,camera的设备结点是在这个函数打开的。
b) HAL层相关代码目录
hardware\samsung_slsi\slsiap\camera
hardware\samsung_slsi\slsiap\v4l2
device\nexell\s5p6818_drone\camera
framework层相关源码目录
frameworks\av\camera
c) NXCameraHWInterface2.cpp中的camera_device_open函数。
if (false==hal ->init()) { NXCameraHWInterface2.cpp 调用
android_nxp_v412_init(); Android-NXP-V412.CPP调用
int ret = v412_init(&s); Nxp-v412.cpp调用
int ret = _priv ->init(scheme)); 调用
MediaFD = open("/dev/media0",O_RDWR);
if (MediaFD <0) {
ALOGE("can't open media device");
return MediaFD;
}
最终打开设备结点
d) OV5645.cpp支持的图像像素大小
const int32_t ResolutionOV5645[] = {
2592,1944,
1280,960,
//1600,1200,
};