From a2424aacfcd5cb47af602a32a619057fd7877d1e Mon Sep 17 00:00:00 2001 From: Mozart Louis Date: Mon, 26 Jan 2026 14:39:55 -0500 Subject: [PATCH 1/2] Re-open stream when MMAP is disabled --- samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp index 7bb3f5205..b4977b1c3 100644 --- a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp +++ b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp @@ -131,8 +131,10 @@ void PowerPlayMultiPlayer::triggerDown(int32_t index, oboe::PerformanceMode perf return; } - // If the performance mode has changed, we need to reopen the stream. - if (performanceMode != mLastPerformanceMode) { + // If the performance mode has changed, or if MMAP is disabled but currently used, + bool isMMapGlobal = isMMapEnabled(); + bool isMMapCurrentlyUsed = OboeExtensions::isMMapUsed(mAudioStream.get()); + if (performanceMode != mLastPerformanceMode || (!isMMapGlobal && isMMapCurrentlyUsed)) { teardownAudioStream(); // Attempt here to reopen the stream with the new performance mode. From b466f0f57b4f4a609931e59ff8272f87a83a7f93 Mon Sep 17 00:00:00 2001 From: Mozart Louis Date: Mon, 26 Jan 2026 16:12:02 -0500 Subject: [PATCH 2/2] Reopen stream if MMAP setting changes via global variable --- samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp | 9 +++++---- samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h | 2 ++ 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp index b4977b1c3..3cb50fa23 100644 --- a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp +++ b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.cpp @@ -38,6 +38,7 @@ void PowerPlayMultiPlayer::setupAudioStream(int32_t channelCount, bool PowerPlayMultiPlayer::openStream(oboe::PerformanceMode performanceMode) { __android_log_print(ANDROID_LOG_INFO, TAG, "openStream()"); mLastPerformanceMode = performanceMode; + mLastMMapEnabled = isMMapEnabled(); // Use shared_ptr to prevent use of a deleted callback. mDataCallback = std::make_shared(this); @@ -131,10 +132,10 @@ void PowerPlayMultiPlayer::triggerDown(int32_t index, oboe::PerformanceMode perf return; } - // If the performance mode has changed, or if MMAP is disabled but currently used, - bool isMMapGlobal = isMMapEnabled(); - bool isMMapCurrentlyUsed = OboeExtensions::isMMapUsed(mAudioStream.get()); - if (performanceMode != mLastPerformanceMode || (!isMMapGlobal && isMMapCurrentlyUsed)) { + // If the performance mode has changed, we need to reopen the stream. + // Also reopen if the user has changed the MMAP policy (enabled/disabled) since the stream was opened. + if (performanceMode != mLastPerformanceMode || + isMMapEnabled() != mLastMMapEnabled) { teardownAudioStream(); // Attempt here to reopen the stream with the new performance mode. diff --git a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h index 085711cb6..319f71442 100644 --- a/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h +++ b/samples/powerplay/src/main/cpp/PowerPlayMultiPlayer.h @@ -67,6 +67,8 @@ class PowerPlayMultiPlayer : public iolib::SimpleMultiPlayer { std::shared_ptr mPresentationCallback; oboe::PerformanceMode mLastPerformanceMode; + + bool mLastMMapEnabled; }; #endif //SAMPLES_POWERPLAYMULTIPLAYER_H