diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-21 21:44:49 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-21 21:44:49 +0000 |
commit | 1a04eb71a548d34aee96b7dde4da34098fa851a2 (patch) | |
tree | a06cd0ae5afe551f9343a22917a06a2bccf7df9d /media/base/pipeline_impl.cc | |
parent | 5ed25b3e6f4a9da2b0dfe7b0787f4715cf27ef2e (diff) | |
download | chromium_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.cc | 18 |
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 |