極客筆記Android Camera2 API
Pipeline
Camera2 的 API 模型被設(shè)計(jì)成一個(gè) Pipeline(管道),它按順序處理每一幀的請(qǐng)求并返回請(qǐng)求結(jié)果給客戶端。下面這張來自官方的圖展示了 Pipeline 的工作流程,我們會(huì)通過一個(gè)簡單的例子詳細(xì)解釋這張圖。

為了解釋上面的示意圖,假設(shè)我們想要同時(shí)拍攝兩張不同尺寸的圖片,并且在拍攝的過程中閃光燈必須亮起來。整個(gè)拍攝流程如下:
創(chuàng)建一個(gè)用于從 Pipeline 獲取圖片的 CaptureRequest。
修改 CaptureRequest 的閃光燈配置,讓閃光燈在拍照過程中亮起來。
創(chuàng)建兩個(gè)不同尺寸的 Surface 用于接收?qǐng)D片數(shù)據(jù),并且將它們添加到 CaptureRequest 中。
發(fā)送配置好的 CaptureRequest 到 Pipeline 中等待它返回拍照結(jié)果。
一個(gè)新的 CaptureRequest 會(huì)被放入一個(gè)被稱作 Pending Request Queue 的隊(duì)列中等待被執(zhí)行,當(dāng) In-Flight Capture Queue 隊(duì)列空閑的時(shí)候就會(huì)從 Pending Request Queue 獲取若干個(gè)待處理的 CaptureRequest,并且根據(jù)每一個(gè) CaptureRequest 的配置進(jìn)行 Capture 操作。最后我們從不同尺寸的 Surface 中獲取圖片數(shù)據(jù)并且還會(huì)得到一個(gè)包含了很多與本次拍照相關(guān)的信息的 CaptureResult,流程結(jié)束。