Camera 涉及的文件70
Camera 涉及的文件
1、上电时序
Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.c
Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.h
2、
模块驱动:
Mediate/custom/common/kernel/imgsensor/src/kdsensorlist.c
Mediate/custom/common/kernel/imgsensor/src/kdsensorlist.h
IO控制的定义,ID以及sensor名称定义等:
Mediate/custom/common/kernel/imgsensor/inc/kd_imgsensor.h
提供给用户空间条用的接口:
Mediate/custom/common/kernel/imgsensor/inc/kd_imgsensor_define.h
3、驱动文件
YUV的模组定义使用xxx_yuv:
Mediate/custom/common/kernel/imgsensor/hi253_yuv/
Mediate/custom/common/kernel/imgsensor/hi253_mipi_yuv/
RAW的模组定义使用xxx_raw或者XXX_mipi_raw文件夹命名,其中xxx_raw一般使用的数据接口为并口,XXX_mipi_raw使用MIPI接口
Mediate/custom/common/kernel/imgsensor/xxx_raw/
Mediate/custom/common/kernel/imgsensor/xxx_mipi_raw/
该驱动文件实现Mediate/custom/common/kernel/imgsensor/src/kdsensorlist.c
文件中模块驱动的接口,如下:
MULTI_SENSOR_FUNCTION_STRUCT kd_MultiSensorFunc =
{
kd_MultiSensorOpen, ?------------------? SensorOpen
kd_MultiSensorGetInfo, ?----------------?SensorGetInfo
kd_MultiSensorGetResolution,?------------? SensorGetResolution
kd_MultiSensorFeatureControl,?----------? SensorFeatureControl
kd_MultiSensorControl, ?-----------------? SensorControl
kd_MultiSensorClose ?--------------------?iSensorClose
};
而通过该接口中的函数可以看出,调用该接口实际调用到
4、HAL
Mediate/custom/common/kernel/hal/xxx_raw/
Mediate/custom/common/kernel/hal/xxx_mipi_raw/
Mediate/custom/common/kernel/hal/xxx_yuv/
Mediate/custom/common/kernel/hal/xxx_mipi_yuv/
Mediate/custom/common/kernel/hal/src/
注意两个文件(以后会讲到):
Mediate/custom/common/kernel/hal/src/sensorlist.cpp
Mediate/custom/common/kernel/hal/xxx_yuv/cfg.ftbl.XXX_yuv.h或者
Mediate/custom/common/kernel/hal/xxx_yuv/cfg.ftbl.XXX_raw.h
5、Camera驱动和HAL优先级调用顺序:
(1)kernel优先级:
Mediate/custom/$PROJECT/kernel/imgsensor/
Mediate/custom/$PLATFORM/kernel/imgsensor/
Mediate/custom/common/kernel/imgsensor/
(2)HAL层优先级:
Mediate/custom/$PROJECT/hal/imgsensor/
Mediate/custom/$PLATFORM/hal/imgsensor/
Mediate/custom/common/hal/imgsensor/
从上到下优先级逐步递减
6、系统配置
Mediate/config/$PROJECT/ProjectConfig.mk
Mediate/config/$PROJECT/init.rc
重点:
5、怎么样添加一个新的驱动
以下以hi253为例子:
1、需要向供应商或者MTK要资料有哪些
(1)芯片原厂的sensor芯片手册
(2)向芯片原厂要驱动程序或者超找目前平台上MTK是否已经支持该sensor,如果支持,直接可以提E-Service向MTK要驱动。
一般情况MTK或者Sensor原厂提供的驱动:
(2)将驱动添加到代码中,有以下几个步骤:
1)将驱动放到Mediate/custom/common/kernel/imgsensor/ 下面,命名为hi253_yuv文件夹。
2)在Mediate/custom/common/kernel/imgsensor/inc/kd_imgsensor.h中定义ID和sensor名称,如下:
#define HI253_SENSOR_ID 0x0092
#define SENSOR_DRVNAME_HI253_YUV "hi253yuv"
3)在Mediate/custom/common/kernel/imgsensor/src/kdsensorlist.h 中定义初始化函数声明,在Kdsensorlist数组中加入hi253的定义,如下:
UINT32 HI253_YUV_SensorInit(PSENSOR_FUNCTION_STRUCT *pfFunc);
ACDK_KD_SENSOR_INIT_FUNCTION_STRUCT kdSensorList[MAX_NUM_OF_SUPPORT_SENSOR+1] =
{ ………….
…………
………….
#if defined(HI253_YUV)
{HI253_SENSOR_ID, SENSOR_DRVNAME_HI253_YUV, HI253_YUV_SensorInit},
#endif
………………..
………………..
}
4、将原厂或者MTK给的驱动文件中HAL部分放到
Mediate/custom/common/hal/imgsensor/hi253_yuv/
5、在Mediate/custom/common/kernel/hal/src/sensorlist.cpp中sensorlist数组中添加hi253的
接口,如下:
MSDK_SENSOR_INIT_FUNCTION_STRUCT SensorList[] =
{
……………………….
……………………..
#if defined(HI253_YUV)
YUV_INFO(HI253_SENSOR_ID, SENSOR_DRVNAME_HI253_YUV,NULL),
#endif
……………………………
…………………………….
}
6、camera的系统配置,将新添加的模组添加到系统配置文件中,如下:
1)Mediate/config/$PROJECT/ProjectConfig.mk
CUSTOM_HAL_IMGSENSOR =hi253_yuv siv121d_yuv hi257_yuv sp0a19_yuv
CUSTOM_HAL_MAIN_BACKUP_IMGSENSOR=hi257_yuv
CUSTOM_HAL_MAIN_IMGSENSOR = hi253_yuv
CUSTOM_HAL_SUB_IMGSENSOR =siv121d_yuv
CUSTOM_HAL_SUB_BACKUP_IMGSENSOR=sp0a19_yuv
CUSTOM_KERNEL_IMGSENSOR = hi253_yuv siv121d_yuv hi257_yuv sp0a19_yuv
CUSTOM_ KERNEL _MAIN_BACKUP_IMGSENSOR=hi257_yuv
CUSTOM_ KERNEL _MAIN_IMGSENSOR = hi253_yuv
CUSTOM_ KERNEL _SUB_IMGSENSOR =siv121d_yuv
CUSTOM_ KERNEL _SUB_BACKUP_IMGSENSOR=sp0a19_yuv
2)Mediate/config/$PROJECT/init.rc
添加如下:
#Camera
chmod 0664 /dev/camera-sysram
chmod 0664 /dev/camera-isp
chmod 0664 /dev/camera-pipemgr
chmod 0660 /dev/kd_camera_hw
chmod 0660 /dev/kd_camera_flashlight
chmod 0660 /dev/kd_camera_hw_bus2
chmod 0660 /dev/FM50AF
chmod 0660 /dev/CAM_CAL_DRV
chown system camera /dev/camera-sysram
chown system camera /dev/camera-isp
chown system camera /dev/camera-pipemgr
chown system camera /dev/kd_camera_hw
chown system camera /dev/kd_camera_flashlight
chown system camera /dev/kd_camera_hw_bus2
chown system camera /dev/FM50AF
chown system camera /dev/CAM_CAL_DRV
注意:上面两个步骤优先级顺序如下(从上到下逐步降低):
Mediate/config/$PROJECT/
Mediate/config/$PPLATFORM/
Mediate/config/common/
7、打开sensor原厂给的Camera上电时序和下电时序部分,按照sensor的上电和下电时序以及MTK上电时序文件编写模组上电和下电时序。
Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.c
Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.h
注意有时需要查看模组说明书。并且每个模组一个上下电一个函数,以方便移植或出问题好查找。
6、调试过程中常遇到的问题:
(1)读不到ID,这种情况,首先排除硬件部分,如模组没焊接好(有时是数据总线或者I2C或者其它控制线)。其次就是上电时序没上正确。
(2)前后置摄像头切换有问题:
这种情况一般是在上前置camera时没将后置camera的PDN设成不工作引起的。同样上后置camera时没将前置摄像头PDN设成不工作。这样会引起在切换到前置或后置时另外一个sensor仍然有数据输出,到ISP报ANR错误。
(3)camera漏电:
这种情况一般多时下电时PDN处理不当引起的,一般情况是在下电的时候将PDN拉高之后在拉低,然后在下电。而如果是有前后置camera,那么不管当前是哪个camera,下电时对PDN统一处理。
(4)模组的方向,前后置模组之间的夹角是90度,如果不配置成90度,会引起显示图像的方向不正确,调整下边的驱动是达不到目的的。这个配置在如下路径:
Mediate/custom/MT6572/hal/camera/camera/cfg_setting_imgsensor.h中的
SensorOrientation_T const&
getSensorOrientation()
{
static SensorOrientation_T const inst = {
u4Degree_0 : 90, // main sensor in degree (0, 90, 180, 270)
u4Degree_1 : 0, // sub sensor in degree (0, 90, 180, 270)
u4Degree_2 : 90, // main2 sensor in degree (0, 90, 180, 270)
};
return inst;
}
这个配置好了之后,如果方向不正确,可以通过驱动中的方向调整函数进行调整,如下: static void XXXXXSetMirror(kal_uint16 ImageMirror)
(5)功能配置和sensor插值,这个部分主要是由sensor的hal层的
Mediate/custom/common/kernel/hal/xxx_yuv/cfg.ftbl.XXX_yuv.h 文件的配置来实现。
在这个配置文件中如果添加了相应的配置之后,在camera APP打开之后,点击菜单项功能不起作用,一般情况下是驱动中没有添加相应的接口引起的,在驱动中的XXXXControl()或者XXXXFeatureControl()函数中添加相应的接口。大都是在XXXXFeatureControl()函数中添加相应的接口。
(6)拍照图片的制造商信息,这个部分在如下文件中配置,
Mediate/custom/MT6572/hal/camera/camera/camera_custom_if.cpp中,如下:
#ifdef EN_CUSTOM_EXIF_INFO //打开这个部分
#define CUSTOM_EXIF_STRING_MAKE "custom make" //修改字符串
#define CUSTOM_EXIF_STRING_MODEL "custom model"
#define CUSTOM_EXIF_STRING_SOFTWARE "custom software"
(7)工程模式查看当前使用的摄像头,这个部分在Camera模块进行注册时添加相应的注册接口,将当前使用的摄像头的驱动名称给返回到用户空间给用户使用,参考
Mediate/custom/common/kernel/imgsensor/src/kdsensorlist.c
文件中的
#ifdef LCT_MTK_CAM_INFO_SUPPORT
#ednif
部分。在该文件中,向系统注册时添加了
/proc/driver/camsensor_info的接口,用户空间直接读取这个接口即可得到当前系统中使用的camera模组。
(8)预览图像时,物体快速移动,图像撕裂现象,这种情况一般是由于LCD帧速率不够,或者LCD刷新频率不够引起的。
(9)色彩饱和度的调试
针对YUV sensor模组,主要由sensor或者模组厂家来调试。
针对raw sensor模组,主要由MTK来调试。
Camera 涉及的文件70的更多相关文章
- struts中如何实现国际化,涉及哪些文件?
struts中如何实现国际化,涉及哪些文件? 解答:“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区.语言的不同而显示不同的用户界面.Struts框架通过使用<bean:m ...
- Maven 打包涉及证书文件问题
当使用maven-assembly-plugin或者maven-shade-plugin打包时,如果涉及到证书文件,一定设置过滤,否则证书文件会被做修改.报异常: java.io.IOExceptio ...
- Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档
一. 思路 今天接到个小任务,让把json文件转换成excel文件,按照列展开. 思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中 ...
- java上传图片到数据库,涉及压缩文件zip/rar上传等
项目中有这个需求: 1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流: 2)我们根据这个文件流进行操作.这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删 ...
- MTK6577+Android之Camera驱动
MTK6577+Android之Camera驱动 <MTK安卓平台的Camera效果在线调试> 1. Camera拍照相关概念 1.1 ISP isp--(Image Signa ...
- sc7731 Android 5.1 Camera 学习之一Camera 两个对象
众所周知,在Android中Camera采用了C/S架构,其中Camera server 与 Camera client之间通过Android Binder IPC机制进行通信.在Camera实现的框 ...
- 完整的多文件上传实例(java版)
昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...
- camera驱动框架分析(上)【转】
转自:https://www.cnblogs.com/rongpmcu/p/7662738.html 前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连 ...
- camera驱动框架分析(上)
前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera.我这里主要讨论前者, ...
随机推荐
- Angular2入坑指南
序 对后端开发来说,前端是神秘的,眼花缭乱的技术,繁多的框架,出名的不出名的好几百种,看是"繁荣",其实显得杂乱无章,但是我们在做开发的时候,技术选型还是主流的那么几个:浅析ang ...
- java自动装箱拆箱总结
对于java1.5引入的自动装箱拆箱,之前只是知道一点点,最近在看一篇博客时发现自己对自动装箱拆箱这个特性了解的太少了,所以今天研究了下这个特性.以下是结合测试代码进行的总结. 测试代码: int a ...
- TOP-N类查询
Top-N查询 --Practices_29:Write a query to display the top three earners in the EMPLOYEES table. Displa ...
- Java基本语法-----java函数
函数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. ...
- UNIX网络编程——原始套接字的魔力【下】
可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发.提醒一点,在 ...
- Calling LoadLibraryEx on ISAPI filter failed
今天在访问IIS下的站点时莫名奇妙的遇到这个问题Calling LoadLibraryEx on ISAPI filter"C://..." failed,前面引号中的" ...
- ENVI自带的非监督分类测试情况
最近写了两个关于遥感图像的简单的非监督分类算法KMEAN和ISODATA,发现结果和ENVI的一直有差异,而且还蛮大的,找了好久也没有找到原因.于是用PS自己绘制了一个简单的图像用于测试.如图1所示, ...
- JAVA代码规范笔记(下)
声明 17.推荐一行一个声明,因为这样有利于写注释.换句话说,下面的声明方法中, int level; // indentation level int size; // size of table ...
- HDFS追本溯源:HDFS操作的逻辑流程与源码解析
本文主要介绍5个典型的HDFS流程,这些流程充分体现了HDFS实体间IPC接口和stream接口之间的配合. 1. Client和NN Client到NN有大量的元数据操作,比如修改文件名,在给定目录 ...
- 如何在Cocos2D 1.0 中掩饰一个精灵(六)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰一个精灵:实现代码 打开HelloWorldLayer.m并 ...