frameworks/av/camera/
生成libcamera_client共享庫,是與相機相關的
開始覺得有點疑惑,怎麼頭檔案全都不見了?
原來它們都被整理放到了frameworks/av/include/camera檔案夾裡
但是又有問題出現了,我看到Android.mk裡的LOCAL_C_INCLUDES值裡面沒有它們的蹤迹,怎麼編譯就沒有出問題了?
原來它們的路徑已經編入了全局路徑裡,可以檢視/build/core/config.mk 的配置
在檢視這個項目代碼的時候,有點比較頭疼的就是有大量binder相關的代碼,是以最好把它們都給忽略去看實質性的代碼會比較輕松
花了些時間看了一下camera調用的整個流程,發現也挺複雜不過也挺有趣的。
複雜是應為流程衆恒好多個項目,看的時候跳項目跳得頭暈了
有趣是應為這種元件之間解耦的方式相當獨立,一層一層的好清晰,可以看到binder的強大威力所在
流程如下:
1.平台啟動時會解釋/system/core/rootdir/init.rc檔案,主要是啟動好相關預定的服務
我們的camera的進入口就是從這個
service media /system/bin/mediaserver開始的
2.mediaserver是linux執行程式,執行它就會開始CameraService的服務背景,會以守護程序的形式一直存在
3.其他項目就可以利用camera 預先定好的binder接口來調用執行真正的服務,就像camera這個項目
項目分布
frameworks/av/media/mediaserver/ 啟動入口點
frameworks/av/services/camera/libcameraservice/ 服務實作地方
frameworks/av/camera/ camera輔佐庫
獲得的知識點:
1.初識binder架構的實作,不過這個項目挺複雜,不适合binder入門