| Index: webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
 | 
| diff --git a/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java b/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
 | 
| index b8ab1a8c5ea6223ce46aebf7dae8a43e8fd21241..93e623e4bd7dd35eaab39ddb6166db38184106e1 100644
 | 
| --- a/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
 | 
| +++ b/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
 | 
| @@ -467,10 +467,8 @@ public class VideoCapturerAndroid implements
 | 
|        error = e;
 | 
|      }
 | 
|      Logging.e(TAG, "startCapture failed", error);
 | 
| -    if (camera != null) {
 | 
| -      // Make sure the camera is released.
 | 
| -      stopCaptureOnCameraThread();
 | 
| -    }
 | 
| +    // Make sure the camera is released.
 | 
| +    stopCaptureOnCameraThread();
 | 
|      synchronized (handlerLock) {
 | 
|        // Remove all pending Runnables posted from |this|.
 | 
|        cameraThreadHandler.removeCallbacksAndMessages(this /* token */);
 | 
| @@ -607,20 +605,28 @@ public class VideoCapturerAndroid implements
 | 
|    private void stopCaptureOnCameraThread() {
 | 
|      checkIsOnCameraThread();
 | 
|      Logging.d(TAG, "stopCaptureOnCameraThread");
 | 
| +    // Note that the camera might still not be started here if startCaptureOnCameraThread failed
 | 
| +    // and we posted a retry.
 | 
|  
 | 
|      // Make sure onTextureFrameAvailable() is not called anymore.
 | 
| -    surfaceHelper.stopListening();
 | 
| +    if (surfaceHelper != null) {
 | 
| +      surfaceHelper.stopListening();
 | 
| +    }
 | 
|      cameraThreadHandler.removeCallbacks(cameraObserver);
 | 
|      cameraStatistics.getAndResetFrameCount();
 | 
|      Logging.d(TAG, "Stop preview.");
 | 
| -    camera.stopPreview();
 | 
| -    camera.setPreviewCallbackWithBuffer(null);
 | 
| +    if (camera != null) {
 | 
| +      camera.stopPreview();
 | 
| +      camera.setPreviewCallbackWithBuffer(null);
 | 
| +    }
 | 
|      queuedBuffers.clear();
 | 
|      captureFormat = null;
 | 
|  
 | 
|      Logging.d(TAG, "Release camera.");
 | 
| -    camera.release();
 | 
| -    camera = null;
 | 
| +    if (camera != null) {
 | 
| +      camera.release();
 | 
| +      camera = null;
 | 
| +    }
 | 
|      if (eventsHandler != null) {
 | 
|        eventsHandler.onCameraClosed();
 | 
|      }
 | 
| 
 |