Camera API1 相机参数设置流程一 framework层
Camera API1 相机参数设置流程二 hardware层
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 用户空间。