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

Unified Diff: webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java

Issue 1999053002: Reland of Android: Make base interface for camera1 and camera2 (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 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 | « webrtc/api/java/android/org/webrtc/CameraVideoCapturer.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 78d042df50c850bf468739907953deee2bb6eab0..6352bf799f7be0a74364197a6c1756091dc736e6 100644
--- a/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
+++ b/webrtc/api/java/android/org/webrtc/VideoCapturerAndroid.java
@@ -38,14 +38,13 @@
// arbitrary Java threads. All public entry points are thread safe, and delegate the work to the
// camera thread. The internal *OnCameraThread() methods must check |camera| for null to check if
// the camera has been stopped.
+// TODO(magjed): This class name is now confusing - rename to Camera1VideoCapturer.
@SuppressWarnings("deprecation")
public class VideoCapturerAndroid implements
- VideoCapturer,
+ CameraVideoCapturer,
android.hardware.Camera.PreviewCallback,
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 = 4000;
private static final int CAMERA_STOP_TIMEOUT_MS = 7000;
private boolean isDisposed = false;
@@ -60,7 +59,7 @@
private final Object cameraIdLock = new Object();
private int id;
private android.hardware.Camera.CameraInfo info;
- private final CameraStatistics cameraStatistics;
+ private CameraStatistics cameraStatistics;
// Remember the requested format in case we want to switch cameras.
private int requestedWidth;
private int requestedHeight;
@@ -104,84 +103,6 @@
}
};
- // 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();
- int cameraFps = (cameraFramesCount * 1000 + CAMERA_OBSERVER_PERIOD_MS / 2)
- / CAMERA_OBSERVER_PERIOD_MS;
-
- Logging.d(TAG, "Camera fps: " + cameraFps +".");
- if (cameraFramesCount == 0) {
- ++freezePeriodCount;
- if (CAMERA_OBSERVER_PERIOD_MS * freezePeriodCount >= CAMERA_FREEZE_REPORT_TIMOUT_MS
- && eventsHandler != null) {
- Logging.e(TAG, "Camera freezed.");
- if (surfaceHelper.isTextureInUse()) {
- // This can only happen if we are capturing to textures.
- eventsHandler.onCameraFreezed("Camera failure. Client must return video buffers.");
- } else {
- eventsHandler.onCameraFreezed("Camera failure.");
- }
- return;
- }
- } else {
- freezePeriodCount = 0;
- }
- maybePostDelayedOnCameraThread(CAMERA_OBSERVER_PERIOD_MS, this);
- }
- };
-
- private static class CameraStatistics {
- private int frameCount = 0;
- private final ThreadUtils.ThreadChecker threadChecker = new ThreadUtils.ThreadChecker();
-
- CameraStatistics() {
- threadChecker.detachThread();
- }
-
- public void addFrame() {
- threadChecker.checkIsOnValidThread();
- ++frameCount;
- }
-
- public int getAndResetFrameCount() {
- threadChecker.checkIsOnValidThread();
- int count = frameCount;
- frameCount = 0;
- return count;
- }
- }
-
- public static interface CameraEventsHandler {
- // Camera error handler - invoked when camera can not be opened
- // or any camera exception happens on camera thread.
- void onCameraError(String errorDescription);
-
- // Invoked when camera stops receiving frames
- void onCameraFreezed(String errorDescription);
-
- // Callback invoked when camera is opening.
- void onCameraOpening(int cameraId);
-
- // Callback invoked when first camera frame is available after camera is opened.
- void onFirstFrameAvailable();
-
- // Callback invoked when camera closed.
- void onCameraClosed();
- }
-
- // Camera switch handler - one of these functions are invoked with the result of switchCamera().
- // The callback may be called on an arbitrary thread.
- public interface CameraSwitchHandler {
- // Invoked on success. |isFrontCamera| is true if the new camera is front facing.
- void onCameraSwitchDone(boolean isFrontCamera);
- // Invoked on failure, e.g. camera is stopped or only one camera available.
- void onCameraSwitchError(String errorDescription);
- }
-
public static VideoCapturerAndroid create(String name,
CameraEventsHandler eventsHandler) {
return VideoCapturerAndroid.create(name, eventsHandler, false /* captureToTexture */);
@@ -216,6 +137,7 @@
// Switch camera to the next valid camera id. This can only be called while
// the camera is running.
+ @Override
public void switchCamera(final CameraSwitchHandler switchEventsHandler) {
if (android.hardware.Camera.getNumberOfCameras() < 2) {
if (switchEventsHandler != null) {
@@ -299,7 +221,6 @@
this.id = cameraId;
this.eventsHandler = eventsHandler;
isCapturingToTexture = captureToTexture;
- cameraStatistics = new CameraStatistics();
Logging.d(TAG, "VideoCapturerAndroid isCapturingToTexture : " + isCapturingToTexture);
}
@@ -460,7 +381,7 @@
}
// Start camera observer.
- maybePostDelayedOnCameraThread(CAMERA_OBSERVER_PERIOD_MS, cameraObserver);
+ cameraStatistics = new CameraStatistics(surfaceHelper, eventsHandler);
return;
} catch (RuntimeException e) {
error = e;
@@ -613,8 +534,10 @@
if (surfaceHelper != null) {
surfaceHelper.stopListening();
}
- cameraThreadHandler.removeCallbacks(cameraObserver);
- cameraStatistics.getAndResetFrameCount();
+ if (cameraStatistics != null) {
+ cameraStatistics.release();
+ cameraStatistics = null;
+ }
Logging.d(TAG, "Stop preview.");
if (camera != null) {
camera.stopPreview();
« no previous file with comments | « webrtc/api/java/android/org/webrtc/CameraVideoCapturer.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698