点击打开链接

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相关推荐

  1. Camera 涉及的文件

    Camera 涉及的文件 1.上电时序 Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.c Mediate/custom/$PROJECT/Cam ...

  2. Json文件转换为Excel文件!涉及读文件,时间戳转化,写文档

    一. 思路 今天接到个小任务,让把json文件转换成excel文件,按照列展开. 思路:既然json已经都已经是现成的,那直接将json文件做读操作,在通过不同的key,找到对应的信息,在存到单元格中 ...

  3. 从Scanpy的Anndata对象提取信息并转成Seurat对象(适用于空间组且涉及h5文件读写)

    关键字 Anndata对象转成Seurat对象 h5文件读写 空间组格式转换 已补充快速使用的函数整理版本,如果不想看细节可以直接看已整理好的版本. 适用背景 众所周知,单细胞数据分析有两大软件:基于 ...

  4. domino服务器库文件,Domino 服务器设置程序 涉及的文件

    Domino 服务器设置程序可以指导您在配置 Domino 服务器时作出选择.在网络域中设置第一台 Domino 服务器时会建立一个框架,该框架由 Domino 目录.标识符文件和文档组成.设置其他服 ...

  5. Camera之Dng文件解析

    1. 简介 市面上已经有很多支持输出Raw格式的手机相机,如华为P9.Mate9.P10.三星(均需要在专业相机模式下)等等,但保存出来的格式是Dng格式的,Dng格式比较详细的介绍可以参考:http ...

  6. linux脚本ipddr.sh 是什么,MTK DDR调试

    1. 获取 flash id: 硬件信息:通过这个节点可以知道当前flash的id,上层根据id找到对应的flash名字. cat /sys/block/mmcblk0/device/cid \ker ...

  7. camera驱动框架分析(上)

    前言 camera驱动框架涉及到的知识点比较多,特别是camera本身的接口就有很多,有些是直接连接到soc的camif口上的,有些是通过usb接口导出的,如usb camera.我这里主要讨论前者, ...

  8. 菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)

    基本认识的四个要点: 1.C#中一切皆对象,int.string其实都是对象,你的main()函数也需要放在一个特定的对象中,才可执行,所以main()会被放进Program.cs(叫其它名称也可以) ...

  9. android_驱动_qcom_【高通SDM660平台】(4) --- Camera Init 初始化流程

    [高通SDM660平台]Camera Init 初始化流程 一.Camera 系统架构 二.Camera Init 初始化流程 2.1 CameraService 启动 2.2 CameraServi ...

最新文章

  1. IBM Watson 的中国生意
  2. 手机端网页中图片之间出现白线的解决方法
  3. 集合框架源码分析三(实现类篇ArrayList,LinkedList,HashMap)
  4. linux oracle停启,linux下Oracle自动启动与停止总结
  5. getbean方法找不到bean_和平精英:一直找不到敌人?5个方法,让你彻底摆脱“瞎子”...
  6. 大促场景系统稳定性保障实践经验分享
  7. java网页中url传值的转码
  8. java runnable 异常_JAVA 线程中的异常捕获
  9. ACwing 3. 完全背包问题(DP)
  10. Chrome Workspace开发者调试工具
  11. Bella团队正在进行Flex Saving v2上线最后的准备工作
  12. 用友功能传送错误功能加密服务器组件加密服务器错误拒绝访问,用友U8v8.72单机版,登录时系统提示:不能登录到加密服务器。-用友U8...
  13. vue key重复_12道vue高频原理面试题,你能答出几道?
  14. Python股票分析系列——系列介绍和获取股票数据.p1
  15. 9.TCP/IP 详解卷1 --- IP 选路
  16. 中值滤波器 median filter
  17. 计算机 ppt图标,史上最完整的通信计算机PPT图标及模版 (PPTshare).ppt
  18. 2021华为秋招算法工程师面试经历(实习过)
  19. html中绝对定位的父级,【CSS学习笔记】绝对定位的父类参照物的确定
  20. 第二届中国大数据安全高层论坛在贵阳举行

热门文章

  1. Tomcat的Classpath-常见问题以及如何解决
  2. 010_SpringBoot视图层技术thymeleaf-变量输出与字符串操作
  3. java cocoon_Java-跳跃路线
  4. php datatype=quot;requirequot;,我的问题谁能帮我解决一下??
  5. 跟踪分析Linux内核5.0系统调用处理过程
  6. soc设计方法与实现第三版pdf_资深Redis技术专家带你深入了解:Redis的设计与实现(PDF)...
  7. 如果常数项没有经过显著性检验_Cg,Cgk 能代替偏倚显著性检验?
  8. Docker容器私有仓库——Harbor私有仓库的搭建
  9. Zabbix的问题日志清单查看
  10. Spark详解(十四):Spark SQL的Join实现