我想根据API将一个应用程序从Camera1扩展到Camera2。该应用程序的一个核心机制是以每秒约20张的速度拍摄预览图片。使用Camera1时,我创建了一个SurfaceView,向其持有者添加回调函数,并在表面创建后通过周期性setOneShotPreviewCallbacks访问预览图片。那非常容易和可靠。
现在,当研究Camera2时,我“从末尾”开始,设法将YUV420_888转换为位图(请参见YUV420_888 to Bitmap Conversion)。然而,我现在遇到了“捕获技术”的问题。从Google示例中可以看出,您需要使用CameraDevice.TEMPLATE_PREVIEW设置“setRepeating”CaptureRequest来显示预览,例如在surface视图上。这很好。但是,为了拍摄实际图片,我需要使用(这次)builder.addTarget(imageReader.getSurface())进行另一个捕获请求。也就是说,数据将在imageReader的onImageAvailable方法中可用。
问题是:捕获请求的创建是相当耗费时间的操作,在我的设备上大约需要200毫秒。因此,使用捕获请求(无论是STILL_CAPTUR还是PREVIEW模板)都不可能是每秒捕获20张图像的可行方法,这正是我所需的。我在SO上找到的建议主要基于(教育上中等有效的)Google示例,我并不真正理解...
我觉得解决方案必须是向ImageReader提供连续的预览图片流,然后可以以给定的频率从那里获取。请问有人能够指导如何实现吗?非常感谢。
现在,当研究Camera2时,我“从末尾”开始,设法将YUV420_888转换为位图(请参见YUV420_888 to Bitmap Conversion)。然而,我现在遇到了“捕获技术”的问题。从Google示例中可以看出,您需要使用CameraDevice.TEMPLATE_PREVIEW设置“setRepeating”CaptureRequest来显示预览,例如在surface视图上。这很好。但是,为了拍摄实际图片,我需要使用(这次)builder.addTarget(imageReader.getSurface())进行另一个捕获请求。也就是说,数据将在imageReader的onImageAvailable方法中可用。
问题是:捕获请求的创建是相当耗费时间的操作,在我的设备上大约需要200毫秒。因此,使用捕获请求(无论是STILL_CAPTUR还是PREVIEW模板)都不可能是每秒捕获20张图像的可行方法,这正是我所需的。我在SO上找到的建议主要基于(教育上中等有效的)Google示例,我并不真正理解...
我觉得解决方案必须是向ImageReader提供连续的预览图片流,然后可以以给定的频率从那里获取。请问有人能够指导如何实现吗?非常感谢。