天天看點

解說==frameworks/av/camera/

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入門