HAL 層
Android P 中 相機 HAL 代碼目錄:
- Android Camera parameters
hardware/interfaces/camera/common/1.0/default/CameraParameters.cpp
- MTK Camera parameters
vendor/mediatek/proprietary/hardware/mtkcam/utils/fwk/CameraParameters.cpp
vendor/mediatek/proprietary/hardware/mtkcam/utils/fwk/MtkCameraParameters.cpp
主要分析 MTK 平臺
MTK 平臺使用 MTK Camera HAL ,拓展平臺的 Camera 功能。
- MTK Camera HAL 目錄
vendor/mediatek/proprietary/hardware/mtkcam
vendor/mediatek/proprietary/hardware/mtkcam3
通過打印信息和代碼跳轉可知,
vendor/mediatek/proprietary/hardware/mtkcam/main/hal/device/1.x/device/CameraDevice1Base.cpp
Return<Status> CameraDevice1Base::setParameters(const hidl_string& params)
用 grep 搜索查到
vendor/mediatek/proprietary/hardware/mtkcam/middleware/v1/common/paramsmgr/params/ParamsManager.cpp
發送 CameraParameters
vendor/mediatek/proprietary/hardware/mtkcam/utils/fwk/CameraParameters.cpp
是不是很熟悉下圖代碼中的成員函數: flatten , unflatten , set , get , 和framework 中 CameraParameters2.cpp、 Camera.java 函數命名規則類似。
在Android 源碼中搜索 setParameters metadata CameraId 等,根據經驗定位到如下文件:
不分析定位代碼的過程,這裏給出部分文件的索引,感興趣的朋友可查閱源碼。
vendor/mediatek/proprietary/hardware/mtkcam/middleware/v1/adapter/Default/v3/DefaultAdapter.Param.cpp
vendor/mediatek/proprietary/hardware/mtkcam/middleware/v1/LegacyPipeline/request/RequestControllerImp.cpp
vendor/mediatek/proprietary/hardware/mtkcam/utils/metastore/metadataprovider/MetadataProvider.cpp
vendor/mediatek/proprietary/hardware/mtkcam/utils/LogicalCam/HalLogicalDeviceList.cpp
根據上述代碼的 pHalDeviceList 定位到 HalLogicalDeviceList
/vendor/mediatek/proprietary/hardware/mtkcam/utils/LogicalCam/HalLogicalDeviceList.cpp
在下圖的名字中可知管理相機設備(邏輯)列表。
查閱代碼繼續定位到
vendor/mediatek/proprietary/hardware/mtkcam/drv/src/sensor/mtxxxx/imgsensor_drv.cpp
熟悉linux的朋友從如下代碼中的 open close ioctl 可知進入linux 用戶空間。