CameraAppFramework简介

App

CameraManager

谷歌将CameraManager定义为一个系统服务,通过 Context.getService 来获取(Context.CAMERA_SERVICE),主要用于检测以及打开系统相机,通过 OpenCamera 方法来打开相机;此外,还定义了 getCameraCharacteristics 方法来获取当前 Camera 设备支持的属性信息,该属性信息通过 CameraCharacteristics 来表示,其中包括了图像数据的大小以及帧率等信息

CameraDevice

代表被打开的系统相机,用于创建 CameraCaptureSession 以及对于最后相机资源的释放

//打开给定的Camera的连接。使用 getCameraIdList 获取可用相机设备的列表
public void openCamera(String cameraId,final CameraDevice.StateCallback callback, Handler handler)

CameraDevice.StateCallback

定义了一些回调方法,实现交由 App 来完成,主要用于返回创建 Camera 设备的结果

//当相机设备完成打开时调用该方法,此时摄像头设备已经准备就绪,可以调用 createCaptureSession 来设置会话
public abstrace void onOpened(CameraDevice camera);
//当使用 close 关闭相机设备时调用的方法
public void onClosed(CameraDevice camera)
//当相机设备不再可用时调用的方法,如果打开相机失败,则可能会调用此回调而不是 onOpened。断开连接可能是由于安全策略或权限的变更,或者更高优先级的相机 API 客户端调用
public abstract void onDisconnected(CameraDevice camera)
//当相机设备遇到严重错误时调用的方法,这以某种方式表明相机设备或者相机服务出现故障
public abstract void onError(CameraDevice camera, int error)

CameraCaptureSession

该类代表了一个具体的相机会话,创建了与 Camera 设备的通道,而之后对于 Camera 设备的控制都是通过该通道来完成的。当需要进行预览或拍照时,首先通过该类创建一个 Session ,并且调用 startRepeatingRequest 方法开启预览流程,或者使用 capture 方法开始一次拍照动作

CameraCaptureSession.StateCallback

该接口类定义了一系列的回调方法,实现交由 App 完成,主要用于返回创建 CameraCaptureSession 的结果,成功则通过 onConfigured 方法返回一个 CameraCaptureSession 实例,如果失败则通过 onConfigureFailed 返回错误信息

//当相机设备完成自身配置时调用此方法,会话可以开始处理捕获请求。
//如果有捕获请求已经与会话一起排队,一旦调用此回调,它们将开始处理,并且会话将在调用此回调后立即调用 onActive。
//如果没有提交捕获请求,则会话将在此回调之后立即调用 onReady。
//如果相机设备配置失败,则将调用 onConfigureFailed 而不是此回调。
public abstract void onConfigured(CameraCaptureSession session)
//如果无法按请求配置会话,则调用此方法
public abstract void onConfigureFailed(CameraCaptureSession session)
//每次会话没有更多的捕获请求要处理时,都会调用该方法
public void onReady(CameraCaptureSession session)
//当会话开始主动处理捕获请求时调用此方法
public void onActive(CameraCaptureSession session)
//当相机设备的输入捕获队列变空并准备接受下一个请求时调用此方法
public void onCaptureQueueEmpty(CameraCaptureSession session)
//会话关闭时调用此方法
public void onClosed(CameraCaptureSession session)
//当输出 Surface 的缓冲区预分配完成时调用此方法
public void onSurfacePrepared(CameraCaptureSession session, Surface surface)

CameraCaptureSession.CaptureCallback

该接口类定义了一系列的回调方法,用于返回来自Camera Framework 的数据和事件,其中 onCaptureStarted 方法在下发图像需求之后立即被调用,告知 App 此次图像需求已经受到,onCaptureProgressed 方法在产生 partial meta data 的时候回调,onCaptureCompleted 方法在图像采集完成,上传 meta data 数据时被调用

//This method is called when the camera device has started capturing the output image for the request, at the beginning of image exposure, or when the camera device has started processing an input image for a reprocess request
public void onCaptureStarted(CameraCaptureSession session,CaptureRequest request, long timestamp, long frameNumber)
​
//This method is called when some results from an image capture are available.
public void onCapturePartial(CameraCaptureSession session, CaptureRequest request, CaptureResult result)
​
//This method is called when an image capture makes partial forward progress; some (but not all) results from an image capture are available.
public void onCaptureProgressed(CameraCaptureSession session, CaptureRequest request, CaptureResult partialResult)
​
//This method is called when an image capture has fully completed and all the result metadata is available.
public void onCaptureCompleted(CameraCaptureSession session, CaptureRequest request, TotalCaptureResult result)
​
//This method is called instead of onCaptureCompleted when the camera device failed to produce a CaptureResult for the request.
public void onCaptureFailed(CameraCaptureSession session, CaptureRequest, CaptureFailure failure)
​
//This method is called independently of the others in CaptureCallback, when a capture sequence finishes and all CaptureResult or CaptureFailure for it have been returned via this listener.
public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber)
​
//This method is called independently of the others in CaptureCallback, when a capture sequence aborts before any CaptureResult or CaptureFailure for it have been returned via this listener.
public void onCaptureSequenceAborted(CameraCaptureSession session, int sequenceId)
​
//This method is called if a single buffer for a capture could not be sent to its destination surface.
public void onCaptureBufferLost(CameraCaptureSession session, CaptureRequest, Surface target, long frameNumber)

CaptureRequest

该类用于表示一次图像请求,在需要进行预览或者拍照时,都需要创建一个 CaptureRequest,并且将针对图片的一系列如曝光/对焦设置参数都加入到该 Request 中,通过 CameraCaptureSession 下发到相机系统中

TotalCaptureResult

每当通过 CameraDevice 完成了一次 CaptureRequest 之后会生成一个 TotalCaptureResult 对象,该对象包含了此次抓取动作所产生的所有信息,其中包括关于硬件模块(Sensor/lens/flash)的配置信息以及相机设备的状态信息等

CaptureResult

该类代表了某次抓取动作最终生成的图像信息,其中包括了此次关于硬件软件的配置信息以及输出的图像数据,以及显示了当前 Camera 设备的状态的元数据(meta data),该类并不保证拥有所有的图像信息

Framework

CameraManager

实现主要在 CamraManager.java 中,通过 CameraManager 查询、获取以及打开一个 Camera 设备。在该类中还实现了内部类 CameraManagerGlobal,该类继承于 ICameraServiceListener.Stub,在打开相机设备的时候,在内部会获取到 ICameraService 远程代理,并且调用 ICameraService 的 addListener 方法将自己注册到 Camera Service 中,一旦 Camera Service 状态有所变更便会通过其实现的回调方法通知到 Camera Manager服务,另外,该类还通过调用 ICameraService.connectDeivce() 方法获取到 Camera Service 中的 CamraDevice 远程代理,并且将该代理传入 CameraDeviceImpl 中,进而与 Camra Service 建立了连接

CameraDeviceImpl

该类继承并实现了 CameraDevice 接口,代表了一个相机设备,可以完成 CameraCaptureSession 的创建以及 CaptureRequest 创建等工作,内部定义了 CameraDeivceCallbacks 类(该类继承于 ICameraDeviceCallbacks.Stub,对应于 Camera Service中的 ICameraDeviceCallbacks 接口),用于接收来自Camra Service 中的 Camera Device的状态回调,并且内部维护着一个 Camera Service 的远程 ICameraDevice 代理,进而可以下发图像请求到 Camera Service 中。

CameraCaptureSessionImpl

该类继承并实现了 CameraCaptureSession 接口,每一个相机设备在一个时间段中,只能创建并存在一个 CameraCaptureSession,其中该类包含了两种 Session,一种是普通的,适用于一般情况下的会话操作,另一种是用于 Reprocess 流程的会话操作,该流程主要用于对于现有的图像数据进行再处理的操作。该类维护着来自实例化时传入的 Surface 列表,这些 Surface 正是包含了每一个图像请求的数据缓冲区

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值