diff options
Diffstat (limited to 'samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp')
-rw-r--r-- | samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp b/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp index e02e0090..140dd328 100644 --- a/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp +++ b/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp @@ -102,8 +102,8 @@ oboe::Result LiveEffectEngine::openStreams() { } warnIfNotLowLatency(mRecordingStream); - mFullDuplexPass.setInputStream(mRecordingStream); - mFullDuplexPass.setOutputStream(mPlayStream); + mFullDuplexPass.setInputStream(mRecordingStream.get()); + mFullDuplexPass.setOutputStream(mPlayStream.get()); return result; } @@ -235,4 +235,20 @@ void LiveEffectEngine::onErrorAfterClose(oboe::AudioStream *oboeStream, LOGE("%s stream Error after close: %s", oboe::convertToText(oboeStream->getDirection()), oboe::convertToText(error)); + + // Stop the Full Duplex stream. + // Since the error callback occurs only for the output stream, close the input stream. + mFullDuplexPass.stop(); + mFullDuplexPass.setOutputStream(nullptr); + closeStream(mRecordingStream); + mFullDuplexPass.setInputStream(nullptr); + + // Restart the stream if the error is a disconnect. + if (error == oboe::Result::ErrorDisconnected) { + LOGI("Restarting AudioStream"); + oboe::Result result = openStreams(); + if (result == oboe::Result::OK) { + mFullDuplexPass.start(); + } + } } |