簡介 Android Camera 三大功能區塊

jollen 發表於 November 25, 2010 8:41 PM

近期為客戶進行 Android Camera 的顧問服務,主要的任務是改善 Android 在拍照方面的效能,撰寫了一些相當基本的觀念介紹,在此與大家分享。Android 的 Camera 系統大概念上可分成三大區塊:

1. android.hardware.Camera
2. Camera Service
3. Camera HAL + videodev

其中最核心的 Camera Service 預設是實作在 SystemServer 裡。控制 Camera 硬體的 HAL 部份,目前大多採用 Linux 的 videodev 介面來擷取視訊。以下簡介 Android Camera 的三大功能區塊。

1. android.hardware.Camera

屬於 Java 層,Camera 應用程式可透過 Camera.open() 來取得 android.hardware.Camera 的實例化 (instance),並且可實作 Camera.PictureCallback 介面來取得「照片影像」。Camera.PictureCallback 提供二種照片資料:JPEG Data 與 Raw Data。這部份的細節可參考 Camera.takePicture()。

2. Camera Service

Android 的 Camera Service 重要程式碼實作於 libcameraservice.so,對於 Android 平臺的移植者來說,可忽略 Camera Service 的內部細節,直接實作 Camera HAL 即可驅動 Camera 硬體。但對於 Camera Service 的設計,以及實作細節進行一些研究,對於改善現有 reference code 的效率會有一些幫助。關於 Camera Service 的設計細節,留待後續做說明。

3. Camera HAL

驅動 Camera 硬體最關鍵的部份。在 Google 官方的 Android Platform Developer's Guide 文件裡指出,平臺移植者可實作 CameraHardwareInterface 來驅動 Camera 硬體。CameraHardwareInterface 是 Android 的 Camera HAL 設計,開發者可參考 Android 裡的 CameraHardwareStub.c 範例,以了解 CameraHardwareInterface 的實作原理。

Camera HAL 裡設計了二個 thread,分別是:preview thread 與 picture thread。Picture thread 在取得影像資料後,以 callback 方式將 JPEG data 或 raw data 往 Java 層傳遞。如上述,Camera 應用程式透過實作 Camera.PictureCallback 取得影像資料。

讀者留言 (0)

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。