android Camera 之 ZSL


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM