Camera Framework Client流程总结

本文详细梳理了Android Camera Framework客户端的工作流程,包括通过getSystemService获取CameraManager,CameraManager的openCamera,CameraDevice的创建及StateCallback,CaptureSession的建立与请求设置,以及CaptureRequest和CaptureResult的使用。在创建CaptureSession时,讨论了SurfaceTexture和ImageReader的配置,同时解释了如何通过CaptureRequest控制预览和拍照。最后,文章对整个流程进行了总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、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
323          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值