fix: Properly save recording

This commit is contained in:
Myzel394 2023-12-17 21:24:12 +01:00
parent df0bb35672
commit 76752e9004
No known key found for this signature in database
GPG Key ID: 79CC92F37B3E1A2B
5 changed files with 84 additions and 78 deletions

View File

@ -263,7 +263,7 @@ data class AudioRecorderSettings(
} }
val fileExtension: String val fileExtension: String
get() = when (outputFormat) { get() = when (getOutputFormat()) {
MediaRecorder.OutputFormat.AAC_ADTS -> "aac" MediaRecorder.OutputFormat.AAC_ADTS -> "aac"
MediaRecorder.OutputFormat.THREE_GPP -> "3gp" MediaRecorder.OutputFormat.THREE_GPP -> "3gp"
MediaRecorder.OutputFormat.MPEG_4 -> "mp4" MediaRecorder.OutputFormat.MPEG_4 -> "mp4"

View File

@ -54,6 +54,8 @@ class VideoRecorderService :
private lateinit var selectedCamera: CameraSelector private lateinit var selectedCamera: CameraSelector
private var enableAudio by Delegates.notNull<Boolean>() private var enableAudio by Delegates.notNull<Boolean>()
var onCameraControlAvailable = {}
var cameraControl: CameraControl? = null var cameraControl: CameraControl? = null
private set private set
@ -186,6 +188,7 @@ class VideoRecorderService :
videoCapture videoCapture
) )
cameraControl = CameraControl(camera!!) cameraControl = CameraControl(camera!!)
onCameraControlAvailable()
_cameraAvailableListener.complete(Unit) _cameraAvailableListener.complete(Unit)
} }

View File

@ -1,4 +1,4 @@
package app.myzel394.alibi.ui.components.RecorderScreen.atoms package app.myzel394.alibi.ui.components.RecorderScreen.organisms
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
@ -23,6 +23,8 @@ import app.myzel394.alibi.helpers.AudioBatchesFolder
import app.myzel394.alibi.helpers.BatchesFolder import app.myzel394.alibi.helpers.BatchesFolder
import app.myzel394.alibi.helpers.VideoBatchesFolder import app.myzel394.alibi.helpers.VideoBatchesFolder
import app.myzel394.alibi.services.IntervalRecorderService import app.myzel394.alibi.services.IntervalRecorderService
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderErrorDialog
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderProcessingDialog
import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.AudioRecorderModel
import app.myzel394.alibi.ui.models.BaseRecorderModel import app.myzel394.alibi.ui.models.BaseRecorderModel
import app.myzel394.alibi.ui.models.VideoRecorderModel import app.myzel394.alibi.ui.models.VideoRecorderModel
@ -116,15 +118,13 @@ fun RecorderEventsHandler(
} }
} }
fun saveRecording(recorder: RecorderModel) { suspend fun saveRecording(recorder: RecorderModel) {
scope.launch {
isProcessing = true isProcessing = true
// Give the user some time to see the processing dialog // Give the user some time to see the processing dialog
delay(100) delay(100)
try { try {
val recording = val recording =
// When new recording created // When new recording created
recorder.recorderService?.getRecordingInformation() recorder.recorderService?.getRecordingInformation()
@ -193,7 +193,6 @@ fun RecorderEventsHandler(
isProcessing = false isProcessing = false
} }
} }
}
// Register audio recorder events // Register audio recorder events
DisposableEffect(key1 = audioRecorder, key2 = settings) { DisposableEffect(key1 = audioRecorder, key2 = settings) {
@ -208,12 +207,12 @@ fun RecorderEventsHandler(
saveAsLastRecording(audioRecorder as RecorderModel) saveAsLastRecording(audioRecorder as RecorderModel)
saveRecording(audioRecorder) saveRecording(audioRecorder)
}
audioRecorder.destroyService(context) audioRecorder.destroyService(context)
} }
} }
} }
}
audioRecorder.onError = { audioRecorder.onError = {
scope.launch { scope.launch {
saveAsLastRecording(audioRecorder as RecorderModel) saveAsLastRecording(audioRecorder as RecorderModel)
@ -241,12 +240,12 @@ fun RecorderEventsHandler(
saveAsLastRecording(videoRecorder as RecorderModel) saveAsLastRecording(videoRecorder as RecorderModel)
saveRecording(videoRecorder) saveRecording(videoRecorder)
}
videoRecorder.destroyService(context) videoRecorder.destroyService(context)
} }
} }
} }
}
videoRecorder.onError = { videoRecorder.onError = {
scope.launch { scope.launch {
saveAsLastRecording(videoRecorder as RecorderModel) saveAsLastRecording(videoRecorder as RecorderModel)

View File

@ -26,8 +26,8 @@ class VideoRecorderModel :
override val isInRecording: Boolean override val isInRecording: Boolean
get() = super.isInRecording get() = super.isInRecording
val isStartingRecording: Boolean var isStartingRecording by mutableStateOf(true)
get() = recorderService?.cameraControl == null private set
val cameraSelector: CameraSelector val cameraSelector: CameraSelector
get() = CameraSelector.Builder().requireLensFacing(cameraID).build() get() = CameraSelector.Builder().requireLensFacing(cameraID).build()
@ -46,6 +46,10 @@ class VideoRecorderModel :
service.startRecording() service.startRecording()
} }
service.onCameraControlAvailable = {
isStartingRecording = false
}
recorderState = service.state recorderState = service.state
recordingTime = service.recordingTime recordingTime = service.recordingTime
} }

View File

@ -28,7 +28,7 @@ import app.myzel394.alibi.R
import app.myzel394.alibi.dataStore import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.db.RecordingInformation import app.myzel394.alibi.db.RecordingInformation
import app.myzel394.alibi.ui.components.RecorderScreen.atoms.RecorderEventsHandler import app.myzel394.alibi.ui.components.RecorderScreen.organisms.RecorderEventsHandler
import app.myzel394.alibi.ui.components.RecorderScreen.organisms.VideoRecordingStatus import app.myzel394.alibi.ui.components.RecorderScreen.organisms.VideoRecordingStatus
import app.myzel394.alibi.ui.effects.rememberSettings import app.myzel394.alibi.ui.effects.rememberSettings
import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.AudioRecorderModel