下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一. Android Camera 層次結(jié)構(gòu)Android下Camera子系統(tǒng)從上到下可以分為應(yīng)用層、框架層、運(yùn)行庫層及 內(nèi)核層,其結(jié)構(gòu)如下圖所示。從整體上看,它還是屬于Android下典型的client/service的結(jié)構(gòu),運(yùn)行在兩個進(jìn)程中,一個是client進(jìn)程,主要包括JAVA代 碼與一些Native c/c+代碼;另一個是service進(jìn)程,屬于服務(wù)端,是native c/c+ 代碼,并且,camera service 屬于 Android 系統(tǒng)的一個 native 服務(wù),用 native c/c+ 代碼實(shí)現(xiàn),主要負(fù)責(zé)和Linux kernel中的Camera Driver交互,搜集
2、Linux kernel 中Camera Driver上傳的數(shù)據(jù),并交給顯示系統(tǒng)(surface)顯示。client進(jìn)程與service進(jìn)程通過Binder機(jī)制通信,client端通過調(diào)用service 端的接口實(shí)現(xiàn)各個具體的功能。但真正的preview數(shù)據(jù)不會通過Binder IPC機(jī)制 從service端復(fù)制到client端,而是通過回調(diào)函數(shù)與消息的機(jī)制將preview數(shù)據(jù) buffer的地址傳到client端,最終可在Java應(yīng)用中操作處理這個preview數(shù)據(jù)。二.Android Camera的代碼結(jié)構(gòu)1)應(yīng)用層Camera的應(yīng)用層在 Android上表現(xiàn)為直接調(diào)用 SDK API開發(fā)
3、的一個Camera應(yīng)用APK包,代碼在/android/packages/apps/Camera下,其主要作用是對 android.hardware.Camer(frameworks/base/core/java/android/hardware/Camera.javd) 類的調(diào)用,并且實(shí)現(xiàn)Camera應(yīng)用的業(yè)務(wù)邏輯和UI顯示。2)框架層框架層包含了 camera的JNI實(shí)現(xiàn),Camera Client和Service三部分。其中, JNI提供接口給上層JAVA代碼(android.hardware.Camer類)調(diào)用,文件路徑為: frameworks/base/core/jni/andro
4、id_hardware_Camera.cpp,這部分內(nèi)容編譯成為目 標(biāo) libandroid_runtime.so。Camera Client 實(shí)現(xiàn)的代碼在 frameworks/av/camera/下, 這部分的內(nèi)容被編譯成庫libcamera_client.so,主要實(shí)現(xiàn)了以下幾個類:Camera-Camera.cpp/Camera.hCameraParametersCameraParameters.cpp/CameraParameters.hICamera ICamera.cpp/ ICamera.hICameraClient ICameraClient.cpp/ ICameraClie
5、nt.hICameraService- ICameraService.cpp/ ICameraService.hICamera、ICameraClient、ICameraServide 三個類是按照 Binder IPC 通信要求 的框架實(shí)現(xiàn)的,用來與service端通信。類CameraParameters接收Framework層 的android.hardware.camera:Parameters類為參數(shù),解析與格式化所有的參數(shù)配置。 Camera是個很重要的類,它與Camera Service端通過Binder IPC機(jī)制交互來實(shí) 現(xiàn)具體功能。Camera繼承自BnCameraClien
6、t,并最終繼承自ICameraClient。Camera Service 文件分布在 frameworks/av/services/camera/libcameraservice/, 這部分內(nèi)容被編譯成庫 libcameraservice.so, libcameraservice.so 是 Camera 的服務(wù) 器程序,它通過繼承l(wèi)ibcamera_client.so的類實(shí)現(xiàn)服務(wù)器的功能,并且與 libcamera_client.so中的另外一部分內(nèi)容則通過進(jìn)程間通訊(即Binder機(jī)制)的 方式進(jìn)行通訊。里面主要實(shí)現(xiàn)了兩個類:CameraServiceBnCameraServiceICame
7、raServiceCameraService:ClientBnCameraICameraCameraService:Client 通過調(diào)用 CameraHardwareInterface 類來實(shí)現(xiàn)具體的功 能,CameraHardwareInterface 直接與 camera HAL 層交互。3)HAL 層Camera HAL 一般實(shí)現(xiàn)為一個動態(tài)庫libcamera.so(動態(tài)庫的名字可以修改, 只需要與android.mk 一致即可)。所有java應(yīng)用層中camera的功能最終會調(diào)用 到HAL層這里,Camera HAL層的實(shí)現(xiàn)依賴于硬件,在這些頭文件Camera.h提 供了對上層的接口,
8、而其他的幾個頭文件都是提供一些接口類(即包含了純虛函 數(shù)的類),這些接口類必須被實(shí)現(xiàn)類繼承才能夠使用。一般通過 V4L2 command 從 linux kernel 中的 camera driver 獲得 preview 數(shù)據(jù), 然后交給surface(overlay)顯示或者保存為文件。在HAL層需要打開對應(yīng)的設(shè) 備文件,并通過ioctrl訪問camera driver。Android通過這個HAL層來保證底層 硬件(驅(qū)動)改變,只需修改對應(yīng)的HAL層代碼,F(xiàn)rameWork層與JAVA AP層 都不用改變。在Camera系統(tǒng)的各個庫中,libui.so位于核心的位置,它對上層的提供的接
9、口主要是Camera類,類libandroid_runtime.so通過調(diào)用Camera類提供對JAVA 的接口,并且實(shí)現(xiàn)了 android.hardware.camera 類。libcameraservice.so 是 Camera 的服務(wù)器程序,它通過繼承l(wèi)ibcamera_client.so的類實(shí)現(xiàn)服務(wù)器的功能,并且與 libcamera_client.so中的另外一部分內(nèi)容則通過進(jìn)程間通訊(即Binder機(jī)制)的 方式進(jìn)行通訊。Camera主要的頭文件有以下幾個:ICameraClient.hCamera.hICamera.hICameraService.hCameraHardware
10、Interface.h在這些頭文件Camera.h提供了對上層的接口,而其他的幾個頭文件都是提 供一些接口類(即包含了純虛函數(shù)的類),這些接口類必須被實(shí)現(xiàn)類繼承才能夠 使用。Android下Camera涉及的各個類和接口的UML關(guān)系如下圖所示。WnHwHsdvii&l n IxrF 炒Serviic-cCIkxie整個Camera子系統(tǒng)運(yùn)行時,可以分成Client和Server兩個部分,它們之間 使用Binder機(jī)制實(shí)現(xiàn)進(jìn)程間通訊。這樣在客戶端調(diào)用接口,功能則在服務(wù)器中 實(shí)現(xiàn),但在客戶端中調(diào)用就好像直接調(diào)用服務(wù)器中的功能,進(jìn)程間通訊的部分對 上層程序不可見。從框架結(jié)構(gòu)上來看,ICameraSe
11、rvice.h、ICameraClient.h 和 ICamera.h 三個類 定義了 Camera的接口和架構(gòu),ICameraService.cpp和Camera.cpp兩個文件用于 Camera架構(gòu)的實(shí)現(xiàn),Camera.cpp里實(shí)現(xiàn)了 camera 子系統(tǒng)的Client核心Camera 類,它是整個系統(tǒng)核心,里面有startPreview()、takePicture()等函數(shù)用于實(shí)現(xiàn)camera 的預(yù)覽、拍照等工作。ICamera類提供了 Camera主要功能的接口,在客戶端方 調(diào)用。CameraService.cpp實(shí)現(xiàn)camera子系統(tǒng)的service, camera各種具體功能實(shí) 現(xiàn)
12、在CameraService的子類Client里面完成,而最終是通過調(diào)用 CameraHardwareInterface 的接 口來實(shí)現(xiàn)具體功能,CameraHardwareInterface 類直 接與camera的HAL層交互。在上圖中,圖中紅色虛線框的部分都是Camera子系統(tǒng)的Framework部分, 它主要利用了 Android系統(tǒng)最為常見的Binder機(jī)制來完成通訊。藍(lán)色的部分通過 調(diào)用Camera硬件相關(guān)的接口完成具體的Camera服務(wù)功能,其它的部分是為上 層的JAVA程序提供JNI接口。在整體結(jié)構(gòu)上,左邊可以視為一個客戶端,右邊 是一個可以視為服務(wù)器,二者通過Android的Binder來實(shí)現(xiàn)進(jìn)程間的通訊,而應(yīng) 用程序則無需關(guān)心這些service c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年榆林市第五幼兒園招聘備考考試試題附答案解析
- 2026年甘肅省嘉峪關(guān)市民政局招聘公益性崗位人員參考考試試題附答案解析
- 區(qū)隊(duì)安全生產(chǎn)例會制度
- 綠色基地生產(chǎn)管理制度
- 安全生產(chǎn)宣傳報道制度
- 寫字樓安全生產(chǎn)十項(xiàng)制度
- 工廠生產(chǎn)金屬管理制度
- 生產(chǎn)運(yùn)行記錄管理制度
- 2026廣西柳州事業(yè)單位招聘1111人參考考試題庫附答案解析
- 農(nóng)業(yè)安全生產(chǎn)制度范本
- 三年級上冊數(shù)學(xué)第三單元題型專項(xiàng)訓(xùn)練-判斷題(解題策略專項(xiàng)秀場)人教版(含答案)
- 湖南省婁底市新化縣2024-2025學(xué)年高一上學(xué)期期末考試生物試題(解析版)
- GB/T 45629.1-2025信息技術(shù)數(shù)據(jù)中心設(shè)備和基礎(chǔ)設(shè)施第1部分:通用概念
- 2025年中考?xì)v史開卷考查范圍重大考點(diǎn)全突破(完整版)
- 學(xué)術(shù)誠信與學(xué)術(shù)規(guī)范研究-深度研究
- 《ETF相關(guān)知識培訓(xùn)》課件
- (一模)烏魯木齊地區(qū)2025年高三年級第一次質(zhì)量英語試卷(含答案)
- 2025年云南省普洱市事業(yè)單位招聘考試(833人)高頻重點(diǎn)提升(共500題)附帶答案詳解
- DB15-T 3677-2024 大興安嶺林區(qū)白樺樹汁采集技術(shù)規(guī)程
- 2024年《13464電腦動畫》自考復(fù)習(xí)題庫(含答案)
- 義務(wù)教育階段學(xué)生語文核心素養(yǎng)培養(yǎng)的思考與實(shí)踐
評論
0/150
提交評論