Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: webrtc/api/android/java/src/org/webrtc/CameraCapturer.java

Issue 2257123002: Add a timeout for starting the camera on CameraCapturer. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698