summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-23 02:05:33 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-23 02:05:33 +0000
commit71ee3855bd85c05bed5a97202dfd388f84e597dd (patch)
tree5601167cf9ef1bb72107b54a9178e1c51ba9d083
parent8738e0d716b5c073f0a7efff5abf883799c27600 (diff)
downloadchromium_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.cc6
-rw-r--r--media/base/pipeline.cc2
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_);