summaryrefslogtreecommitdiffstats
path: root/media/base/pipeline_impl.cc
diff options
context:
space:
mode:
authoracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 21:44:49 +0000
committeracolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-21 21:44:49 +0000
commit1a04eb71a548d34aee96b7dde4da34098fa851a2 (patch)
treea06cd0ae5afe551f9343a22917a06a2bccf7df9d /media/base/pipeline_impl.cc
parent5ed25b3e6f4a9da2b0dfe7b0787f4715cf27ef2e (diff)
downloadchromium_src-1a04eb71a548d34aee96b7dde4da34098fa851a2.zip
chromium_src-1a04eb71a548d34aee96b7dde4da34098fa851a2.tar.gz
chromium_src-1a04eb71a548d34aee96b7dde4da34098fa851a2.tar.bz2
Improve audio underflow handling.
- Added support for increasing decoded audio queue size. - Added a mechanism to notify the pipeline when the audio underflows. - Delay resuming audio playback until the audio queue has filled up. BUG=92254 TEST=AudioRendererBaseTest.Underflow Review URL: http://codereview.chromium.org/8356022 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106784 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/pipeline_impl.cc')
-rw-r--r--media/base/pipeline_impl.cc18
1 files changed, 17 insertions, 1 deletions
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index cebab46..d62b0fc 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -1220,7 +1220,9 @@ bool PipelineImpl::InitializeAudioRenderer(
return false;
audio_renderer_->Initialize(
- decoder, base::Bind(&PipelineImpl::OnFilterInitialize, this));
+ decoder,
+ base::Bind(&PipelineImpl::OnFilterInitialize, this),
+ base::Bind(&PipelineImpl::OnAudioUnderflow, this));
return true;
}
@@ -1375,4 +1377,18 @@ void PipelineImpl::OnDemuxerSeekDone(base::TimeDelta seek_timestamp,
done_cb.Run(status);
}
+void PipelineImpl::OnAudioUnderflow() {
+ if (MessageLoop::current() != message_loop_) {
+ message_loop_->PostTask(FROM_HERE, base::Bind(
+ &PipelineImpl::OnAudioUnderflow, this));
+ return;
+ }
+
+ if (state_ != kStarted)
+ return;
+
+ if (audio_renderer_)
+ audio_renderer_->ResumeAfterUnderflow(true);
+}
+
} // namespace media