| Index: talk/app/webrtc/java/android/org/webrtc/VideoCapturerAndroid.java
|
| diff --git a/talk/app/webrtc/java/android/org/webrtc/VideoCapturerAndroid.java b/talk/app/webrtc/java/android/org/webrtc/VideoCapturerAndroid.java
|
| index 4caefc513d343e7e0f9dbced64cf96befb5e75df..88163ef6c8d2870ee17ac07d7dfea74b4a480b5f 100644
|
| --- a/talk/app/webrtc/java/android/org/webrtc/VideoCapturerAndroid.java
|
| +++ b/talk/app/webrtc/java/android/org/webrtc/VideoCapturerAndroid.java
|
| @@ -72,6 +72,7 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
|
| SurfaceTextureHelper.OnTextureFrameAvailableListener {
|
| private final static String TAG = "VideoCapturerAndroid";
|
| private final static int CAMERA_OBSERVER_PERIOD_MS = 2000;
|
| + private final static int CAMERA_FREEZE_REPORT_TIMOUT_MS = 6000;
|
|
|
| private Camera camera; // Only non-null while capturing.
|
| private HandlerThread cameraThread;
|
| @@ -120,6 +121,7 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
|
|
|
| // Camera observer - monitors camera framerate. Observer is executed on camera thread.
|
| private final Runnable cameraObserver = new Runnable() {
|
| + private int freezePeriodCount;
|
| @Override
|
| public void run() {
|
| int cameraFramesCount = cameraStatistics.getAndResetFrameCount();
|
| @@ -129,13 +131,21 @@ public class VideoCapturerAndroid extends VideoCapturer implements PreviewCallba
|
| Logging.d(TAG, "Camera fps: " + cameraFps +
|
| ". Pending buffers: " + cameraStatistics.pendingFramesTimeStamps());
|
| if (cameraFramesCount == 0) {
|
| - Logging.e(TAG, "Camera freezed.");
|
| - if (eventsHandler != null) {
|
| - eventsHandler.onCameraError("Camera failure.");
|
| + ++freezePeriodCount;
|
| + if (CAMERA_OBSERVER_PERIOD_MS * freezePeriodCount > CAMERA_FREEZE_REPORT_TIMOUT_MS &&
|
| + eventsHandler != null) {
|
| + Logging.e(TAG, "Camera freezed.");
|
| + if (cameraStatistics.pendingFramesCount() > 0) {
|
| + eventsHandler.onCameraError("Camera failure. Client must return video buffers.");
|
| + } else {
|
| + eventsHandler.onCameraError("Camera failure.");
|
| + }
|
| + return;
|
| }
|
| } else {
|
| - cameraThreadHandler.postDelayed(this, CAMERA_OBSERVER_PERIOD_MS);
|
| + freezePeriodCount = 0;
|
| }
|
| + cameraThreadHandler.postDelayed(this, CAMERA_OBSERVER_PERIOD_MS);
|
| }
|
| };
|
|
|
|
|