1. 程式人生 > >Android7.1 [Camera] Camera Hal 原始碼分析(一)

Android7.1 [Camera] Camera Hal 原始碼分析(一)

原始碼平臺:rk3399

 

命令列ls看下原始碼的結構

hardware/rockchip/camera/CameraHal:

lib目錄

原始碼的檔案看起來有點多,我們看看Android.mk檔案,

這些檔案最終編譯成camera.rk30board.so庫檔案。這些檔案中主要是CameraHal_Module.cpp和CameraHal.cpp這兩個檔案組織起整個hal層其他檔案。

CameraSocAdapter.cpp\CameraUSBAdapter.cpp\CameraIspAdapter.cpp\CameraIspSOCAdapter.cpp\FakeCameraAdapter.cpp這5個adapter都是繼承自CameraAdapter.cpp,主要實現針對具體的camera的操作,比如開始預覽,停止預覽,閃光控制,設定引數等等,實現的這些操作都會在CameraHal.cpp中呼叫。

CameraHalUtil.cpp是個工具類,裡面有一些比如YUV420 旋轉的函式,作為一個工具。

全部檔案的大概呼叫框架:

從上圖的框架看,canera server通過與CameraHal_Module建立和Hal層的連線後,CmaeraHal會通過SensorListener返回訊息給上層。

如果上層要預覽或者拍照,要通過binder機制向Hal層傳送命令,Hal層MessageQueue.cpp的訊息佇列獲取到上層的命令後,會通過訊息通知器通知CameraHal,CameraHal有一個CommandThread接收命令,收到命令後,最終會下達命令給對應的Adapter去執行對於的動作。