aboutsummaryrefslogtreecommitdiff
path: root/samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp')
-rw-r--r--samples/LiveEffect/src/main/cpp/LiveEffectEngine.cpp20
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();
+ }
+ }
}