need to set 16:9 / 4:3 / 1:1 aspect ratio
i use below code to do this
` cameraExecutor = Executors.newSingleThreadExecutor()
imgCaptureExecutor = Executors.newSingleThreadExecutor()
cameraProviderFuture = ProcessCameraProvider.getInstance(this)
cameraProviderFuture.addListener({
val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
val preview = Preview.Builder().build()
.also {
it.setSurfaceProvider(binding.cameraViewer.surfaceProvider)
}
imageCapture = ImageCapture.Builder().build()
val qualitySelector = QualitySelector.fromOrderedList(
listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD),
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
val recorder = Recorder.Builder()
.setExecutor(cameraExecutor).setQualitySelector(qualitySelector)
.build()
videoCapture = VideoCapture.withOutput(recorder)
val viewPort = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
ViewPort.Builder(
Rational(9, 16), display?.rotation ?: Surface.ROTATION_0
).build()
} else {
ViewPort.Builder(
Rational(9, 16), Surface.ROTATION_0
).build()
}
val imageAnalysis = ImageAnalysis.Builder()
.setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
.build()
try {
cameraProvider.unbindAll()
val useCaseGroup = UseCaseGroup.Builder()
.addUseCase(preview)
.addUseCase(imageCapture!!)
.addUseCase(videoCapture!!)
.addUseCase(imageAnalysis)
.setViewPort(viewPort)
.build()
val camera = cameraProvider.bindToLifecycle(
this, cameraSelector, preview
)
} catch (exc: Exception) {
Log.e(TAG, "Use case binding failed", exc)
}
}, ContextCompat.getMainExecutor(this))
`
With viewport i can do this and it is works well. but not working as expected on high resolution device like Pixel 8 Pro, vivo v30 pro etc.