summaryrefslogtreecommitdiffstats
path: root/platform/android/audio_driver_opensl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/audio_driver_opensl.cpp')
-rw-r--r--platform/android/audio_driver_opensl.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/platform/android/audio_driver_opensl.cpp b/platform/android/audio_driver_opensl.cpp
index 51e89c720d..ef9c51db07 100644
--- a/platform/android/audio_driver_opensl.cpp
+++ b/platform/android/audio_driver_opensl.cpp
@@ -268,6 +268,10 @@ Error AudioDriverOpenSL::init_input_device() {
}
Error AudioDriverOpenSL::input_start() {
+ if (recordItf || recordBufferQueueItf) {
+ return ERR_ALREADY_IN_USE;
+ }
+
if (OS::get_singleton()->request_permission("RECORD_AUDIO")) {
return init_input_device();
}
@@ -277,6 +281,10 @@ Error AudioDriverOpenSL::input_start() {
}
Error AudioDriverOpenSL::input_stop() {
+ if (!recordItf || !recordBufferQueueItf) {
+ return ERR_CANT_OPEN;
+ }
+
SLuint32 state;
SLresult res = (*recordItf)->GetRecordState(recordItf, &state);
ERR_FAIL_COND_V(res != SL_RESULT_SUCCESS, ERR_CANT_OPEN);
@@ -313,13 +321,36 @@ void AudioDriverOpenSL::unlock() {
}
void AudioDriverOpenSL::finish() {
- (*sl)->Destroy(sl);
+ if (recordItf) {
+ (*recordItf)->SetRecordState(recordItf, SL_RECORDSTATE_STOPPED);
+ recordItf = nullptr;
+ }
+ if (recorder) {
+ (*recorder)->Destroy(recorder);
+ recorder = nullptr;
+ }
+ if (playItf) {
+ (*playItf)->SetPlayState(playItf, SL_PLAYSTATE_STOPPED);
+ playItf = nullptr;
+ }
+ if (player) {
+ (*player)->Destroy(player);
+ player = nullptr;
+ }
+ if (OutputMix) {
+ (*OutputMix)->Destroy(OutputMix);
+ OutputMix = nullptr;
+ }
+ if (sl) {
+ (*sl)->Destroy(sl);
+ sl = nullptr;
+ }
}
void AudioDriverOpenSL::set_pause(bool p_pause) {
pause = p_pause;
- if (active) {
+ if (active && playItf) {
if (pause) {
(*playItf)->SetPlayState(playItf, SL_PLAYSTATE_PAUSED);
} else {