Android Camera架構淺析

1Camera成像原理介紹

Camera工作流程圖

image

Camera的成像原理可以簡單概括如下:

景物(SCENE)通過鏡頭(LENS)生成的光學圖像投射到圖像傳感器(Sensor)表面上,然後轉爲電信號,經過A/D(模數轉換)轉換後變爲數字圖像信號,再送到數字信號處理芯片(DSP)中加工處理,再通過IO接口傳輸到CPU中處理,通過DISPLAY就可以看到圖像了。

電荷耦合器件(CCD)互補金屬氧化物半導體(CMOS)接收光學鏡頭傳遞來的影像,經模/數轉換器(A/D)轉換成數字信號,經過編碼後存儲。

流程如下:
1、CCD/CMOS將被攝體的光信號轉變爲電信號—電子圖像(模擬信號)
2、由模/數轉換器(ADC)芯片來將模擬信號轉化爲數字信號
3、數字信號形成後,由DSP或編碼庫對信號進行壓縮並轉化爲特定的圖像文件格式儲存

數碼相機的光學鏡頭與傳統相機相同,將影像聚到感光器件上,即(光)電荷耦合器件(CCD) 。CCD替代了傳統相機中的感光膠片的位置,其功能是將光信號轉換成電信號,與電視攝像相同。

CCD是半導體器件,是數碼相機的核心,其內含器件的單元數量決定了數碼相機的成像質量——像素,單元越多,即像素數高,成像質量越好,通常情況下像素的高低代表了數碼相機的檔次和技術指標。

2Android Camera框架

Android的Camera子系統提供一個拍照和錄製視頻的框架。

它將Camera的上層應用與Application Framework、用戶庫串接起來,而正是這個用戶庫來與Camera的硬件層通信,從而實現操作camera硬件。

image

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私有庫部分,爲避免不必要的麻煩,我會一筆帶過。敬請見諒!

發佈了35 篇原創文章 · 獲贊 13 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章