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

Unified Diff: webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java

Issue 2833773003: Support adding and removing MediaRecorder to camera 2 session. (Closed)
Patch Set: Address comments - 3 Created 3 years, 8 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
Index: webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java
diff --git a/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java b/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java
index 3279782def37aea339b2e9ccbdcce0df1c6b431e..8de5be0eebef48b3cea295d1903abf9c3b105e0f 100644
--- a/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java
+++ b/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java
@@ -21,11 +21,12 @@ import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraMetadata;
import android.hardware.camera2.CaptureFailure;
import android.hardware.camera2.CaptureRequest;
+import android.media.MediaRecorder;
import android.os.Handler;
import android.util.Range;
import android.view.Surface;
import android.view.WindowManager;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.webrtc.CameraEnumerationAndroid.CaptureFormat;
@@ -49,6 +50,7 @@ class Camera2Session implements CameraSession {
private final Context applicationContext;
private final CameraManager cameraManager;
private final SurfaceTextureHelper surfaceTextureHelper;
+ private final Surface mediaRecorderSurface;
private final String cameraId;
private final int width;
private final int height;
@@ -123,9 +125,14 @@ class Camera2Session implements CameraSession {
final SurfaceTexture surfaceTexture = surfaceTextureHelper.getSurfaceTexture();
surfaceTexture.setDefaultBufferSize(captureFormat.width, captureFormat.height);
surface = new Surface(surfaceTexture);
+ List<Surface> surfaces = new ArrayList<Surface>();
+ surfaces.add(surface);
+ if (mediaRecorderSurface != null) {
+ Logging.d(TAG, "Add MediaRecorder surface to capture session.");
+ surfaces.add(mediaRecorderSurface);
+ }
try {
- camera.createCaptureSession(
- Arrays.asList(surface), new CaptureSessionCallback(), cameraThreadHandler);
+ camera.createCaptureSession(surfaces, new CaptureSessionCallback(), cameraThreadHandler);
} catch (CameraAccessException e) {
reportError("Failed to create capture session. " + e);
return;
@@ -175,6 +182,10 @@ class Camera2Session implements CameraSession {
chooseFocusMode(captureRequestBuilder);
captureRequestBuilder.addTarget(surface);
+ if (mediaRecorderSurface != null) {
+ Logging.d(TAG, "Add MediaRecorder surface to CaptureRequest.Builder");
+ captureRequestBuilder.addTarget(mediaRecorderSurface);
+ }
session.setRepeatingRequest(
captureRequestBuilder.build(), new CameraCaptureCallback(), cameraThreadHandler);
} catch (CameraAccessException e) {
@@ -280,15 +291,15 @@ class Camera2Session implements CameraSession {
public static void create(CreateSessionCallback callback, Events events,
Context applicationContext, CameraManager cameraManager,
- SurfaceTextureHelper surfaceTextureHelper, String cameraId, int width, int height,
- int framerate) {
+ SurfaceTextureHelper surfaceTextureHelper, MediaRecorder mediaRecorder, String cameraId,
+ int width, int height, int framerate) {
new Camera2Session(callback, events, applicationContext, cameraManager, surfaceTextureHelper,
- cameraId, width, height, framerate);
+ mediaRecorder, cameraId, width, height, framerate);
}
private Camera2Session(CreateSessionCallback callback, Events events, Context applicationContext,
- CameraManager cameraManager, SurfaceTextureHelper surfaceTextureHelper, String cameraId,
- int width, int height, int framerate) {
+ CameraManager cameraManager, SurfaceTextureHelper surfaceTextureHelper,
+ MediaRecorder mediaRecorder, String cameraId, int width, int height, int framerate) {
Logging.d(TAG, "Create new camera2 session on camera " + cameraId);
constructionTimeNs = System.nanoTime();
@@ -299,6 +310,7 @@ class Camera2Session implements CameraSession {
this.applicationContext = applicationContext;
this.cameraManager = cameraManager;
this.surfaceTextureHelper = surfaceTextureHelper;
+ this.mediaRecorderSurface = (mediaRecorder != null) ? mediaRecorder.getSurface() : null;
this.cameraId = cameraId;
this.width = width;
this.height = height;

Powered by Google App Engine
This is Rietveld 408576698