Merge "SoundPool: Do not sleep on stop for USAGE_GAME or on BUFFER_END"
This commit is contained in:
@@ -951,6 +951,8 @@ void SoundChannel::process(int event, void *info, unsigned long toggle)
|
|||||||
ALOGV("process %p channel %d event %s",
|
ALOGV("process %p channel %d event %s",
|
||||||
this, mChannelID, (event == AudioTrack::EVENT_UNDERRUN) ? "UNDERRUN" :
|
this, mChannelID, (event == AudioTrack::EVENT_UNDERRUN) ? "UNDERRUN" :
|
||||||
"BUFFER_END");
|
"BUFFER_END");
|
||||||
|
// Only BUFFER_END should happen as we use static tracks.
|
||||||
|
setVolume_l(0.f, 0.f); // set volume to 0 to indicate no need to ramp volume down.
|
||||||
mSoundPool->addToStopList(this);
|
mSoundPool->addToStopList(this);
|
||||||
} else if (event == AudioTrack::EVENT_LOOP_END) {
|
} else if (event == AudioTrack::EVENT_LOOP_END) {
|
||||||
ALOGV("End loop %p channel %d", this, mChannelID);
|
ALOGV("End loop %p channel %d", this, mChannelID);
|
||||||
@@ -966,14 +968,18 @@ void SoundChannel::process(int event, void *info, unsigned long toggle)
|
|||||||
bool SoundChannel::doStop_l()
|
bool SoundChannel::doStop_l()
|
||||||
{
|
{
|
||||||
if (mState != IDLE) {
|
if (mState != IDLE) {
|
||||||
setVolume_l(0, 0);
|
|
||||||
ALOGV("stop");
|
ALOGV("stop");
|
||||||
// Since we're forcibly halting the previously playing content,
|
if (mLeftVolume != 0.f || mRightVolume != 0.f) {
|
||||||
// we sleep here to ensure the volume is ramped down before we stop the track.
|
setVolume_l(0.f, 0.f);
|
||||||
// Ideally the sleep time is the mixer period, or an approximation thereof
|
if (mSoundPool->attributes()->usage != AUDIO_USAGE_GAME) {
|
||||||
// (Fast vs Normal tracks are different).
|
// Since we're forcibly halting the previously playing content,
|
||||||
// TODO: consider pausing instead of stop here.
|
// we sleep here to ensure the volume is ramped down before we stop the track.
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
// Ideally the sleep time is the mixer period, or an approximation thereof
|
||||||
|
// (Fast vs Normal tracks are different).
|
||||||
|
ALOGV("sleeping: ChannelID:%d SampleID:%d", mChannelID, mSample->sampleID());
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(20));
|
||||||
|
}
|
||||||
|
}
|
||||||
mAudioTrack->stop();
|
mAudioTrack->stop();
|
||||||
mPrevSampleID = mSample->sampleID();
|
mPrevSampleID = mSample->sampleID();
|
||||||
mSample.clear();
|
mSample.clear();
|
||||||
|
|||||||
Reference in New Issue
Block a user