APP 到 Framework 阶段
CameraManager.java
谷歌将CameraManager定义为一个系统服务,通过 Context.getService 来获取(Context.CAMERA_SERVICE),主要用于检测以及打开系统相机,通过 OpenCamera 方法来打开相机;此外,还定义了 getCameraCharacteristics 方法来获取当前 Camera 设备支持的属性信息,该属性信息通过 CameraCharacteristics 来表示,其中包括了图像数据的大小以及帧率等信息
manager.openCamera(cameraId, callback, handler);
openCamera(@NonNull String cameraId,
@NonNull final CameraDevice.StateCallback callback, @Nullable Handler handler)
openCameraForUid(cameraId, callback, CameraDeviceImpl.checkAndWrapHandler(handler),
USE_CALLING_UID);
openCameraForUid(cameraId, callback, executor, clientUid, /*oomScoreOffset*/0);
openCameraDeviceUserAsync(cameraId, callback, executor, clientUid, oomScoreOffset){
ICameraDeviceUser cameraUser = null;
android.hardware.camera2.implCameraDeviceImpl deviceImpl = new android.hardware.camera2.impl.CameraDeviceImpl(
cameraId, callback, executor, characteristics, physicalIdsToChars, mContext.getApplicationInfo().targetSdkVersion, mContext)
ICameraService cameraService = CameraManagerGlobal.get().getCameraService();
//这一步开始去链接设备
cameraUser = cameraService.connectDevice(callbacks, cameraId, mContext.getOpPackageName(), mContext.getAttributionTag(), uid, oomScoreOffset, mContext.getApplicationInfo().targetSdkVersion)
deviceImpl.setRemoteDevice(cameraUser)
return deviceImpl
};
CaneraService.cpp
Status CameraService::connectDevice(const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb, const String16& cameraId, const String16& clientPackageName, int clientUid){
sp<CameraDeviceClient> client = nullptr;
ret = connectHelper<hardware::camera2::ICameraDeviceCallBacks, CameraDeviceClient>(cameraCb, id,/*api1CameraId*/ -1, CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageName, /*legacyMode*/ false, /*shimUpdateOnly*/ false, /*out*/ client);
}
Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8& cameraId, int api1CameraId, int halVersion, const String16& clientPackageName, int clientUid, int clientPid, apiLev