Camera1 源码解析系列—— Camera1 基本架构

Posted ByteSaid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Camera1 源码解析系列—— Camera1 基本架构相关的知识,希望对你有一定的参考价值。

前言

Camera API1: android 4.4 以及更低版本设备上的应用级相机框架,通过 android.hardware.Camera 类提供功能接口;
Camera API2: Android 5.0 以及更高版本设备上的应用级相机框架,通过 android.hardware.camera2 包提供。
虽然 Android5.0 开始弃用 Camera API1,但是各个手机厂商对 Camera API2 的支持是一个渐进式的过程,所以淘汰周期是比较长的,在很多高版本中使用 Camera API1 也是很常见的情况。

1 Camera1 架构

Android Camera API 1 的架构与 Android 整体架构是保持一致的:

  • Framework : Camera.java
  • Android Runtime : android_hardware_Camera.cpp
  • ibrary
    • Client (Camera.cpp, ICameraClient.cpp, etc...)
    • Server (CameraService.cpp, ICameraService.cpp, etc...)
  • HAL : CameraHardwareInterface.h

2 架构简图

3 相关文件路径

  • Application:
    • packages/apps/Camera2/src/com/android/camera/***
  • Framework:
    • /frameworks/base/core/java/android/hardware/Camera.java
  • Android Runtime:
    • frameworks/base/core/jni/android_hardware_Camera.cpp
  • C/C++ Libraries:
    • Client:
      • frameworks/av/camera/CameraBase.cpp
      • frameworks/av/camera/Camera.cpp
      • frameworks/av/camera/ICamera.cpp
      • frameworks/av/camera/aidl/android/hardware/ICamera.aidl
      • frameworks/av/camera/aidl/android/hardware/ICameraClient.aidl
    • Server:
      • frameworks/av/camera/cameraserver/main_cameraserver.cpp
      • frameworks/av/services/camera/libcameraservice/CameraService.cpp
      • frameworks/av/services/camera/libcameraservice/api1/CameraClient.cpp
      • frameworks/av/services/camera/libcameraservice/api1/Camera2Client.cpp
      • frameworks/av/camera/aidl/android/hardware/ICameraService.aidl
  • HAL:
    • HAL 1:
      • frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h
    • HAL 3:
      • frameworks/av/services/camera/libcameraservice/device3/Camera3Device.cpp
      • frameworks/av/services/camera/libcameraservice/device3/Camera3Stream.cpp
      • frameworks/av/services/camera/libcameraservice/device3/Camera3OutputStream.cpp
      • frameworks/av/services/camera/libcameraservice/device3/Camera3iostreamBase.cpp

4 总结

根据架构简图可以看到,实际上 Camera 的架构与 Android 架构是一一对应的,上层应用调用 Camera 相关的方法后,指令依次通过 FrameworkAndroid RuntimeC/C++ LibrariesHAL,最终到达具体设备。设备执行动作后,获得的数据又会沿着反方向依次发送到最上层。
在本地库这一层中,涉及到一个 C/S 结构:即通过客户端与服务端的交互来传递指令与数据。实际上,只有服务端与 HAL 层进行沟通。由于客户端与服务端是不同的进程,它们之间需要依靠 IPC Binder 机制来进行通讯。

以上是关于Camera1 源码解析系列—— Camera1 基本架构的主要内容,如果未能解决你的问题,请参考以下文章

Camera1 源码解析系列—— Camera1 startPreview() 流程解析

Camera1 源码解析系列—— Camera1 Open() 流程解析

Camera1 源码解析系列—— Camera1 takePicture() 流程解析

Camera1 源码解析系列—— Camera1 takePicture() 流程解析

Camera1 源码解析系列—— Camera1 基本架构

Camera1 源码解析系列—— Camera1 基本架构