OSDN Git Service

SoundPool: Ramp volume down when forcibly reclaiming track
authorAndy Hung <hunga@google.com>
Sat, 2 Feb 2019 02:24:51 +0000 (18:24 -0800)
committerAndy Hung <hunga@google.com>
Thu, 7 Feb 2019 04:29:28 +0000 (04:29 +0000)
Test: Soundbar menu scrolling
Bug: 119284313
Change-Id: I4e3e1dc616c4e53780dda5492bb755750be794a0

media/jni/soundpool/SoundPool.cpp

index e08dab4..4906695 100644 (file)
@@ -17,8 +17,9 @@
 //#define LOG_NDEBUG 0
 #define LOG_TAG "SoundPool"
 
+#include <chrono>
 #include <inttypes.h>
-
+#include <thread>
 #include <utils/Log.h>
 
 #define USE_SHARED_MEM_BUFFER
@@ -967,6 +968,12 @@ bool SoundChannel::doStop_l()
     if (mState != IDLE) {
         setVolume_l(0, 0);
         ALOGV("stop");
+        // Since we're forcibly halting the previously playing content,
+        // we sleep here to ensure the volume is ramped down before we stop the track.
+        // Ideally the sleep time is the mixer period, or an approximation thereof
+        // (Fast vs Normal tracks are different).
+        // TODO: consider pausing instead of stop here.
+        std::this_thread::sleep_for(std::chrono::milliseconds(20));
         mAudioTrack->stop();
         mPrevSampleID = mSample->sampleID();
         mSample.clear();