1

I am trying to use CameraX for image capture and capture preview. I found captured image and preview image different for google pixel 5a, but for Samsung A72 device captured image and preview image are same. For pixel phone captured image is left aligned. For both Image analysis and PreviewView, I've set setTargetAspectRatio(AspectRatio.RATIO_4_3). I have also tried to use ViewPort API to fix this issue. Any help will be appreciated.

Code snipped is attached here.

@SuppressLint({"RestrictedApi", "WrongConstant", "UnsafeOptInUsageError"})
private void startCameraX(ProcessCameraProvider cameraProvider) throws ExecutionException, InterruptedException {
    Preview preview = new Preview.Builder()
            .setTargetAspectRatio(AspectRatio.RATIO_4_3)
            .build();
    preview.setSurfaceProvider(previewView.getSurfaceProvider());

    CameraSelector cameraSelector;
    cameraSelector = new CameraSelector.Builder()
            .requireLensFacing(LENS_FACING)
            .build();

    // Image capture use case
    imageCapture = new ImageCapture.Builder()
            .setJpegQuality(100)
            .setTargetAspectRatio(AspectRatio.RATIO_4_3)
            .setCameraSelector(cameraSelector)
            .build();

    Rational aspectRatio = new Rational(previewView.getWidth(), previewView.getHeight());
    ViewPort viewPort = new ViewPort.Builder(aspectRatio, preview.getTargetRotation()).setScaleType(ViewPort.FIT).build();

    UseCaseGroup useCaseGroup = new UseCaseGroup.Builder()
            .setViewPort(viewPort)
            .addUseCase(preview)
            .addUseCase(imageCapture)
            .build();

    camera = cameraProvider.bindToLifecycle(this, cameraSelector,useCaseGroup);

    // For performing operations that affect all outputs.
    CameraControl cameraControl = camera.getCameraControl();

    cameraControl.setLinearZoom(zoom);
    setCaptureRequestOptionsISOandShutterSpeed();
}

<androidx.camera.view.PreviewView
    android:id="@+id/camera_preview"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1" />
  • "CameraX captured image size and PreviewView size are not the same for some device" -- that is expected. Preview and picture sizes do not have to match. Whether there is a matching pair will vary by hardware. – CommonsWare Sep 27 '22 at 17:03

0 Answers0