
文章插圖
這篇文章主要分下面幾點(diǎn)來展開講解:
1) Android 最新Camera 整體框架;2) Android Camera2 和HAL3 的基本了解;3) Camera2 介紹;( 本文所寫的內(nèi)容基于Android 9.0 )
一、Android最新Camera 整體框架
Android Camera整體框架主要包括三個(gè)進(jìn)程: app進(jìn)程 、 camera server進(jìn)程 、 hal進(jìn)程(provider進(jìn)程)。進(jìn)程之間的通信都是通過binder實(shí)現(xiàn),其中app和camera server通信使用 AIDL (Android Interface Definition Language) ,camera server和hal(provider進(jìn)程)通信使用 HIDL (HAL interface definition language)。
Android上面的框架分級(jí),基本都是類似的,應(yīng)用層-> framework層->Hal層,我們ps看下設(shè)備上實(shí)際的進(jìn)程情況,如下圖所示,可以看到有cameraserver和provider進(jìn)程 。cameraservice是負(fù)責(zé)app和framework層的通信,而provider進(jìn)程則是負(fù)責(zé)framework和hal層之間的通信 。
(附:
Android 8.0重新設(shè)計(jì)了 Android 操作系統(tǒng)框架(在一個(gè)名為 “Treble” 的項(xiàng)目中),以便讓制造商能夠以更低的成本更輕松、更快速地將設(shè)備更新到新版 Android 系統(tǒng) 。
Android O之后使用Treble的架構(gòu),為了解決Android系統(tǒng)的碎片化問題和提高系統(tǒng)更新的效率,減少了framework 和HAL 的耦合性,進(jìn)而引出了HIDL 的概念 。
HIDL 全稱為HAL interface definition language(發(fā)音為“hide-l”)是用于指定 HAL 和其用戶之間的接口的一種接口描述語言 (IDL) 。
HIDL 的目標(biāo)是,框架可以在無需重新構(gòu)建 HAL 的情況下進(jìn)行替換 。HAL 將由供應(yīng)商或 SOC 制造商構(gòu)建,放置在設(shè)備的 /vendor 分區(qū)中,這樣一來,框架就可以在其自己的分區(qū)中通過 OTA 進(jìn)行替換,而無需重新編譯 HAL,這也是Project Treble框架設(shè)計(jì)而誕生的 。)
如下圖所示,展示了Android Camera的最新框架,我們先大概看下圖片流程,對(duì)整體框架有個(gè)基本了解 。
二、Android Camera2 和HAL3 的基本了解
1) Camera2 接口什么時(shí)候開始引入的?
從 Android 5.0 開始,Google 引入了一套全新的相機(jī)框架 Camera2(android.hardware.camera2)并且廢棄了舊的相機(jī)框架 Camera1(android.hardware.Camera)。
不了解的同學(xué),可能會(huì)有疑問,為啥要廢棄Camera1接口?
基本原因是,camera1接口過于簡(jiǎn)單,沒法滿足更加復(fù)雜的相機(jī)應(yīng)用場(chǎng)景 。為了給應(yīng)用層提供更多的相機(jī)控制權(quán)限,從而構(gòu)建出更高質(zhì)量的相機(jī)應(yīng)用程序,Google才推出了Camera2 接口 。
下面可以看下和Camera1比較,Camera2有哪些高級(jí)特性 。
2)一些只有 Camera2 才支持的高級(jí)特性
1. 在開啟相機(jī)之前檢查相機(jī)信息 出于某些原因,你可能需要先檢查相機(jī)信息再?zèng)Q定是否開啟相機(jī),例如檢查閃光燈是否可用 。在 Caemra1 上,你無法在開機(jī)相機(jī)之前檢查詳細(xì)的相機(jī)信息,因?yàn)檫@些信息都是通過一個(gè)已經(jīng)開啟的相機(jī)實(shí)例提供的 。在 Camera2 上,我們有了和相機(jī)實(shí)例完全剝離的 CameraCharacteristics 實(shí)例專門提供相機(jī)信息,所以我們可以在不開啟相機(jī)的前提下檢查幾乎所有的相機(jī)信息 。2. 在不開啟預(yù)覽的情況下拍照 在 Camera1 上,開啟預(yù)覽是一個(gè)很重要的環(huán)節(jié),因?yàn)橹挥性陂_啟預(yù)覽之后才能進(jìn)行拍照,因此即使顯示預(yù)覽畫面與實(shí)際業(yè)務(wù)需求相違背的時(shí)候,你也不得不開啟預(yù)覽 。而 Camera2 則不強(qiáng)制要求你必須先開啟預(yù)覽才能拍照 。3. 一次拍攝多張不同格式和尺寸的圖片 在 Camera1 上,一次只能拍攝一張圖片,更不同談多張不同格式和尺寸的圖片了 。而 Camera2 則支持一次拍攝多張圖片,甚至是多張格式和尺寸都不同的圖片 。例如你可以同時(shí)拍攝一張 1440×1080 的 JPEG 圖片和一張全尺寸的 RAW 圖片 。4. 控制曝光時(shí)間 在暗環(huán)境下拍照的時(shí)候,如果能夠適當(dāng)延長(zhǎng)曝光時(shí)間,就可以讓圖像畫面的亮度得到提高 。在 Camera2 上,你可以在規(guī)定的曝光時(shí)長(zhǎng)范圍內(nèi)配置拍照的曝光時(shí)間,從而實(shí)現(xiàn)拍攝長(zhǎng)曝光圖片,你甚至可以延長(zhǎng)每一幀預(yù)覽畫面的曝光時(shí)間讓整個(gè)預(yù)覽畫面在暗環(huán)境下也能保證一定的亮度 。而在 Camera1 上你只能 YY 一下 。5. 連拍 連拍 30 張圖片這樣的功能在 Camera2 出現(xiàn)之前恐怕只有系統(tǒng)相機(jī)才能做到了(通過 OpenGL 截取預(yù)覽畫面的做法除外),也可能是出于這個(gè)原因,市面上的第三方相機(jī)無一例外都不支持連拍 。有了 Camera2,你完全可以讓你的相機(jī)應(yīng)用程序支持連拍功能,甚至是連續(xù)拍 30 張使用不同曝光時(shí)間的圖片 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- win10獲取system權(quán)限 windows虛機(jī)無法獲取ip
- 蘋果激活鎖解除方法 appid沒有權(quán)限
- 手機(jī)里面的nfc使用方法 nfc門禁卡模擬器免root
- 文件管理訪問限制 查看文件夾權(quán)限命令
- 自帶內(nèi)存跑步聽歌不用帶手機(jī) 跑步不用帶手機(jī)也能聽歌
- win10自帶系統(tǒng)遷移工具 win10遷移到固態(tài)硬盤詳細(xì)教程
- dnf端口輔助免費(fèi)權(quán)限 dnf端口輔助什么意思
- 免root狀態(tài)欄美化神器 android狀態(tài)欄尺寸
- 獲取管理員權(quán)限win10的步驟 win10提升管理員權(quán)限的方法
- linux普通用戶修改root密碼 linux修改root密碼命令
