第 1 章:歡迎來到 Android Camera2
了解為什麼 Android Camera2 如此重要,它如何與 Camera1 和 CameraX 對比,它能實現什麼功能,以及你將在這個系列中建構什麼。
第2章:理解智慧型手機相機
探索每支智慧型手機內部相機模組的硬體:鏡頭、影像感光元件、ISP 處理器、RAW 與 JPEG 的差異、多鏡頭設計,以及從光子到儲存照片的完整旅程。
第 3 章:現代智慧型手機攝影
巡覽現代手機的運算與光學功能:HDR、人像散景、夜景模式、慢動作、超廣角、望遠、微距,以及運算攝影如何融合硬體與軟體。
第 4 章:探索你自己的手機
使用 Android Camera Parameters 配套應用來檢查你自己的裝置。學習讀取 Camera ID、檢查 Hardware Level、列舉相機、檢查支援的格式、幀率、變焦範圍以及 RAW 能力。
第 5 章:建立你的第一個 Camera2 專案
從零開始建置一個完整的 Android Camera2 專案。學習相機權限、CameraManager 初始化、使用 HandlerThread 進行背景執行緒處理,以及 TextureView 硬體加速所需的專案設定。
第 6 章:發現相機
使用 CameraCharacteristics 枚舉並查詢 Android 設備上的每個鏡頭。學習相機 ID 語意、鏡頭朝向(前置/後置/外部)、外部 USB OTG 鏡頭,以及從 LEGACY 到 LEVEL_3 的硬體層級層級。
第 7 章:打開相機
使用 openCamera() 建立與相機設備的即時連接。掌握 CameraDevice 生命週期,實現包含 onOpened/onDisconnected/onError 的 StateCallback,將打開/關閉操作與 Activity 的 onPause/onResume 整合,並使用基於訊號量的並行控制處理每個 CameraAccessException 錯誤代碼。
第 8 章:顯示相機預覽
使用 TextureView、SurfaceTexture、Surface 和 CameraCaptureSession 在螢幕上渲染即時相機畫面。實現 SurfaceTextureListener,在 configureTransform 中使用 Matrix 變換校正縱橫比,建構 TEMPLATE_PREVIEW 擷取請求,並使用 setRepeatingRequest 啟動預覽串流。
第 9 章:拍照
使用 Camera2 擷取高品質靜態照片,利用 ImageReader (JPEG)、預擷取 AE 觸發和 CaptureCallback 狀態機。使用相容分區儲存的 MediaStore (Android 10+) 和舊版 FileOutputStream 儲存照片,並始終記得關閉 Image 緩衝區。
第 10 章:Camera2 管線
深入了解 Camera2 管線架構 — CaptureRequest、CaptureResult、請求佇列、結果回呼,以及從提交請求到 HAL 處理再到結果返回的端到端流程。
第 11 章:擷取類型
學習 Camera2 的三種擷取類型 — 單次拍攝 (capture)、連拍 (captureBurst) 和重複請求 (setRepeatingRequest) — 以及內建模板 (TEMPLATE_PREVIEW、TEMPLATE_STILL_CAPTURE、TEMPLATE_RECORD 等)。
第 12 章:CameraCharacteristics 深入解析
掌握 CameraCharacteristics —— 在你開啟相機之前描述每台相機的不可變靜態元資料。硬體等級(LEGACY、LIMITED、FULL、LEVEL_3、EXTERNAL)、能力旗標、元資料鍵組織方式,以及執行時能力查詢。
第 13 章:曝光
掌握攝影曝光的基礎知識——由 ISO、快門速度和光圈組成的曝光三角。理解 EV 檔位、陽光 16 法則,以及不同組合如何透過創意權衡創造相同的曝光。
第 14 章:Camera2 中的手動曝光
利用 Android Camera2 API 完全掌控曝光。學習禁用自動曝光、透過 SENSOR_SENSITIVITY 設定手動 ISO、以納秒為單位使用 SENSOR_EXPOSURE_TIME 控制快門速度,並建構用於延時攝影、長曝光和包圍曝光的 Kotlin 範例。
第 15 章:對焦
在 Android Camera2 中掌握自動和手動對焦。理解 AF 模式、AF 狀態機、單次觸發拍攝序列、使用 LENS_FOCUS_DISTANCE 屈光度的手動對焦、超焦距,以及在 Kotlin 中建構對焦 SeekBar 滑塊。
第 16 章:白平衡與色彩
在 Android Camera2 中利用自動白平衡預設和手動色彩校正來控制色彩。學習 AWB 模式、色溫 (2000K–10000K)、3×3 色彩變換、COLOR_CORRECTION_GAINS,以及用於暖色調日落預設和全手動白平衡的 Kotlin 程式碼。
第 17 章:3A 管線
將自動曝光 (AE)、自動對焦 (AF) 和自動白平衡 (AWB) 編排成可靠的靜態攝影擷取序列。學習預擷取觸發、閃光燈模式、AE/AF 狀態機,並建構在每次拍攝前協調所有三個 A 的生產級 Kotlin 程式碼。
第 18 章:RAW 攝影
在 Android Camera2 API 中掌握 RAW_SENSOR 格式、使用 DngCreator 建立 DNG 文件、拜耳模式以及同時進行的 RAW+JPEG 擷取
第 19 章:高速影片
使用 CameraConstrainedHighSpeedCaptureSession 實現 120 fps 和 240 fps 高速擷取。學習 createHighSpeedRequestList、硬體限制、FPS 範圍,以及如何將高速影片寫入磁碟。
第 20 章:多相機
探索 Android 9+ 邏輯多相機設備、物理相機 ID、APPROXIMATE 與 CALIBRATED 感光元件同步、無縫變焦切換,以及在 Camera2 API 中透過 OutputConfiguration.setPhysicalCameraId() 實現的同步雙物理拍攝
第 21 章:HDR 與 Ultra HDR
掌握 Android 13+ 10 位元 HDR 影片擷取與 Android 14 JPEG_R Ultra HDR 靜態照片。學習 DynamicRangeProfiles、HLG、HDR10+ 規格,以及如何在 Camera2 API 中配置 10 位元輸出 Surface 和增益圖元數據。
第 22 章:相機擴充
使用 CameraExtensionSession 呼叫 OEM 加速的計算攝影:夜景模式、Bokeh 人像模式、HDR 擴充、人臉修容和自動模式。查詢 CameraExtensionCharacteristics,管理延遲,並對比標準工作階段與擴充工作階段的架構差異。
第 23 章:零快門延遲與重處理
透過循環 YUV/PRIVATE 緩衝、CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG、基於 InputConfiguration 的可重處理捕獲工作階段、ImageWriter 幀重新注入,以及 createReprocessCaptureRequest 實現重量級捕獲後 ISP 處理來建構零快門延遲(ZSL)。同時介紹用於背景處理連續性的 switchToOffline()。
第 24 章:CameraX
精通 CameraX,它是封裝了 Camera2 的 Jetpack 生命週期感知相機庫。學習 UseCase 架構、用於注入手動參數的 Camera2Interop,以及選擇 CameraX 或 Camera2 的決策框架。
第 25 章:原生相機開發
使用 Android NDK 相機堆疊進入原生開發。利用 ACameraManager 從 C++ 打開相機,將 AHardwareBuffer 記憶體直接繫結為 Vulkan 紋理以實現零拷貝 AR,並理解用於 60fps 管線的 OpenGL/Vulkan 互操作。包含汽車 EVS 遷移背景。
第26章:非同步相機程式設計
使用 Kotlin 協程和 Flow 馴服 Camera2 回呼地獄。學習用 suspendCancellableCoroutine 處理一次性操作(openCamera、createCaptureSession、capture),用 callbackFlow 處理連續的 ImageReader 和 CaptureResult 流,用 combine 運算子建構響應式 UI,以及防止 ANR 和死結的執行緒安全模式。
第 27 章:相機測試
完整的 Android 相機測試指南。理解相機 ITS (Image Test Suite)、OEM 出貨前的驗證內容(功能組合、場景測試、感光元件融合)、CTS Verifier 手動測試,以及如何使用 Mockito mock 和可在 CI 上執行的參數化硬體層級測試來編寫你自己的插樁測試。
第 28 章:Camera2 架構
Camera2 架構的大結局。穿越完整堆疊,從你的 Kotlin 應用向下經過 Binder IPC、框架、原生層的 CameraService、Camera3Device、HAL3 以及 camera3_device_t、V4L2 內核驅動,最後到達物理感光元件、ISP、VCM 鏡頭和閃光燈硬體。包括 Treble HAL 要求、LEGACY HAL1 封裝器以及 Android 15 的 CameraDeviceSetup。完整的讀者旅程圖層映射。
相機元資料百科全書
CameraCharacteristics 所有核心元資料鍵的完整參考指南,涵蓋 Sensor、Lens、Control、Scaler、Request、Flash、JPEG、Statistics 和 Info 分類。