How to determine the camera preview resolution that CameraX preview has created

2,361 views
Skip to first unread message

Trenton Duke

unread,
Feb 14, 2020, 1:58:46 PM2/14/20
to Android CameraX Discussion Group
I have a full screen setup below. I set target aspect ratio to 16x9 on both Preview.Builder and ImageAnalysis.builder. I can see the resolution for the ImageAnalysis image on the onImageAnalyzed(). I don't know how to see what the image size is for what the user sees.

Set up is below:

private fun bindCameraUseCases() {
        val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
        val screenSize = Size(metrics.widthPixels, metrics.heightPixels)

        val preview = Preview.Builder().apply {
            setTargetRotation(viewFinder.display.rotation)
            .setTargetAspectRatio(AspectRatio.RATIO_16_9)
        }.build()

        preview.setSurfaceProvider(viewFinder.previewSurfaceProvider)

        val imageAnalysis = ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .setTargetAspectRatio(AspectRatio.RATIO_16_9)
                .build()

        imageAnalysis.setAnalyzer(executor,
                ImageAnalysis.Analyzer {
                    onImageAnalyzed(it, it.imageInfo.rotationDegrees)

                    //Required to call close() as last step
                    it.close()
                })

        val cameraSelector = CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build()

        cameraProviderFuture.addListener(Runnable {
            val cameraProvider = cameraProviderFuture.get()

            cameraProvider.bindToLifecycle(
                    requireActivity(),
                    cameraSelector,
                    preview,
                    imageAnalysis
            )
        }, executor)
    }

Trenton Duke

unread,
Feb 14, 2020, 9:43:07 PM2/14/20
to Android CameraX Discussion Group
I had to update the following:

cameraProviderFuture.addListener(Runnable {
val cameraProvider = cameraProviderFuture.get()

    val camera = cameraProvider.bindToLifecycle(

requireActivity(),
cameraSelector,
preview,
imageAnalysis
)

    val id = Camera2CameraInfo.extractCameraId(camera.cameraInfo)

currentResolution = preview.getAttachedSurfaceResolution(id)
}, executor)


I also had to suppress these lints:
@SuppressLint("UnsafeExperimentalUsageError", "RestrictedApi")

There should be a way of doing it without calling RestrictedAPIs. 
Reply all
Reply to author
Forward
0 new messages