日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Camera服务之--架构浅析

發(fā)布時(shí)間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Camera服务之--架构浅析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.應(yīng)用層

Camera?的應(yīng)用層在Android?上表現(xiàn)為直接調(diào)用SDK API?開發(fā)的一個(gè)Camera?應(yīng)用APK?包。代碼在/android/packages/apps/Camera?下。主要對 android.hardware.Camera(在Framework中) 類的調(diào)用,并且實(shí)現(xiàn)Camera?應(yīng)用的業(yè)務(wù)邏輯和UI?顯示。一個(gè)Android?應(yīng)用中若要使用這個(gè)android.hardware.Camera類,需要在Manifest?文件聲明Camera?的權(quán)限,另外還 需要添加一些<uses-feature>?元素來聲明應(yīng)用中的Camera?特性,如自動(dòng)對焦等。?具體做法可如下:

<uses-permission?android:name?=?"android.permission.CAMERA"?/>

<uses-feature?android:name?=?"android.hardware.camera"?/>

<uses-feature?android:name?=?"android.hardware.camera.autofocus"?/>

二.Framework層

1.android.hardware.Camera:代碼位置/android/frameworks/base/core/java/android/hardware/Camera.java

這部分目標(biāo)是framework.jar。這是是Android?提供給app層調(diào)用的java接口。這個(gè)類用來連接或斷開一個(gè)Camera?服務(wù),設(shè)置拍攝參數(shù),開始、停止預(yù)覽,拍照等。

2.android.hardware.Camera這個(gè)類是和JNI中定義的類是一個(gè),有些方法通過JNI的方式調(diào)用本地代碼得到,有些方法自己實(shí)現(xiàn)。?
Camera的JAVA native調(diào)用部分(JNI):/android/frameworks/base/core/jni/android_hardware_Camera.cpp。Camera.java 承接JAVA?代碼到C++?代碼的橋梁。編譯生成libandroid_runtime.so?。libandroid_runtime.so庫是公用的,?其中除了Camera?還有其他方面的功能。

3.Camera框架的client部分:

代碼位置:/android/frameworks/av/camera/下5個(gè)文件。

Camera.cpp

CameraParameters.cpp

ICamera.cpp

ICameraClient.cpp

ICameraService.cpp

它們的頭文件在/android/frameworks/av/include/camera目錄下。

這部分的內(nèi)容編譯生成libcamera_client.so?。在Camera?模塊的各個(gè)庫中,libcamera_client.so 位于核心的位置,作為Camera?框架的 Client?客戶端部分,與另外一部分內(nèi)容服務(wù)端?libcameraservice.so?通過進(jìn)程間通訊(即Binder?機(jī)制)的方式進(jìn)行通訊。

4.Camera框架的service部分:

代碼位置:/frameworks/av/services/camera/libcameraservice/。

這部分內(nèi)容被編譯成庫libcameraservice.so?。CameraService?是Camera?服務(wù),Camera?框架的中間層,用于鏈接CameraHardwareInterface?和Client部分 ,它通過調(diào)用實(shí)際的Camera?硬件接口來實(shí)現(xiàn)功能,即下層HAL層。

?

三.硬件抽象層HAL Hardware Abstraction Layer

這個(gè)層次其實(shí)就是用戶空間的驅(qū)動(dòng)代碼。前面有介紹過框架層對下在CameraHardwareInterface.h(/android/frameworks/av/services/camera/libcameraservice/device1/CameraHardwareInterface.h)。 頭文件中定義了 Camera?硬件抽象層的接口,它是包含純虛函數(shù)的類,必須被實(shí)現(xiàn)類繼承才能使用。HAL?層正好繼承 CameraHardwareInterface?接口,依據(jù)V4l2?規(guī)范實(shí)例化底層硬件驅(qū)動(dòng),使用ioctl?方式調(diào)用驅(qū)動(dòng),最終生成 libcamera.so?供框架的libcameraservice.so?調(diào)用。

這層的代碼在/android/hardware/XXX?/libcamera?目錄下(也有可能在vendor?目錄中對應(yīng)的 libcamera?下)。注意這里的XXX?是不同廠商為不同產(chǎn)品(板子)而建的目錄,以高通msm?平臺為例,這里XXX?用msm7k?表示,這樣 高通msm?平臺下這個(gè)HAL?的目錄即為/android/hardware/msm7k/libcamera?。不難看出,如果要在某硬件平臺上運(yùn)行 Android?,也就主要在這一層進(jìn)行修改,因?yàn)樗侵苯雍偷讓佑布?qū)動(dòng)相關(guān)的。上面也講過,應(yīng)用框架層對上對下都定義的標(biāo)準(zhǔn)接口,這樣做的目的也就是 使上層的代碼獨(dú)立,在porting?中不受影響。所以我們現(xiàn)在可以基本確定,如果要改Camera?的硬件,框架層以上的部分都可以不動(dòng),要改就改 HAL?到內(nèi)核層的部分,這也是Android?底層開發(fā)的主要工作。

四.Driver層

這一層主要是基于Linux?的設(shè)備驅(qū)動(dòng)。對Camera?來說,一般是按V4l2?規(guī)范將Camera?原子功能以ioctl?的形式暴露出來供 HAL?層調(diào)用的實(shí)現(xiàn)。

主要功能的實(shí)現(xiàn)代碼在/android/kernel/drivers/media/video/XXX?下。跟HAL?層目錄一 樣,XXX?是不同廠商不同平臺的目錄,以高通msm?平臺為例,這個(gè)目錄就是/android/kernel/drivers/media/video /msm?。所以要在Android?平臺上添加硬件功能,首先考慮將它的驅(qū)動(dòng)加到Android?的Linux?內(nèi)核中。


原文地址:http://www.cnblogs.com/senior-engineer/p/4882456.html

總結(jié)

以上是生活随笔為你收集整理的Camera服务之--架构浅析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。