使用CaptureRequest.Builder的addTag方法,为每个请求添加一个标记,并在处理图像时根据标记区分每个请求的结果。
示例代码:
//创建一组标记 val tag1 = "request_tag_one" val tag2 = "request_tag_two"
//为每个请求添加对应的标记 val request1 = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW) request1.addTarget(mPreviewSurface) request1.setTag(tag1) val request2 = mCameraDevice!!.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE) request2.addTarget(mImageReaderSurface) request2.setTag(tag2)
//发送请求 val session = mCameraDevice.createCaptureSession(listOf(mPreviewSurface, mImageReaderSurface), object : CameraCaptureSession.StateCallback() { override fun onConfigured(session: CameraCaptureSession) { val builder1 = session.device.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW) builder1.addTarget(mPreviewSurface) builder1.setTag(tag1)
val builder2 = session.device.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE)
builder2.addTarget(mImageReaderSurface)
builder2.setTag(tag2)
//联合发送请求
session.setRepeatingRequest(builder1.build(), null, mHandler)
session.capture(builder2.build(), null, mHandler)
}
override fun onConfigureFailed(session: CameraCaptureSession) {}
}, mHandler)
//根据标记处理图像 mImageReader.setOnImageAvailableListener(object : ImageReader.OnImageAvailableListener { override fun onImageAvailable(reader: ImageReader) { val image = reader.acquireLatestImage() ?: return when (image.tag) { tag1 -> { //处理预览帧 //... } tag2 -> { //处理静态图片 //... } } image.close() } }, mHandler)