CameraAppFramework流程之OpenCamera

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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值