1.代码路径
E:\Q\hardware\interfaces\camera\provider\2.4\default\Android.bp
E:\Q\hardware\interfaces\camera\provider\2.4\default\service.cpp
E:\Q\hardware\interfaces\camera\provider\2.4\default\CameraProvider_2_4.cpp
E:\Q\hardware\interfaces\camera\provider\2.4\default\CameraProvider_2_4.h
E:\Q\hardware\interfaces\camera\provider\2.4\default\LegacyCameraProviderImpl_2_4.cpp
E:\Q\hardware\interfaces\camera\provider\2.4\default\LegacyCameraProviderImpl_2_4.h
E:\Q\hardware\libhardware\hardware.c
E:\Q\hardware\libhardware\hardware.h
E:\Q\hardware\interfaces\camera\common\1.0\default\CameraModule.cpp
E:\Q\hardware\interfaces\camera\common\1.0\default\include\CameraModule.h
E:\Q\hardware\qcom\camera\msm8998\QCamera2\QCamera2Hal.cpp
E:\Q\hardware\qcom\camera\msm8998\QCamera2\QCamera2Factory.cpp
E:\Q\hardware\qcom\camera\msm8998\QCamera2\QCameraFlash.cpp
E:\Q\hardware\qcom\camera\msm8998\QCamera2\HAL3\QCamera3HWI.cpp
2.流程图
2.
HIDL_FETCH_ICameraProvider -> provider = getProviderImpl
{
CameraProvider
provider->isInitFailed()
}
new CameraProvider
int err = hw_get_module(CAMERA_HARDWARE_MODULE_ID,(const hw_module_t **)&rawModule);
mModule = new CameraModule(rawModule);
// Setup callback now because we are going to try openLegacy next
err = mModule->setCallbacks(this);
mNumberOfLegacyCameras = mModule->getNumberOfCameras();
这一步很关键
for(){}
auto rc = mModule->getCameraInfo(i, &info);
{将id与camerainfo绑定在一起
index = mCameraInfoMap.add(cameraId, cameraInfo);
}
snprintf(cameraId, sizeof(cameraId), "%d", i);
std::string cameraIdStr(cameraId);
mCameraStatusMap[cameraIdStr] = CAMERA_DEVICE_STATUS_PRESENT;
( std::map
addDeviceNames(i);
}
addDeviceNames{
cameraid与devicename匹配
auto deviceNamePair = std::make_pair(cameraIdStr,getHidlDeviceName(cameraIdStr, deviceVersion));
然后将其加入mCameraDeviceNames中
mCameraDeviceNames.add(deviceNamePair);
将捕捉到的硬件设备添加到mCameraDeviceNames vendor内存区中
}
getHidlDeviceName{
snprintf(deviceName, sizeof(deviceName), "device@%d.%d/legacy/%s",
versionMajor, versionMinor, cameraId.c_str());
}