Index: webrtc/sdk/android/api/org/webrtc/Camera1Session.java |
diff --git a/webrtc/sdk/android/api/org/webrtc/Camera1Session.java b/webrtc/sdk/android/api/org/webrtc/Camera1Session.java |
index 8f2988642f9dab4a772511c7a11cd9a824eff76c..af67658a7c4cacc73ffa9ea74c9045e9a0820e1a 100644 |
--- a/webrtc/sdk/android/api/org/webrtc/Camera1Session.java |
+++ b/webrtc/sdk/android/api/org/webrtc/Camera1Session.java |
@@ -177,7 +177,6 @@ public class Camera1Session implements CameraSession { |
checkIsOnCameraThread(); |
if (state != SessionState.STOPPED) { |
final long stopStartTime = System.nanoTime(); |
- state = SessionState.STOPPED; |
stopInternal(); |
final int stopTimeMs = (int) TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - stopStartTime); |
camera1StopTimeMsHistogram.addSample(stopTimeMs); |
@@ -200,7 +199,6 @@ public class Camera1Session implements CameraSession { |
errorMessage = "Camera error: " + error; |
} |
Logging.e(TAG, errorMessage); |
- state = SessionState.STOPPED; |
stopInternal(); |
if (error == android.hardware.Camera.CAMERA_ERROR_EVICTED) { |
events.onCameraDisconnected(Camera1Session.this); |
@@ -218,7 +216,6 @@ public class Camera1Session implements CameraSession { |
try { |
camera.startPreview(); |
} catch (RuntimeException e) { |
- state = SessionState.STOPPED; |
stopInternal(); |
events.onCameraError(this, e.getMessage()); |
} |
@@ -227,16 +224,19 @@ public class Camera1Session implements CameraSession { |
private void stopInternal() { |
Logging.d(TAG, "Stop internal"); |
checkIsOnCameraThread(); |
+ if (state == SessionState.STOPPED) { |
+ Logging.d(TAG, "Camera is already stopped"); |
+ return; |
+ } |
+ state = SessionState.STOPPED; |
surfaceTextureHelper.stopListening(); |
- |
// Note: stopPreview or other driver code might deadlock. Deadlock in |
// android.hardware.Camera._stopPreview(Native Method) has been observed on |
// Nexus 5 (hammerhead), OS version LMY48I. |
camera.stopPreview(); |
camera.release(); |
events.onCameraClosed(this); |
- |
Logging.d(TAG, "Stop done"); |
} |