diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 02:05:33 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-23 02:05:33 +0000 |
commit | 71ee3855bd85c05bed5a97202dfd388f84e597dd (patch) | |
tree | 5601167cf9ef1bb72107b54a9178e1c51ba9d083 | |
parent | 8738e0d716b5c073f0a7efff5abf883799c27600 (diff) | |
download | chromium_src-71ee3855bd85c05bed5a97202dfd388f84e597dd.zip chromium_src-71ee3855bd85c05bed5a97202dfd388f84e597dd.tar.gz chromium_src-71ee3855bd85c05bed5a97202dfd388f84e597dd.tar.bz2 |
Guard against ALSA returning insane frame counts for current delay.
One video observed generated an alleged delay of 9222246136947932171 frames near
the end of stream, which when converted to bytes and passed through a chain of
uint32/int32 conversions became -4052 bytes, and then -46ms, triggering the
DCHECK in the bug below.
BUG=144281
Review URL: https://chromiumcodereview.appspot.com/10869019
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152919 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | media/audio/linux/alsa_output.cc | 6 | ||||
-rw-r--r-- | media/base/pipeline.cc | 2 |
2 files changed, 4 insertions, 4 deletions
diff --git a/media/audio/linux/alsa_output.cc b/media/audio/linux/alsa_output.cc index 86c3999..980f6e0 100644 --- a/media/audio/linux/alsa_output.cc +++ b/media/audio/linux/alsa_output.cc @@ -637,9 +637,9 @@ snd_pcm_sframes_t AlsaPcmOutputStream::GetCurrentDelay() { } } - // snd_pcm_delay() may not work in the beginning of the stream. In this case - // return delay of data we know currently is in the ALSA's buffer. - if (delay < 0) + // snd_pcm_delay() sometimes returns crazy values. In this case return delay + // of data we know currently is in ALSA's buffer. + if (delay < 0 || delay > alsa_buffer_frames_) delay = alsa_buffer_frames_ - GetAvailableFrames(); return delay; diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc index a27bfc3..4650e6e 100644 --- a/media/base/pipeline.cc +++ b/media/base/pipeline.cc @@ -352,7 +352,7 @@ void Pipeline::OnAudioDisabled() { } void Pipeline::OnAudioTimeUpdate(TimeDelta time, TimeDelta max_time) { - DCHECK(time <= max_time); + DCHECK_LE(time.InMicroseconds(), max_time.InMicroseconds()); DCHECK(IsRunning()); base::AutoLock auto_lock(lock_); |