diff --git a/app/src/main/java/com/googleresearch/capturesync/ImageMetadataSynchronizer.java b/app/src/main/java/com/googleresearch/capturesync/ImageMetadataSynchronizer.java index ab99d4d..c4769d2 100644 --- a/app/src/main/java/com/googleresearch/capturesync/ImageMetadataSynchronizer.java +++ b/app/src/main/java/com/googleresearch/capturesync/ImageMetadataSynchronizer.java @@ -396,6 +396,8 @@ public void onCaptureSequenceCompleted(@NonNull CameraCaptureSession session, in if (context.getLastVideoSeqId() != null && sequenceId == context.getLastVideoSeqId() && context.getLogger() != null) { context.getMediaRecorder().stop(); + context.stopVideoPostPrepare(); + if (context.isVideoRecording()) { context.setVideoRecording(false); } else { diff --git a/app/src/main/java/com/googleresearch/capturesync/MainActivity.java b/app/src/main/java/com/googleresearch/capturesync/MainActivity.java index a082129..9f63025 100644 --- a/app/src/main/java/com/googleresearch/capturesync/MainActivity.java +++ b/app/src/main/java/com/googleresearch/capturesync/MainActivity.java @@ -215,7 +215,7 @@ public void surfaceDestroyed(SurfaceHolder holder) { private PhaseAlignController phaseAlignController; private int numCaptures; private Toast latestToast; - private Surface surface; + private Surface recorderSurface; @Override @@ -595,7 +595,7 @@ private PhaseConfig loadPhaseConfigFile() throws JSONException { private void closeCamera() { stopPreview(); captureSession = null; - surface.release(); + recorderSurface.release(); if (cameraController != null) { cameraController.close(); cameraController = null; @@ -869,7 +869,7 @@ private void configureCaptureSession() { // MROB. Added MediaRecorder surface try { createRecorderSurface(); - outputSurfaces.add(surface); + outputSurfaces.add(recorderSurface); } catch (IOException e) { e.printStackTrace(); } @@ -960,9 +960,9 @@ private String getOutputMediaFilePath() throws IOException { } private void createRecorderSurface() throws IOException { - surface = MediaCodec.createPersistentInputSurface(); + recorderSurface = MediaCodec.createPersistentInputSurface(); - MediaRecorder recorder = setUpMediaRecorder(surface, false); + MediaRecorder recorder = setUpMediaRecorder(recorderSurface, false); recorder.prepare(); recorder.release(); deleteUnusedVideo(); @@ -1015,7 +1015,7 @@ public void startVideo(boolean wantAutoExp) { isVideoRecording = true; try { - mediaRecorder = setUpMediaRecorder(surface); + mediaRecorder = setUpMediaRecorder(recorderSurface); String filename = lastTimeStamp + ".csv"; // Creates frame timestamps logger try { @@ -1024,12 +1024,12 @@ public void startVideo(boolean wantAutoExp) { e.printStackTrace(); } mediaRecorder.prepare(); - Log.d(TAG, "MediaRecorder surface " + surface); + Log.d(TAG, "MediaRecorder surface " + recorderSurface); CaptureRequest.Builder previewRequestBuilder = cameraController .getRequestFactory() .makeVideo( - surface, + recorderSurface, viewfinderSurface, cameraController.getOutputSurfaces(), currentSensorExposureTimeNs, @@ -1054,7 +1054,18 @@ public void stopVideo() { // Switch to preview again Toast.makeText(this, "Stopped recording video", Toast.LENGTH_LONG).show(); - startPreview(); + try { + captureSession.stopRepeating(); + captureSession.close(); + } catch (CameraAccessException e) { + e.printStackTrace(); + } + } + + public void stopVideoPostPrepare() { + mediaRecorder.reset(); + recorderSurface.release(); + configureCaptureSession(); } private void stopPreview() {