1. 程式人生 > >android6.0原始碼分析之Camera API1.0框架簡介

android6.0原始碼分析之Camera API1.0框架簡介

1、架構簡介

由於最近專案涉及到Camera,所以對Camera原始碼進行了研究,本文將分享Camera框架的基本知識。anroid6.0與5.0相比,Camera框架未曾改變,依然提供了兩種API,即API1和API2,依然採用C/S的架構,而client和server兩個執行緒間的通訊依然使用IPC binder程序間通訊的機制。

camera架構圖如下:

這裡寫圖片描述

由圖可知:在framework層中,Java框架通過JNI的方式呼叫Native框架,此處的Native作為Client端只給上層應用提供呼叫介面,而具體的業務實現則是由Server端(CameraService)來實現,Client和Server則是通過Binder的方式進行通訊。
單獨分析下Camera的C/S架構,其架構圖如下:
這裡寫圖片描述

2、程式碼結構

Camera的application部分:

packages/apps/legacycamera/src/com/android/camera/camera.java
packages/apps/legacycamera/src/com/android/camera/Util.java
packages/apps/legacycamera/src/com/android/camera/CameraHolder.java

Camera的framework部分:

frameworks/base/core/java/android/hardware/Camera.java
frameworks/base/core/jni/android_hardware_Camera.cpp
frameworks/av/camera/Camera.cpp
frameworks/av/camera/CameraBase.cpp
frameworks/av/camera/ICameraService.cpp
frameworks/av/services/camera/libcameraservice/CameraService.cpp
frameworks/av/services/camera/libcameraservice/api2/CameraDeviceClient.cpp

其中Camera.java將會被編譯成framework.jar,而android_hardware_Camera.cpp將會被編譯成庫libandroid_runtime.so,frameworks/av/camera將會被編譯成庫libcamera_client.so,最後服務部分也將會編譯成庫libcameraservice.so。

總結:本文只是簡單的介紹了android6.0的Camera子系統的架構以及它 的程式碼結構,至於Camera HAL 的具體架構以及程式碼分析,本文沒有進行詳細的分析,具體參考老羅的Android硬體抽象層(HAL)概要介紹和學習計劃一文。