From e54826cfdb2c9480ca0b7bb38f4558f1e99ad152 Mon Sep 17 00:00:00 2001 From: Robert Wu <85952307+robertwu1@users.noreply.github.com> Date: Fri, 24 Mar 2023 16:53:58 +0000 Subject: Add support for AAudioStream_release (#1755) --- .../app/src/main/cpp/NativeAudioContext.cpp | 10 ++++++ .../app/src/main/cpp/NativeAudioContext.h | 2 ++ apps/OboeTester/app/src/main/cpp/jni-bridge.cpp | 5 +++ .../com/mobileer/oboetester/TestAudioActivity.java | 24 +++++++++++-- .../mobileer/oboetester/TestOutputActivity.java | 6 ++++ .../app/src/main/res/layout/merge_audio_common.xml | 10 ++++++ .../OboeTester/app/src/main/res/values/strings.xml | 1 + include/oboe/AudioStream.h | 23 ++++++++++++ src/aaudio/AAudioLoader.cpp | 4 +++ src/aaudio/AAudioLoader.h | 5 +++ src/aaudio/AudioStreamAAudio.cpp | 25 +++++++++++++ src/aaudio/AudioStreamAAudio.h | 1 + tests/testStreamClosedMethods.cpp | 41 ++++++++++++++++++++++ 13 files changed, 155 insertions(+), 2 deletions(-) diff --git a/apps/OboeTester/app/src/main/cpp/NativeAudioContext.cpp b/apps/OboeTester/app/src/main/cpp/NativeAudioContext.cpp index 08e10c15..6a08e967 100644 --- a/apps/OboeTester/app/src/main/cpp/NativeAudioContext.cpp +++ b/apps/OboeTester/app/src/main/cpp/NativeAudioContext.cpp @@ -98,6 +98,16 @@ int32_t ActivityContext::allocateStreamIndex() { return mNextStreamHandle++; } +oboe::Result ActivityContext::release() { + oboe::Result result = oboe::Result::OK; + stopBlockingIOThread(); + for (auto entry : mOboeStreams) { + std::shared_ptr oboeStream = entry.second; + result = oboeStream->release(); + } + return result; +} + void ActivityContext::close(int32_t streamIndex) { stopBlockingIOThread(); std::shared_ptr oboeStream = getStream(streamIndex); diff --git a/apps/OboeTester/app/src/main/cpp/NativeAudioContext.h b/apps/OboeTester/app/src/main/cpp/NativeAudioContext.h index 9ffd36e4..83dd62c6 100644 --- a/apps/OboeTester/app/src/main/cpp/NativeAudioContext.h +++ b/apps/OboeTester/app/src/main/cpp/NativeAudioContext.h @@ -131,6 +131,8 @@ public: jboolean isMMap, jboolean isInput); + oboe::Result release(); + virtual void close(int32_t streamIndex); virtual void configureForStart() {} diff --git a/apps/OboeTester/app/src/main/cpp/jni-bridge.cpp b/apps/OboeTester/app/src/main/cpp/jni-bridge.cpp index 092d0917..e3fd803d 100644 --- a/apps/OboeTester/app/src/main/cpp/jni-bridge.cpp +++ b/apps/OboeTester/app/src/main/cpp/jni-bridge.cpp @@ -168,6 +168,11 @@ Java_com_mobileer_oboetester_TestAudioActivity_stopNative(JNIEnv *env, jobject) return (jint) engine.getCurrentActivity()->stop(); } +JNIEXPORT jint JNICALL +Java_com_mobileer_oboetester_TestAudioActivity_releaseNative(JNIEnv *env, jobject) { + return (jint) engine.getCurrentActivity()->release(); +} + JNIEXPORT jint JNICALL Java_com_mobileer_oboetester_TestAudioActivity_getFramesPerCallback(JNIEnv *env, jobject) { return (jint) engine.getCurrentActivity()->getFramesPerCallback(); diff --git a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestAudioActivity.java b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestAudioActivity.java index 037cef20..9350cd88 100644 --- a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestAudioActivity.java +++ b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestAudioActivity.java @@ -59,8 +59,9 @@ abstract class TestAudioActivity extends Activity { public static final int AUDIO_STATE_STARTED = 1; public static final int AUDIO_STATE_PAUSED = 2; public static final int AUDIO_STATE_STOPPED = 3; - public static final int AUDIO_STATE_CLOSING = 4; - public static final int AUDIO_STATE_CLOSED = 5; + public static final int AUDIO_STATE_RELEASED = 4; + public static final int AUDIO_STATE_CLOSING = 5; + public static final int AUDIO_STATE_CLOSED = 6; public static final int COLOR_ACTIVE = 0xFFD0D0A0; public static final int COLOR_IDLE = 0xFFD0D0D0; @@ -86,6 +87,7 @@ abstract class TestAudioActivity extends Activity { private Button mStartButton; private Button mPauseButton; private Button mStopButton; + private Button mReleaseButton; private Button mCloseButton; private MyStreamSniffer mStreamSniffer; private CheckBox mCallbackReturnStopBox; @@ -309,6 +311,7 @@ abstract class TestAudioActivity extends Activity { mStartButton.setBackgroundColor(mAudioState == AUDIO_STATE_STARTED ? COLOR_ACTIVE : COLOR_IDLE); mPauseButton.setBackgroundColor(mAudioState == AUDIO_STATE_PAUSED ? COLOR_ACTIVE : COLOR_IDLE); mStopButton.setBackgroundColor(mAudioState == AUDIO_STATE_STOPPED ? COLOR_ACTIVE : COLOR_IDLE); + mReleaseButton.setBackgroundColor(mAudioState == AUDIO_STATE_RELEASED ? COLOR_ACTIVE : COLOR_IDLE); mCloseButton.setBackgroundColor(mAudioState == AUDIO_STATE_CLOSED ? COLOR_ACTIVE : COLOR_IDLE); } setConfigViewsEnabled(mAudioState == AUDIO_STATE_CLOSED); @@ -409,6 +412,7 @@ abstract class TestAudioActivity extends Activity { mStartButton = (Button) findViewById(R.id.button_start); mPauseButton = (Button) findViewById(R.id.button_pause); mStopButton = (Button) findViewById(R.id.button_stop); + mReleaseButton = (Button) findViewById(R.id.button_release); mCloseButton = (Button) findViewById(R.id.button_close); } mStreamContexts = new ArrayList(); @@ -495,6 +499,10 @@ abstract class TestAudioActivity extends Activity { closeAudio(); } + public void releaseAudio(View view) { + releaseAudio(); + } + public int getSampleRate() { return mSampleRate; } @@ -579,6 +587,8 @@ abstract class TestAudioActivity extends Activity { private native int stopNative(); + private native int releaseNative(); + protected native void setActivityType(int activityType); private native int getFramesPerCallback(); @@ -627,6 +637,16 @@ abstract class TestAudioActivity extends Activity { } } + public void releaseAudio() { + int result = releaseNative(); + if (result != 0) { + showErrorToast("release failed with " + result); + } else { + mAudioState = AUDIO_STATE_RELEASED; + updateEnabledWidgets(); + } + } + public void runTest() { } diff --git a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestOutputActivity.java b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestOutputActivity.java index 0d5d0ce3..80812ccf 100644 --- a/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestOutputActivity.java +++ b/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/TestOutputActivity.java @@ -128,6 +128,12 @@ public final class TestOutputActivity extends TestOutputActivityBase { super.pauseAudio(); } + public void releaseAudio() { + configureChannelBoxes(0); + mOutputSignalSpinner.setEnabled(true); + super.releaseAudio(); + } + public void closeAudio() { configureChannelBoxes(0); mOutputSignalSpinner.setEnabled(true); diff --git a/apps/OboeTester/app/src/main/res/layout/merge_audio_common.xml b/apps/OboeTester/app/src/main/res/layout/merge_audio_common.xml index cee7bed5..df6079fd 100644 --- a/apps/OboeTester/app/src/main/res/layout/merge_audio_common.xml +++ b/apps/OboeTester/app/src/main/res/layout/merge_audio_common.xml @@ -68,6 +68,16 @@ android:onClick="stopAudio" android:text="@string/stopAudio" /> +