我對Android Camera的認識,會陸續的全部寫下來,逐步完善大腦裡的Camera網路。
1.Android Camera的2個獨立進程
Android Camera 是C/S架構已經被說爛了,但是我還是要把這條記下來,因為我時常會腦袋短路,在client端做些無用的勞動希望來解決問題,那麼這個希望真的就是奢望了。
核心自然不用說,是service端。service進程一直負責接收底層Camera 驅動傳來的資料,然後傳給surface顯示出來。
Client端也不是吃乾飯的。Client進程雖然不曾擁有任何實質的Camera資料,但是service端為它提供了豐富的介面,它可以輕鬆的獲得Camera資料的地址,然後處理這些資料。
最後再補一句廢話,Client和Service是通過Binder通訊的。
2.Camera和ICamera
剛開始接觸Camera的時候,苦於理不清Camera的工作流程,當我看著看著Camera,摁著鍵盤Ctrl+】跳來跳去,跳到ICamera出現的時候,頓時心裡只有一種感覺,這不是坑爹麼!
其實,靜下心來,仔細分析一下,也不是很坑爹 >_< ...
ICamera,ICameraClient,ICameraService 全部都屬於Android Camera 的 Client端,他們的任務就是負責與Android Camera 的Service端通訊。
嗯…還得使下這個圖,請注意,我們一直活躍在Android Camera 的 Client端。
按照上圖的流程,一路哐哐哐下來,到了Camera.cpp,終於和ICamera扯上關係了。對於上層應用來說,Camera.cpp是最為直接的函數調用和實現。繼承於ICameraClient類,典型的Client端的介面執行個體。
千萬不要怕暈,事實是這樣的: sp<Camera> camera = Camera::connect();
Camera類通過sp<ICamera> mCamera對象,調用函數。
達到的效果就是好像是在直接調用CameraService::Client的mClient的函數們。