Is there a way to pass SurfaceView as the SurfaceProvider for a Preview in Android?
I have two Fragments, each one has a PreviewView to display the Camera feed of the following Cameras on my Android device:
DeviceFragment-> Displays built-in camera feedUsbCameraFragment-> Should display the attached USB device camera feed
PreviewView on Fragment #1 works just fine as I think it's meant to display the Device camera right away.
But PreviewView on Fragment #2, no matter what I do, won't display the USB Camera feed. It only displays the built-in Device camera feed.
So, in order to be sure my USB Camera feed is working, I setup a SurfaceView on that Fragment et voilà, my USB feed is displayed correctly on that.
Is there a way to change the default behavior of PreviewView so it displays my USB camera instead of the Device's?
My final goal is to process the camera feed via the CameraProvider.bindToLifecycle() method. To achieve this, I created a Preview object and set PreviewView.getSurfaceProvider() as its surfaceProvider. But I can't achieve the same using a SurfaceView as it has no methods that return a surfaceProvider.
Here's a snippet of the method I created on my UsbCameraFragment that could help understanding:
private void bindCamera(ProcessCameraProvider cameraProvider) {
ImageAnalysis imageAnalysis = imageAnalysisService.bindImageAnalysis(surfaceView); // I don't think it's relevant right now. Can share later if needed.
Preview preview = new Preview.Builder().build();
preview.setSurfaceProvider(previewView.getSurfaceProvider()); // Here's where I would like to use my SurfaceView OR parse it to PreviewView
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK).build();
cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageAnalysis);
}
NOTES:
- Commenting out
preview.setSurfaceProvider(previewView.getSurfaceProvider());makes mySurfaceViewbe displayed and it doesn't get overlapped by thePreviewView - Keeping it as it, the
SurfaceViewis displayed for a brief second and then it gets overlapped by the Device Camera's image (rendered by thePreviewView) - I tried adding a filter to the
CameraSelectorobject, but then I have another problem: The Usb Camera is not listed among all available cameras.