前段时间在4412的开发板上面调通了camera 5.0 hardware,现在来梳理下camera框架。
我这里的camera device api版本使用的是3.0;camera module api版本使用的是2.3;CameraService会根据这个api版本初始化不同的client,例如这里将初始化Camera2Client。
mDevice.common.version = CAMERA_DEVICE_API_VERSION_3_0;
camera_module_t HAL_MODULE_INFO_SYM = {
.common = {
.tag = HARDWARE_MODULE_TAG,
.module_api_version = CAMERA_MODULE_API_VERSION_2_3,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = CAMERA_HARDWARE_MODULE_ID,
.name = "V4l2 Camera",
},
.get_number_of_cameras = android::HalModule::getNumberOfCameras,
.get_camera_info = android::HalModule::getCameraInfo,
.set_callbacks = android::HalModule::setCallbacks,
};
类说明:
CameraDeviceFactory:工具类,根据hal中选择的device版本来选择初始化Camera2Device或者Camera3Device;我这里是
CAMERA_DEVICE_API_VERSION_3_0,所以会初始化Camera3Device
CameraDeviceBase:Camera3Device和Camera2Device的基类。Camera2Client通过它来访问hardware
CameraService初始化
void CameraService::onFirstRef()
{
LOG1("CameraService::onFirstRef");
hw_get_module(CAMERA_HARDWARE_MODULE_ID, (const hw_module_t **)&mModule) < 0
mNumberOfCameras = mModule->get_number_of_cameras(); //调用的是hal层的android::HalModule::getNumberOfCameras
if (mModule->common.module_api_version >=
CAMERA_MODULE_API_VERSION_2_1) {
mModule->set_callbacks(this); //api版本大于等于2.1设置回调,我这里没有具体实现这个接口,直接在hal层中return OK
}
if (mModule->common.module_api_version >= CAMERA_MODULE_API_VERSION_2_2) {
setUpVendorTags(); //这里会调用camera_module_t的get_vendor_tag_ops,这个可以不实现
}
CameraDeviceFactory::registerService(this