Camera Framework Client流程总结

目录

一、getSystemService

二、CameraManager

1.openCamera

三、CameraDevice

1.CameraDeviceImpl

2.StateCallback

3.createCaptureSession

4.createCaptureRequest

四、CaptureSession

1.StateCallback

2.setRepeatingRequest

3.capture

五、CaptureRequest

六、CaptureResult 

总结

        本文主要一起看下之前一篇app demo涉及的一些接口函数,主要涉及代码位置camera2

一、getSystemService

        首先通过getSystemService接口获取camera的服务

mCamManager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);

         其实它就是直接获取之前SystemServiceRegistry已经创建好的CameraManager

registerService(Context.CAMERA_SERVICE, CameraManager.class,
        new CachedServiceFetcher<CameraManager>() {
    @Override
    public CameraManager createService(ContextImpl ctx) {
        return new CameraManager(ctx);
    }});

二、CameraManager

         CameraManager负责detect、connect device,创建本地的CameraDevice实例来控制sevice端的device

1.openCamera

         这里面connectDevice就是真正去openCamera

openCamera(String cameraId, final CameraDevice.StateCallback callback, Handler handler)
    openCameraForUid(String cameraId, final CameraDevice.StateCallback callback,
                     Executor executor, int clientUid)
        openCameraDeviceUserAsync(String cameraId, CameraDevice.StateCallback callback,  
                                  xecutor executor, final int uid)
            android.hardware.camera2.impl.CameraDeviceImpl deviceImpl =
                        new android.hardware.camera2.impl.CameraDeviceImpl(
                           cameraId, callback, executor, characteristics,
                           mContext.getApplicationInfo().targetSdkVersion);
            cameraUser = cameraService.connectDevice(callbacks, cameraId,
                                                     mContext.getOpPackageName(), uid);
            deviceImpl.setRemoteDevice(cameraUser);

三、CameraDevice

1.CameraDeviceImpl

        CameraDevice的具体实现,里面重要的是包含了从service那获取的

ICameraDeviceUser cameraUser

2.StateCallback

public abstract void onOpened(@NonNull CameraDevice camera); // Must implement

        这是必须实现的回调函数,在connectDevice成功之后,deviceImpl.setRemoteDevice里被调用

3.createCaptureSession

SurfaceTexture mSurfaceTexture = mTextureView.getSurfaceTexture();
// 设置TextureView 用于显示的缓冲区大小
mSurfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight());
mPreviewSurface = new Surface(mSurfaceTexture);
ImageReader mImageReader;
mCamDevice.createCaptureSession(Arrays.asList(mPreviewSurface, mImageReader.getSurface()), 
                                new CameraCaptureSession.StateCallback())
    createCaptureSessionInternal
        configureStreamsChecked
            mRemoteDevice.beginConfigure();
            mRemoteDevice.createStream(outConfig);
            mRemoteDevice.endConfigure(operatingMode, null);
        

        通过 SurfceTexture、ImageReader两种surface构造CaptureSession,session创建成功之后会回调CaptureSession.StateCallback的onConfigured接口。关于ImageReader的surface的格式映射在其构造函数里有映射,比如RAW_SENSOR映射到的是RAW16

         // retrieve hal Format and hal dataspace from imageFormat
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值