diff --git a/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java b/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java index 3c98a6a514c6..916fb609e0d8 100644 --- a/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java +++ b/media/webrtc/trunk/webrtc/modules/video_capture/android/java/src/org/webrtc/videoengine/VideoCaptureAndroid.java @@ -248,11 +248,13 @@ public class VideoCaptureAndroid implements PreviewCallback, Callback { error = e; } Log.e(TAG, "startCapture failed", error); - if (camera != null) { - Exchanger resultDropper = new Exchanger(); - stopCaptureOnCameraThread(resultDropper); - exchange(resultDropper, false); - } + // For some devices, camera.setParameters(parameters) would throw + // an exception when a specific resolution is set. Originally, + // stopCaptureOnCameraThread() is called here to clear up the state. + // However, stopCaptureOnCameraThread(), which uses Exchanger to + // synchronize and swap data with MediaManager thread, is supposed to be + // called by MediaManager thread like we did at stopCapture(). Calling + // this function directly in CameraThread will cause deadlock. exchange(result, false); return; }