Chinaunix首页 | 论坛 | 博客
  • 博客访问: 645969
  • 博文数量: 113
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 4176
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-15 20:22
个人简介

最大化我的市场价值

文章分类

全部博文(113)

文章存档

2013年(113)

分类: Android平台

2013-02-22 11:43:57

簡介 Android Camera 三大功能區塊

 發表於 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 取得影像資料。

阅读(2040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~