我正在调查新的CameraX API,以了解从我们目前的Camera2系统转换过来的可行性。
在我们的Camera2系统中,我们使用OpenGL表面来捕捉PreviewCaptureSession中的帧,我们在大多数设备上都达到了一致的30fps的图像处理速度,有些设备在启用自动曝光设置后可以达到60fps。
CameraX没有提供任何接近这个速度的东西,我不知道是不是我在设置中遗漏了什么。
我已经为CameraX和ImageAnalysis设置了测试实例,但我得到的是锁定帧率的图像数量。
例如,我可以将分辨率设置为低至320x240,高至1920x960,都会以16fps的速度出来(似乎有上限)。
当我添加一个预览用例来运行它,并设置启用Torch(true),ImageAnalysis用例将突然开始得到更多的像20fps,它偶尔会达到30左右的峰值。
显然,预览的用例改变了相机的一些自动曝光状态?
这是我目前设置的一个片段......
private fun startCameraAnalysis() {
val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
var resolution = Size(metrics.widthPixels, metrics.heightPixels)
resolution = Size(640, 480) //set to fixed size for testing
val aspectRatio = Rational(resolution.width, resolution.height)
val rotation = viewFinder.display.rotation
// Setup image analysis pipeline
val analyzerConfig = ImageAnalysisConfig.Builder().apply {
val analyzerThread = HandlerThread(
"LuminosityAnalysis").apply { start() }
setCallbackHandler(Handler(analyzerThread.looper))
setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
setTargetRotation(rotation)
setTargetAspectRatio(aspectRatio)
setTargetResolution(resolution)
}.build()
// Setup preview pipeline
val previewConfig = PreviewConfig.Builder().apply {
setTargetRotation(rotation)
setTargetAspectRatio(aspectRatio)
setTargetResolution(resolution)
}.build()
// Build Preview useCase
val preview = Preview(previewConfig)
preview.enableTorch(true)
// Build Analysis useCase
val analyzer = ImageAnalysis(analyzerConfig)
analyzer.analyzer = LuminosityAnalyzer()
CameraX.bindToLifecycle(this, preview, analyzer )
preview.enableTorch(true)
有没有办法改变CameraX中围绕ImageAnalysis的相机设置,以获得更高的帧率?
事实上,是否有办法改变诸如传感器持续时间、ISO、曝光之类的东西?