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; |