Merge "Fix issue 2929440" into gingerbread

This commit is contained in:
Eric Laurent
2010-08-19 08:49:20 -07:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 3 deletions

View File

@@ -1601,7 +1601,7 @@ bool AudioFlinger::MixerThread::threadLoop()
} }
if (mSuspended) { if (mSuspended) {
sleepTime = idleSleepTime; sleepTime = suspendSleepTimeUs();
} }
// sleepTime == 0 means we must write to audio hardware // sleepTime == 0 means we must write to audio hardware
if (sleepTime == 0) { if (sleepTime == 0) {
@@ -2021,6 +2021,11 @@ uint32_t AudioFlinger::MixerThread::idleSleepTimeUs()
return (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000) / 2; return (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000) / 2;
} }
uint32_t AudioFlinger::MixerThread::suspendSleepTimeUs()
{
return (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000);
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
AudioFlinger::DirectOutputThread::DirectOutputThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device) AudioFlinger::DirectOutputThread::DirectOutputThread(const sp<AudioFlinger>& audioFlinger, AudioStreamOut* output, int id, uint32_t device)
: PlaybackThread(audioFlinger, output, id, device) : PlaybackThread(audioFlinger, output, id, device)
@@ -2365,7 +2370,7 @@ bool AudioFlinger::DirectOutputThread::threadLoop()
} }
if (mSuspended) { if (mSuspended) {
sleepTime = idleSleepTime; sleepTime = suspendSleepTimeUs();
} }
// sleepTime == 0 means we must write to audio hardware // sleepTime == 0 means we must write to audio hardware
if (sleepTime == 0) { if (sleepTime == 0) {
@@ -2486,6 +2491,18 @@ uint32_t AudioFlinger::DirectOutputThread::idleSleepTimeUs()
return time; return time;
} }
uint32_t AudioFlinger::DirectOutputThread::suspendSleepTimeUs()
{
uint32_t time;
if (AudioSystem::isLinearPCM(mFormat)) {
time = (uint32_t)(((mFrameCount * 1000) / mSampleRate) * 1000);
} else {
time = 10000;
}
return time;
}
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
AudioFlinger::DuplicatingThread::DuplicatingThread(const sp<AudioFlinger>& audioFlinger, AudioFlinger::MixerThread* mainThread, int id) AudioFlinger::DuplicatingThread::DuplicatingThread(const sp<AudioFlinger>& audioFlinger, AudioFlinger::MixerThread* mainThread, int id)
@@ -2612,7 +2629,7 @@ bool AudioFlinger::DuplicatingThread::threadLoop()
} }
if (mSuspended) { if (mSuspended) {
sleepTime = idleSleepTime; sleepTime = suspendSleepTimeUs();
} }
// sleepTime == 0 means we must write to audio hardware // sleepTime == 0 means we must write to audio hardware
if (sleepTime == 0) { if (sleepTime == 0) {

View File

@@ -664,6 +664,7 @@ private:
virtual void deleteTrackName_l(int name) = 0; virtual void deleteTrackName_l(int name) = 0;
virtual uint32_t activeSleepTimeUs() = 0; virtual uint32_t activeSleepTimeUs() = 0;
virtual uint32_t idleSleepTimeUs() = 0; virtual uint32_t idleSleepTimeUs() = 0;
virtual uint32_t suspendSleepTimeUs() = 0;
private: private:
@@ -724,6 +725,7 @@ private:
virtual void deleteTrackName_l(int name); virtual void deleteTrackName_l(int name);
virtual uint32_t activeSleepTimeUs(); virtual uint32_t activeSleepTimeUs();
virtual uint32_t idleSleepTimeUs(); virtual uint32_t idleSleepTimeUs();
virtual uint32_t suspendSleepTimeUs();
AudioMixer* mAudioMixer; AudioMixer* mAudioMixer;
}; };
@@ -744,6 +746,7 @@ private:
virtual void deleteTrackName_l(int name); virtual void deleteTrackName_l(int name);
virtual uint32_t activeSleepTimeUs(); virtual uint32_t activeSleepTimeUs();
virtual uint32_t idleSleepTimeUs(); virtual uint32_t idleSleepTimeUs();
virtual uint32_t suspendSleepTimeUs();
private: private:
void applyVolume(uint16_t leftVol, uint16_t rightVol, bool ramp); void applyVolume(uint16_t leftVol, uint16_t rightVol, bool ramp);