diff --git a/app/src/cli.c b/app/src/cli.c index 2b353fab..05de1f68 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -2205,12 +2205,6 @@ parse_args_with_getopt(struct scrcpy_cli_args *args, int argc, char *argv[], return false; } - if (!opts->camera_id) { - LOGE("Camera id must be specified by --camera-id=ID " - "(list the available ids with --list-cameras)"); - return false; - } - if (!opts->camera_size) { LOGE("Camera size must be specified by --camera-size=WIDTHxHEIGHT"); return false; diff --git a/server/src/main/java/com/genymobile/scrcpy/CameraCapture.java b/server/src/main/java/com/genymobile/scrcpy/CameraCapture.java index d829822a..c82ef0e3 100644 --- a/server/src/main/java/com/genymobile/scrcpy/CameraCapture.java +++ b/server/src/main/java/com/genymobile/scrcpy/CameraCapture.java @@ -7,6 +7,7 @@ import android.annotation.TargetApi; import android.hardware.camera2.CameraAccessException; import android.hardware.camera2.CameraCaptureSession; import android.hardware.camera2.CameraDevice; +import android.hardware.camera2.CameraManager; import android.hardware.camera2.CaptureFailure; import android.hardware.camera2.CaptureRequest; import android.hardware.camera2.params.OutputConfiguration; @@ -49,12 +50,30 @@ public class CameraCapture extends SurfaceCapture { cameraExecutor = new HandlerExecutor(cameraHandler); try { - cameraDevice = openCamera(explicitCameraId); + String cameraId = selectCamera(explicitCameraId); + if (cameraId == null) { + throw new IOException("No matching camera found"); + } + + Ln.i("Using camera '" + cameraId + "'"); + cameraDevice = openCamera(cameraId); } catch (CameraAccessException | InterruptedException e) { throw new IOException(e); } } + private String selectCamera(String explicitCameraId) throws CameraAccessException { + if (explicitCameraId != null) { + return explicitCameraId; + } + + CameraManager cameraManager = ServiceManager.getCameraManager(); + + String[] cameraIds = cameraManager.getCameraIdList(); + // Use the first one + return cameraIds.length > 0 ? cameraIds[0] : null; + } + @Override public void start(Surface surface) throws IOException { try {