Add SoundPool API to pause and resume all active streams. Bug 2426531.
diff --git a/media/jni/soundpool/SoundPool.cpp b/media/jni/soundpool/SoundPool.cpp
index e57f4a4..2a65b0d 100644
--- a/media/jni/soundpool/SoundPool.cpp
+++ b/media/jni/soundpool/SoundPool.cpp
@@ -294,6 +294,16 @@
}
}
+void SoundPool::autoPause()
+{
+ LOGV("pauseAll()");
+ Mutex::Autolock lock(&mLock);
+ for (int i = 0; i < mMaxChannels; ++i) {
+ SoundChannel* channel = &mChannelPool[i];
+ channel->autoPause();
+ }
+}
+
void SoundPool::resume(int channelID)
{
LOGV("resume(%d)", channelID);
@@ -304,6 +314,16 @@
}
}
+void SoundPool::autoResume()
+{
+ LOGV("pauseAll()");
+ Mutex::Autolock lock(&mLock);
+ for (int i = 0; i < mMaxChannels; ++i) {
+ SoundChannel* channel = &mChannelPool[i];
+ channel->autoResume();
+ }
+}
+
void SoundPool::stop(int channelID)
{
LOGV("stop(%d)", channelID);
@@ -710,12 +730,35 @@
}
}
+void SoundChannel::autoPause()
+{
+ Mutex::Autolock lock(&mLock);
+ if (mState == PLAYING) {
+ LOGV("pause track");
+ mState = PAUSED;
+ mAutoPaused = true;
+ mAudioTrack->pause();
+ }
+}
+
void SoundChannel::resume()
{
Mutex::Autolock lock(&mLock);
if (mState == PAUSED) {
LOGV("resume track");
mState = PLAYING;
+ mAutoPaused = false;
+ mAudioTrack->start();
+ }
+}
+
+void SoundChannel::autoResume()
+{
+ Mutex::Autolock lock(&mLock);
+ if (mAutoPaused && (mState == PAUSED)) {
+ LOGV("resume track");
+ mState = PLAYING;
+ mAutoPaused = false;
mAudioTrack->start();
}
}