ZSL的概念
ZSL (zero shutter lag) 中文名稱為零延時拍照,是為了減少拍照延時,讓拍照&回顯瞬間完成的一種技術。
Single Shot
當開始預覽后,sensor 和 VFE 會產生 preview 和 snapshot幀, 而最新的snapshot 幀數據會被存儲在buffer 中。當拍照被觸發,系統計算實際的拍照時間,找出在buffer中的相應幀,然后返回幀到用戶,這就是所謂的“ZERO”。
系統計算出shutter lag的時間,然后把某個幀認作是拍照實時的那幀數據。
ZSL的實現機制
因為ZSL實現需要實現一下幾點:
1. 一個surfaceView用於預覽
2. 一個隊列緩存snapshot的數據
3. 拍照動作獲取隊列某楨數據作為拍照數據輸出
4. 輸出的照片需要YUV->JPEG數據的轉碼
首先說一下ZSL功能在android4.4和android5.0上實現的區別。
Android4.4的實現對於2)步和3)步都是在HAL層實現,HAL層在維護緩存隊列,當接收倒take_picture 命令時直接取得某楨緩存數據,進行轉碼,然后以正常拍照的流程利用@link android.hardware.Camera.PictureCallback通知應用層拍照的數據。
Android5.0的實現對於2)步和3)步都是在應用層實現,應用層在啟動預覽時給HAL層傳遞2個surface給HAL層,HAL層利用其中一個surface用於預覽數據填充,一個surface用於填充snapshot的數據填充。應用層不斷讀取surface中snapshot的數據去維護一個緩存隊列,當用戶執行take_picture,讀取緩存隊列的數據作為拍照數據。
Android5.0中的應用層已經有實現ZSL類:
src/com/android/camera/one/v2/OneCameraZslImpl.java
ref:
android 5.0 Camera 之 ZSL說明
https://blog.csdn.net/qq160816/article/details/50728349
ZSL(zero shutter lag) 簡介
http://blog.chinaunix.net/uid-7213935-id-5753468.html