CameraProvider服务开机启动

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.流程图

CameraProvider服务开机启动_第1张图片

2.

HIDL_FETCH_ICameraProvider -> provider = getProviderImpl()
{
CameraProvider *provider = new 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 mCameraStatusMap; // camera id -> status)

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());

}

你可能感兴趣的:(二,Camera,HAL)