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

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

Issue 2547483003: Move /webrtc/api/android files to /webrtc/sdk/android (Closed)
Patch Set: Move to api folder under Android instead of src Created 4 years 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
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
deleted file mode 100644
index 86f5f217c1cd3dd19a8ada9bfea469e0c62d06de..0000000000000000000000000000000000000000
--- a/webrtc/api/android/java/src/org/webrtc/CameraCapturer.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * Copyright 2016 The WebRTC project authors. All Rights Reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-package org.webrtc;
-
-import android.content.Context;
-import android.os.Handler;
-import android.os.Looper;
-
-import java.util.Arrays;
-
-@SuppressWarnings("deprecation")
-public abstract class CameraCapturer implements CameraVideoCapturer {
- enum SwitchState {
- IDLE, // No switch requested.
- PENDING, // Waiting for previous capture session to open.
- IN_PROGRESS, // Waiting for new switched capture session to start.
- }
-
- 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) {
- checkIsOnCameraThread();
- Logging.d(TAG, "Create session done");
- uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable);
- synchronized (stateLock) {
- capturerObserver.onCapturerStarted(true /* success */);
- sessionOpening = false;
- currentSession = session;
- cameraStatistics = new CameraStatistics(surfaceHelper, eventsHandler);
- firstFrameObserved = false;
- stateLock.notifyAll();
-
- if (switchState == SwitchState.IN_PROGRESS) {
- if (switchEventsHandler != null) {
- switchEventsHandler.onCameraSwitchDone(cameraEnumerator.isFrontFacing(cameraName));
- switchEventsHandler = null;
- }
- switchState = SwitchState.IDLE;
- } else if (switchState == SwitchState.PENDING) {
- switchState = SwitchState.IDLE;
- switchCameraInternal(switchEventsHandler);
- }
- }
- }
-
- @Override
- public void onFailure(String error) {
- checkIsOnCameraThread();
- uiThreadHandler.removeCallbacks(openCameraTimeoutRunnable);
- synchronized (stateLock) {
- capturerObserver.onCapturerStarted(false /* success */);
- openAttemptsRemaining--;
-
- if (openAttemptsRemaining <= 0) {
- Logging.w(TAG, "Opening camera failed, passing: " + error);
- sessionOpening = false;
- stateLock.notifyAll();
-
- if (switchState != SwitchState.IDLE) {
- if (switchEventsHandler != null) {
- switchEventsHandler.onCameraSwitchError(error);
- switchEventsHandler = null;
- }
- switchState = SwitchState.IDLE;
- }
-
- eventsHandler.onCameraError(error);
- } else {
- Logging.w(TAG, "Opening camera failed, retry: " + error);
-
- createSessionInternal(OPEN_CAMERA_DELAY_MS);
- }
- }
- }
- };
-
- private final CameraSession.Events cameraSessionEventsHandler = new CameraSession.Events() {
- @Override
- public void onCameraOpening() {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (currentSession != null) {
- Logging.w(TAG, "onCameraOpening while session was open.");
- return;
- }
- eventsHandler.onCameraOpening(cameraName);
- }
- }
-
- @Override
- public void onCameraError(CameraSession session, String error) {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (session != currentSession) {
- Logging.w(TAG, "onCameraError from another session: " + error);
- return;
- }
- eventsHandler.onCameraError(error);
- stopCapture();
- }
- }
-
- @Override
- public void onCameraDisconnected(CameraSession session) {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (session != currentSession) {
- Logging.w(TAG, "onCameraDisconnected from another session.");
- return;
- }
- eventsHandler.onCameraDisconnected();
- stopCapture();
- }
- }
-
- @Override
- public void onCameraClosed(CameraSession session) {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (session != currentSession && currentSession != null) {
- Logging.d(TAG, "onCameraClosed from another session.");
- return;
- }
- eventsHandler.onCameraClosed();
- }
- }
-
- @Override
- public void onByteBufferFrameCaptured(
- CameraSession session, byte[] data, int width, int height, int rotation, long timestamp) {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (session != currentSession) {
- Logging.w(TAG, "onByteBufferFrameCaptured from another session.");
- return;
- }
- if (!firstFrameObserved) {
- eventsHandler.onFirstFrameAvailable();
- firstFrameObserved = true;
- }
- cameraStatistics.addFrame();
- capturerObserver.onByteBufferFrameCaptured(data, width, height, rotation, timestamp);
- }
- }
-
- @Override
- public void onTextureFrameCaptured(CameraSession session, int width, int height,
- int oesTextureId, float[] transformMatrix, int rotation, long timestamp) {
- checkIsOnCameraThread();
- synchronized (stateLock) {
- if (session != currentSession) {
- Logging.w(TAG, "onTextureFrameCaptured from another session.");
- surfaceHelper.returnTextureFrame();
- return;
- }
- if (!firstFrameObserved) {
- eventsHandler.onFirstFrameAvailable();
- firstFrameObserved = true;
- }
- cameraStatistics.addFrame();
- capturerObserver.onTextureFrameCaptured(
- width, height, oesTextureId, transformMatrix, rotation, timestamp);
- }
- }
- };
-
- private final Runnable openCameraTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- eventsHandler.onCameraError("Camera failed to start within timeout.");
- }
- };
-
- // Initialized on initialize
- // -------------------------
- private Handler cameraThreadHandler;
- private Context applicationContext;
- private CapturerObserver capturerObserver;
- private SurfaceTextureHelper surfaceHelper;
-
- private final Object stateLock = new Object();
- private boolean sessionOpening; /* guarded by stateLock */
- private CameraSession currentSession; /* guarded by stateLock */
- private String cameraName; /* guarded by stateLock */
- private int width; /* guarded by stateLock */
- private int height; /* guarded by stateLock */
- private int framerate; /* guarded by stateLock */
- private int openAttemptsRemaining; /* guarded by stateLock */
- private SwitchState switchState = SwitchState.IDLE; /* guarded by stateLock */
- private CameraSwitchHandler switchEventsHandler; /* guarded by stateLock */
- // Valid from onDone call until stopCapture, otherwise null.
- private CameraStatistics cameraStatistics; /* guarded by stateLock */
- private boolean firstFrameObserved; /* guarded by stateLock */
-
- public CameraCapturer(
- String cameraName, CameraEventsHandler eventsHandler, CameraEnumerator cameraEnumerator) {
- if (eventsHandler == null) {
- eventsHandler = new CameraEventsHandler() {
- @Override
- public void onCameraError(String errorDescription) {}
- @Override
- public void onCameraDisconnected() {}
- @Override
- public void onCameraFreezed(String errorDescription) {}
- @Override
- public void onCameraOpening(String cameraName) {}
- @Override
- public void onFirstFrameAvailable() {}
- @Override
- public void onCameraClosed() {}
- };
- }
-
- this.eventsHandler = eventsHandler;
- this.cameraEnumerator = cameraEnumerator;
- this.cameraName = cameraName;
- uiThreadHandler = new Handler(Looper.getMainLooper());
-
- final String[] deviceNames = cameraEnumerator.getDeviceNames();
-
- if (deviceNames.length == 0) {
- throw new RuntimeException("No cameras attached.");
- }
- if (!Arrays.asList(deviceNames).contains(this.cameraName)) {
- throw new IllegalArgumentException(
- "Camera name " + this.cameraName + " does not match any known camera device.");
- }
- }
-
- @Override
- public void initialize(SurfaceTextureHelper surfaceTextureHelper, Context applicationContext,
- CapturerObserver capturerObserver) {
- this.applicationContext = applicationContext;
- this.capturerObserver = capturerObserver;
- this.surfaceHelper = surfaceTextureHelper;
- this.cameraThreadHandler =
- surfaceTextureHelper == null ? null : surfaceTextureHelper.getHandler();
- }
-
- @Override
- public void startCapture(int width, int height, int framerate) {
- Logging.d(TAG, "startCapture: " + width + "x" + height + "@" + framerate);
-
- synchronized (stateLock) {
- if (sessionOpening || currentSession != null) {
- Logging.w(TAG, "Session already open");
- return;
- }
-
- this.width = width;
- this.height = height;
- this.framerate = framerate;
-
- sessionOpening = true;
- openAttemptsRemaining = MAX_OPEN_CAMERA_ATTEMPTS;
- createSessionInternal(0);
- }
- }
-
- private void createSessionInternal(int delayMs) {
- uiThreadHandler.postDelayed(openCameraTimeoutRunnable, delayMs + OPEN_CAMERA_TIMEOUT);
- cameraThreadHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- createCameraSession(createSessionCallback, cameraSessionEventsHandler, applicationContext,
- surfaceHelper, cameraName, width, height, framerate);
- }
- }, delayMs);
- }
-
- @Override
- public void stopCapture() {
- Logging.d(TAG, "Stop capture");
-
- synchronized (stateLock) {
- while (sessionOpening) {
- Logging.d(TAG, "Stop capture: Waiting for session to open");
- ThreadUtils.waitUninterruptibly(stateLock);
- }
-
- if (currentSession != null) {
- Logging.d(TAG, "Stop capture: Nulling session");
- cameraStatistics.release();
- cameraStatistics = null;
- final CameraSession oldSession = currentSession;
- cameraThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- oldSession.stop();
- }
- });
- currentSession = null;
- capturerObserver.onCapturerStopped();
- } else {
- Logging.d(TAG, "Stop capture: No session open");
- }
- }
-
- Logging.d(TAG, "Stop capture done");
- }
-
- @Override
- public void changeCaptureFormat(int width, int height, int framerate) {
- Logging.d(TAG, "changeCaptureFormat: " + width + "x" + height + "@" + framerate);
- synchronized (stateLock) {
- stopCapture();
- startCapture(width, height, framerate);
- }
- }
-
- @Override
- public void dispose() {
- Logging.d(TAG, "dispose");
- stopCapture();
- }
-
- @Override
- public void switchCamera(final CameraSwitchHandler switchEventsHandler) {
- Logging.d(TAG, "switchCamera");
- cameraThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- switchCameraInternal(switchEventsHandler);
- }
- });
- }
-
- @Override
- public boolean isScreencast() {
- return false;
- }
-
- public void printStackTrace() {
- Thread cameraThread = null;
- if (cameraThreadHandler != null) {
- cameraThread = cameraThreadHandler.getLooper().getThread();
- }
- if (cameraThread != null) {
- StackTraceElement[] cameraStackTrace = cameraThread.getStackTrace();
- if (cameraStackTrace.length > 0) {
- Logging.d(TAG, "CameraCapturer stack trace:");
- for (StackTraceElement traceElem : cameraStackTrace) {
- Logging.d(TAG, traceElem.toString());
- }
- }
- }
- }
-
- private void switchCameraInternal(final CameraSwitchHandler switchEventsHandler) {
- Logging.d(TAG, "switchCamera internal");
-
- final String[] deviceNames = cameraEnumerator.getDeviceNames();
-
- if (deviceNames.length < 2) {
- if (switchEventsHandler != null) {
- switchEventsHandler.onCameraSwitchError("No camera to switch to.");
- }
- return;
- }
-
- synchronized (stateLock) {
- if (switchState != SwitchState.IDLE) {
- Logging.d(TAG, "switchCamera switchInProgress");
- if (switchEventsHandler != null) {
- switchEventsHandler.onCameraSwitchError("Camera switch already in progress.");
- }
- return;
- }
-
- if (!sessionOpening && currentSession == null) {
- Logging.d(TAG, "switchCamera: No session open");
- if (switchEventsHandler != null) {
- switchEventsHandler.onCameraSwitchError("Camera is not running.");
- }
- return;
- }
-
- this.switchEventsHandler = switchEventsHandler;
- if (sessionOpening) {
- switchState = SwitchState.PENDING;
- return;
- } else {
- switchState = SwitchState.IN_PROGRESS;
- }
-
- Logging.d(TAG, "switchCamera: Stopping session");
- cameraStatistics.release();
- cameraStatistics = null;
- final CameraSession oldSession = currentSession;
- cameraThreadHandler.post(new Runnable() {
- @Override
- public void run() {
- oldSession.stop();
- }
- });
- currentSession = null;
-
- int cameraNameIndex = Arrays.asList(deviceNames).indexOf(cameraName);
- cameraName = deviceNames[(cameraNameIndex + 1) % deviceNames.length];
-
- sessionOpening = true;
- openAttemptsRemaining = 1;
- createSessionInternal(0);
- }
- Logging.d(TAG, "switchCamera done");
- }
-
- private void checkIsOnCameraThread() {
- if (Thread.currentThread() != cameraThreadHandler.getLooper().getThread()) {
- Logging.e(TAG, "Check is on camera thread failed.");
- throw new RuntimeException("Not on camera thread.");
- }
- }
-
- protected String getCameraName() {
- synchronized (stateLock) {
- return cameraName;
- }
- }
-
- abstract protected void createCameraSession(
- CameraSession.CreateSessionCallback createSessionCallback, CameraSession.Events events,
- Context applicationContext, SurfaceTextureHelper surfaceTextureHelper, String cameraName,
- int width, int height, int framerate);
-}

Powered by Google App Engine
This is Rietveld 408576698