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