Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8d0fda96 authored by Glenn Kasten's avatar Glenn Kasten
Browse files

Partial fix for SoundPool not terminating

SoundPool was waiting for EVENT_UNDERRUN only to indicate end of clip.  In
J, AudioTrack delivered both EVENT_UNDERRUN followed by EVENT_BUFFER_END.
However, as of K, AudioTrack is only delivering EVENT_BUFFER_END (this
lack of EVENT_UNDERRUN is another bug which still needs to be fixed).
The workaround is to also respond to EVENT_BUFFER_END in SoundPool.

Bug: 10787103
Change-Id: Id68a23bddd6dd9df6c49c55138197260d71ca468
parent 6cc3a994
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -740,8 +740,8 @@ void SoundChannel::process(int event, void *info, unsigned long toggle)
            b->size = count;
            //ALOGV("buffer=%p, [0]=%d", b->i16, b->i16[0]);
        }
    } else if (event == AudioTrack::EVENT_UNDERRUN) {
        ALOGV("process %p channel %d EVENT_UNDERRUN", this, mChannelID);
    } else if (event == AudioTrack::EVENT_UNDERRUN || event == AudioTrack::EVENT_BUFFER_END) {
        ALOGV("process %p channel %d EVENT_UNDERRUN or EVENT_BUFFER_END", this, mChannelID);
        mSoundPool->addToStopList(this);
    } else if (event == AudioTrack::EVENT_LOOP_END) {
        ALOGV("End loop %p channel %d count %d", this, mChannelID, *(int *)info);