Chromium Code Reviews| Index: webrtc/api/android/java/src/org/webrtc/CameraCapturer.java |
| diff --git a/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java b/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java |
| index 7e7d2362bd9b640f18964b6ab1420e7cf0b3095f..c48c8b6115b3537b24bf93df5f20c6b9fdd1fd84 100644 |
| --- a/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java |
| +++ b/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java |
| @@ -12,6 +12,7 @@ package org.webrtc; |
| import android.content.Context; |
| import android.os.Handler; |
| +import android.os.Looper; |
| import java.util.Arrays; |
| @@ -26,16 +27,18 @@ public abstract class CameraCapturer implements CameraVideoCapturer { |
| private static final String TAG = "CameraCapturer"; |
| private final static int MAX_OPEN_CAMERA_ATTEMPTS = 3; |
| private final static int OPEN_CAMERA_DELAY_MS = 500; |
| + private final static int OPEN_CAMERA_TIMEOUT = 10000; |
| private final CameraEnumerator cameraEnumerator; |
| private final CameraEventsHandler eventsHandler; |
| + private final Handler uiThreadHandler; |
| private final CameraSession.CreateSessionCallback createSessionCallback = |
| new CameraSession.CreateSessionCallback() { |
| @Override |
| public void onDone(CameraSession session) { |
| Logging.d(TAG, "Create session done"); |
| - |
| + uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable); |
| synchronized (stateLock) { |
| sessionOpening = false; |
| currentSession = session; |
| @@ -57,6 +60,7 @@ public abstract class CameraCapturer implements CameraVideoCapturer { |
| @Override |
| public void onFailure(String error) { |
| + uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable); |
| synchronized (stateLock) { |
| openAttemptsRemaining--; |
| @@ -83,6 +87,13 @@ public abstract class CameraCapturer implements CameraVideoCapturer { |
| } |
| }; |
| + private final Runnable openCameraTimeoutRunnable = new Runnable() { |
| + @Override |
| + public void run() { |
| + eventsHandler.onCameraError("Camera failed to start within timeout."); |
| + } |
| + }; |
| + |
| // Initialized on initialize |
| // ------------------------- |
| private Handler cameraThreadHandler; |
| @@ -121,6 +132,7 @@ public abstract class CameraCapturer implements CameraVideoCapturer { |
| this.eventsHandler = eventsHandler; |
| this.cameraEnumerator = cameraEnumerator; |
| this.cameraName = cameraName; |
| + uiThreadHandler = new Handler(Looper.getMainLooper()); |
| final String[] deviceNames = cameraEnumerator.getDeviceNames(); |
| @@ -164,6 +176,7 @@ public abstract class CameraCapturer implements CameraVideoCapturer { |
| } |
| private void createSessionInternal(int delayMs) { |
| + uiThreadHandler.postDelayed(openCameraTimeoutRunnable, delayMs + OPEN_CAMERA_TIMEOUT); |
|
magjed_webrtc
2016/08/18 13:46:36
Maybe post it inside the runnable below together w
sakal
2016/08/18 13:48:17
That would break the purpose of this CL. If the ca
magjed_webrtc
2016/08/18 14:19:42
Ah, right :)
|
| cameraThreadHandler.postDelayed(new Runnable() { |
| @Override |
| public void run() { |