博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Camera架构浅析
阅读量:4213 次
发布时间:2019-05-26

本文共 1941 字,大约阅读时间需要 6 分钟。

1、Camera成像原理介绍

Camera工作流程图

Camera的成像原理可以简单概括如下:

景物(SCENE)通过镜头(LENS)生成的光学图像投射到图像传感器(Sensor)表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过IO接口传输到CPU中处理,通过DISPLAY就可以看到图像了。

电荷耦合器件(CCD)互补金属氧化物半导体(CMOS)接收光学镜头传递来的影像,经模/数转换器(A/D)转换成数字信号,经过编码后存储。

流程如下:

1、CCD/CMOS将被摄体的光信号转变为电信号—电子图像(模拟信号)
2、由模/数转换器(ADC)芯片来将模拟信号转化为数字信号
3、数字信号形成后,由DSP或编码库对信号进行压缩并转化为特定的图像文件格式储存

数码相机的光学镜头与传统相机相同,将影像聚到感光器件上,即(光)电荷耦合器件(CCD) 。CCD替代了传统相机中的感光胶片的位置,其功能是将光信号转换成电信号,与电视摄像相同。

CCD是半导体器件,是数码相机的核心,其内含器件的单元数量决定了数码相机的成像质量——像素,单元越多,即像素数高,成像质量越好,通常情况下像素的高低代表了数码相机的档次和技术指标。

2、Android Camera框架

Android的Camera子系统提供一个拍照和录制视频的框架。

它将Camera的上层应用与Application Framework、用户库串接起来,而正是这个用户库来与Camera的硬件层通信,从而实现操作camera硬件。

3、Android Camera的代码结构

Android的Camera代码主要在以下的目录中:

Camera的JAVA部分
packages/apps/Camera/。其中Camera.java是主要实现的文件。这部分内容编译成为目标是Camera.apk
com.android.camera这个包,几个主要的类文件如下:
PhotoViewer:GalleryPicker.java(所有图片集)--->ImageGallery.java(某个Folder下图片列表)--->ViewImage.java(看某张具体图片)
VideoPlayer:GalleryPicker.java(所有视频集) --->MovieView.java(看某一个视频)
Camera:Camera.java(Camera取景及拍照)
VideoCamera:VideoCamera.java(VideoCamera取景及摄像)

Cameraframework供上层应用调用的部分

base/core/java/android/hardware/Camera.java

这部分目标是framework.jar

Camera的JNI部分

frameworks/base/core/jni/android_hardware_Camera.cpp
这部分内容编译成为目标是libandroid_runtime.so。

Camera UI库部分

frameworks/base/libs/ui/camera
这部分的内容被编译成库libcamera_client.so。

Camera服务部分

frameworks/base/camera/libcameraservice/
这部分内容被编译成库libcameraservice.so。

Camera HAL层部分

hardware/msm7k/libcamera
vendor/qcom/android-open/libcamera2
为了实现一个具体功能的Camera,在HAL层需要一个硬件相关的Camera库(例如通过调用video for linux驱动程序和Jpeg编码程序实现或者直接用各个chip厂商实现的私有库来实现,比如Qualcomm实现的libcamera.so和libqcamera.so),实现CameraHardwareInterface规定的接口,来调用相关的库,驱动相关的driver,实现对camera硬件的操作。这个库将被Camera的服务库libcameraservice.so调用。

 

未完待续

在下一篇中,我会以两条路径来详细介绍Camera HAL的实现:自己依据V4l2规范来实现CameraHardwareInterface; Qualcomm的Camera架构(QualcommCameraHardware和mm-camera/mm-still)。当然,在涉及到Qualcomm私有库部分,为避免不必要的麻烦,我会一笔带过。敬请见谅!

转载地址:http://khdmi.baihongyu.com/

你可能感兴趣的文章
cocos2dx添加文本的三种方法及适用情况CCLabelTTF,CCLabelBMFont,CCLabelAtlas
查看>>
libgdx下Texture packer工具使用
查看>>
libgdx: 2D Particle Editor工具使用
查看>>
hiero使用
查看>>
libgdx:Hiero工具使用
查看>>
libgdx:学习网站或博客
查看>>
eclipse 给jar库添加源码
查看>>
cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
查看>>
3.0正式版环境搭建(1)-- 运行自带例子
查看>>
3.0正式版环境搭建(2)-- 环境变量设置
查看>>
3.0正式版环境搭建(3)-- 创建工程
查看>>
3.0正式版环境搭建(4)-- 运行(3)创建的工程
查看>>
C++ 枚举声明 enum 和 enum class
查看>>
Python optionParser模块的使用方法
查看>>
android 消灭星星出错
查看>>
Android APK反编译详解(附图)
查看>>
pycharm 教程(二)设置字体大小
查看>>
PyCharm 教程(三)Hello world!
查看>>
PyCharm: 显示源码行号
查看>>
PyCharm 教程(四)显示行号
查看>>