From 0ef93e2b4761bda3793ad19b5d5a082e898e0d3e Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 12 Aug 2023 21:30:29 +0200 Subject: [PATCH] feat: Add VideoRecorderService --- app/src/main/AndroidManifest.xml | 6 ++ .../alibi/services/AudioRecorderService.kt | 3 - .../alibi/services/IntervalRecorderService.kt | 3 + .../alibi/services/VideoRecorderService.kt | 63 +++++++++++++++++++ 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f916266..855e047 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,9 +4,15 @@ + + + + + Unit = {} - val filePath: String - get() = "$folder/$counter.${settings!!.fileExtension}" - private fun createRecorder(): MediaRecorder { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { MediaRecorder(this) diff --git a/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt index b2f6fa4..6fd57cb 100644 --- a/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt +++ b/app/src/main/java/app/myzel394/alibi/services/IntervalRecorderService.kt @@ -30,6 +30,9 @@ abstract class IntervalRecorderService: ExtraRecorderInformationService() { var settings: Settings? = null protected set + val filePath: String + get() = "$folder/$counter.${settings!!.fileExtension}" + private lateinit var cycleTimer: ScheduledExecutorService fun createLastRecording(): LastRecording = LastRecording( diff --git a/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt new file mode 100644 index 0000000..10a412a --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/services/VideoRecorderService.kt @@ -0,0 +1,63 @@ +package app.myzel394.alibi.services + +import androidx.camera.view.CameraController.VIDEO_CAPTURE +import androidx.camera.view.LifecycleCameraController +import androidx.camera.view.video.ExperimentalVideo +import androidx.camera.view.video.OnVideoSavedCallback +import androidx.camera.view.video.OutputFileOptions +import androidx.camera.view.video.OutputFileResults +import androidx.core.content.ContextCompat +import androidx.lifecycle.LifecycleOwner +import java.io.File + +@ExperimentalVideo class VideoRecorderService: IntervalRecorderService() { + var amplitudesAmount = 1000 + + val cameraController = LifecycleCameraController(this) + + var onError: () -> Unit = {} + + public fun bindToLifecycle(lifecycleOwner: LifecycleOwner) { + cameraController.bindToLifecycle(lifecycleOwner) + } + + public fun unbindLifecycle() { + cameraController.unbind() + } + + private fun refreshController() { + if (cameraController.isRecording) { + cameraController.stopRecording() + } + + cameraController.startRecording( + OutputFileOptions + .builder(File(filePath)) + .build(), + ContextCompat.getMainExecutor(this), + object: OnVideoSavedCallback { + override fun onVideoSaved(outputFileResults: OutputFileResults) { + } + + override fun onError(videoCaptureError: Int, message: String, cause: Throwable?) { + onError() + } + } + ) + } + + override fun start() { + cameraController.setEnabledUseCases(VIDEO_CAPTURE) + super.start() + } + + override fun startNewCycle() { + super.startNewCycle() + + refreshController() + } + + override fun getAmplitudeAmount(): Int = amplitudesAmount + + override fun getAmplitude(): Int = 0 +} \ No newline at end of file