Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1306405
  • 博文数量: 478
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 4833
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-28 11:12
文章分类

全部博文(478)

文章存档

2019年(1)

2018年(27)

2017年(21)

2016年(171)

2015年(258)

我的朋友

分类: Android平台

2018-05-11 18:03:16


现代Camera越来越复杂,导致要彻底理解Camera相关的知识确属不易,早期的Camera就是一个摄像头而已,整个系统从上到下调用也基本 是一条线,而现在的Camera则要复杂的多,Camera要正常使用,不只有摄像头本身的各种参数需要配置,还包括音频、马达、距离感应器、闪光灯以及 一堆跟效果有关的软件库(人脸识别、各种模式、去红眼、微笑捕捉、JPEG编码)等等,当然如果只有这些还不算复杂,最复杂的是理解各厂家不同HAL层实 现。

本文主要介绍Android Camera代码结构以及相关的Camera基础知识。由于Camera架构相对比较规范,理解起来也并不难,但是QCOM、MTK对HAL层的实现上的差异却非常大,需要一番心思。【本文整理自早前Android开发笔记,暂时有点乱,以后再完善】

一、执行逻辑与概念

1、启动加载逻辑

Linux内核驱动在启动过程中会自动遍历执行挂载(在init.rc之前)。找到摄像头后会创建对应节点inode。在/sys/class目录 下应可看到对应的设备目录,要访问设备,可通过类似/proc/example,/sys/class/example/example/val, /dev/example,/sys/devices/virtual/example/example等节点访问,这决定于驱动约定。

对摄像头而言就是/dev/video0,/dev/video1这样的设备,上层程序只能通过设备名访问该设备(ioctl,write,read,open,release...),示例:http://blog.chinaunix.net/uid-21880738-id-3361037.html

2、ZSL和Chromatix概念

摄像头ZSL,全称Zero Second Later,零延迟拍摄。

Chromatix,用于CAMERA ISP(qualcomm自己称呼为vfe(video front end)),用于raw sensor效果的,也就是手机摄像头效果的。

二、相关Camera目录

1、重要驱动目录

kernel\drivers\media\platform\msm\camera_v2\sensor

效果(chromatix):vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/chromatix/0301/libchromatix/

马达AF(actuators):vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/actuators/0301/

库文件(sensor_libs):vendor/qcom/proprietary/mm-camera/mm-camera2/media-controller/modules/sensors/sensor_libs/

2、JAVA(Framework)部分

APK:packages/apps/Camera/ —— 编译结果 Camera.apk 

Framework上层调用接口:base/core/java/Android/hardware/Camera.java —— 编译结果 framework.jar

JNI接口:frameworks/base/core/jni/Android_hardware_Camera.cpp —— 编译结果 libAndroid_runtime.so

UI库部分:frameworks/base/libs/ui/camera —— 编译结果 libcamera_client.so

服务部分 :frameworks/base/camera/libcameraservice/ —— 编译结果 libcameraservice.so。

HAL层:从这里往下基本都是各厂家自己定制部分,比如QCOM,MTK差异非常大。

阅读(3383) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~