}
override fun onDisconnected(camera: CameraDevice) {
}
override fun onError(camera: CameraDevice, error: Int) {
}
因为应用层和相机内核层已经完全解耦,所以两者想要进行数据传递,必须要建立桥梁,那么通过ImageReader就可以完成,可以通过传入一些参数:预览尺寸、图像格式等,设置setOnImageAvailableListener,有数据发送过来之后,通过onImageAvailable获取到数据显示即可。
![](https://img-blog.csdnimg.cn/23dcbff4328941d7ad71719ba1289afe.png)
然后,调用CameraManager的openCamera方法,才是真正打开摄像头,那么成功还是失败呢?就需要通过 CameraDevice.StateCallback的回调来判断。
**第四步:建立会话,创建预览请求**
override fun onOpened(camera: CameraDevice) {
this.cameraDevice = camera
//建立会话
createPreviewSession()
}
override fun onDisconnected(camera: CameraDevice) {
cameraDevice?.close()
cameraDevice = null
}
override fun onError(camera: CameraDevice, error: Int) {
cameraDevice?.close()
cameraDevice = null
}
当打开Camera之后,如何判断是否成功开启摄像头呢?就是通过onOpened这个回调来判断,当成功开启摄像头之后,就需要与相机内核建立会话,发起预览请求createCaptureRequest。
private fun createPreviewSession() {
//创建Surface,所有的画面渲染都是由Surface处理
val texture = textureView?.surfaceTexture
texture?.setDefaultBufferSize(previewWidth, previewHeight)
val surface = Surface(texture)