Handle camera disconnection

camera.14
Romain Vimont 7 months ago
parent 88f4a035ab
commit 3638e8ea17

@ -22,6 +22,7 @@ import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicBoolean;
public class CameraCapture extends SurfaceCapture {
@ -33,6 +34,8 @@ public class CameraCapture extends SurfaceCapture {
private CameraDevice cameraDevice;
private Executor cameraExecutor;
private final AtomicBoolean disconnected = new AtomicBoolean();
public CameraCapture(String cameraId, Size explicitSize) {
this.cameraId = cameraId;
this.explicitSize = explicitSize;
@ -101,7 +104,8 @@ public class CameraCapture extends SurfaceCapture {
@Override
public void onDisconnected(CameraDevice camera) {
Ln.w("Camera disconnected");
// TODO
disconnected.set(true);
requestReset();
}
@Override
@ -186,4 +190,9 @@ public class CameraCapture extends SurfaceCapture {
throw (CameraAccessException) e.getCause();
}
}
@Override
public boolean isClosed() {
return disconnected.get();
}
}

@ -59,4 +59,13 @@ public abstract class SurfaceCapture {
* @param size Maximum size
*/
public abstract boolean setMaxSize(int size);
/**
* Indicate if the capture has been closed internally.
*
* @return {@code true} is the capture is closed, {@code false} otherwise.
*/
public boolean isClosed() {
return false;
}
}

@ -181,6 +181,11 @@ public class SurfaceEncoder implements AsyncProcessor {
}
}
if (capture.isClosed()) {
// The capture might have been closed internally (for example if the camera is disconnected)
alive = false;
}
return !eof && alive;
}

Loading…
Cancel
Save