Media Module之Camera(一) 相关介绍

2017-05-31  本文已影响500人  Lemon_Home

基于Android6.0原生代码的Camera应用进行深入分析,对常用流程进行总结包括从上层app、framework到底层jni、native、hal,并且介绍Camera的疑难问题的解决思路。

1. Camera相关介绍

1.1 主要界面和主要类

普通拍照模式 录像模式 全景模式 特效模式

1.2 Camera主要结构

1.2.1 Application framework

在此层,利用了android.hardware.Camera的API去调用camera的硬件。在内部,是通过JNI来与native的代码进行交互。
代码路径:frameworks/base/core/java/android/hardware/Camera.java

1.2.2 JNI

JNI的代码是与android.hardware.Camera进行联系的,此代码是调用更底层的native代码去获得物理camera设备的入口,并且给framework返回数据。
代码路径:frameworks/base/core/jni/android_hardware_Camera.cpp.

1.2.3 Native framework

native framework提供了android.hardware.Camera在native层的等价类。作用是调用IPCbinder去获得camera service的入口。
代码路径:frameworks/av/camera/Camera.cpp

1.2.4 Binder IPC proxies

IPC binder的代理方便地实现了跨进程的通信,其中有三个camera binder :ICameraService是cameraservice的接口;ICamera是特定的已打开的camera设备的接口;ICameraClient 是给framework层的回调接口。
代码路径:frameworks/av/camera

1.2.5 Camera service

是与HAL进行交互的具体实现
代码路径:frameworks/av/services/camera/libcameraservice/CameraService.cpp,

1.2.6 HAL

位于camera驱动和更高层次的android
framework之间,它定义了你必须实现的接口,该接口方便app能够正确地操作camera硬件。CameraHAL层的接口被定义在头文件:hardware/libhardware/include/hardware/camera.h:
包含的code基本上与android.hardware.Camera一致。这个头文件中声明了一个结构体camera_device,它包含了结构体camera_device_ops,该结构体中有指向实现camera HAL接口的函数的函数指针。关于开发者可以设置的camera参数的各中类型。
hardware/libhardware/include/hardware/camera_common.h:
定义了一个重要的结构体camera_module,这个结构体定义了一个标准结构,可以获取camera基本信息,比如ID和所有camera所共有的属性,比如是否是前置或者后置camera。

1.2.7 Kernel driver

与实际的camera硬件进行交互,并且通过HAL上实现。Camera硬件和驱动必须能够提供YV12和NV21格式的图像数据,以支持camera图像数据在显示屏上的预览和视频录制。

1.3 类继承关系

图1 图2 图3 图4

1.4 主要流程

主要流程
上一篇下一篇

猜你喜欢

热点阅读