diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 01:26:40 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-16 01:26:40 +0000 |
commit | cef6492128ea70329523cbcf5d4c204660090857 (patch) | |
tree | 7386081bed04bb489d9e19fa64f8090ff4bfb6a4 /media/base/pipeline_impl.cc | |
parent | b02c01713a168403f65d5193ad6934d761c7fbaa (diff) | |
download | chromium_src-cef6492128ea70329523cbcf5d4c204660090857.zip chromium_src-cef6492128ea70329523cbcf5d4c204660090857.tar.gz chromium_src-cef6492128ea70329523cbcf5d4c204660090857.tar.bz2 |
Adding callback support to media filter Initialize() and Seek().
Also includes unit tests for AudioRendererBase and VideoRendererBase.
I had to rollback my first attempt at this change. Original review: http://codereview.chromium.org/155469
BUG=16014,16031
TEST=media_unittests, layout tests
Review URL: http://codereview.chromium.org/155608
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20836 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/base/pipeline_impl.cc')
-rw-r--r-- | media/base/pipeline_impl.cc | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index f021ad3..7ef051d 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc @@ -328,15 +328,6 @@ void PipelineInternal::VolumeChanged(float volume) { NewRunnableMethod(this, &PipelineInternal::VolumeChangedTask, volume)); } -// Called from any thread. -void PipelineInternal::InitializationComplete(FilterHostImpl* host) { - if (IsPipelineOk()) { - // Continue the initialize task by proceeding to the next stage. - message_loop_->PostTask(FROM_HERE, - NewRunnableMethod(this, &PipelineInternal::InitializeTask)); - } -} - // Called from any thread. Updates the pipeline time. void PipelineInternal::SetTime(base::TimeDelta time) { // TODO(scherkus): why not post a task? @@ -350,6 +341,19 @@ void PipelineInternal::Error(PipelineError error) { NewRunnableMethod(this, &PipelineInternal::ErrorTask, error)); } +// Called from any thread. +void PipelineInternal::OnFilterInitialize() { + // Continue the initialize task by proceeding to the next stage. + message_loop_->PostTask(FROM_HERE, + NewRunnableMethod(this, &PipelineInternal::InitializeTask)); +} + +// Called from any thread. +void PipelineInternal::OnFilterSeek() { + // TODO(scherkus): have PipelineInternal wait to receive replies from every + // filter before calling the client's |seek_callback_|. +} + void PipelineInternal::StartTask(FilterFactory* filter_factory, const std::string& url, PipelineCallback* start_callback) { @@ -383,8 +387,8 @@ void PipelineInternal::StartTask(FilterFactory* filter_factory, void PipelineInternal::InitializeTask() { DCHECK_EQ(MessageLoop::current(), message_loop_); - // If we have received the stop signal, return immediately. - if (state_ == kStopped) + // If we have received the stop or error signal, return immediately. + if (state_ == kStopped || state_ == kError) return; DCHECK(state_ == kCreated || IsPipelineInitializing()); @@ -551,7 +555,8 @@ void PipelineInternal::SeekTask(base::TimeDelta time, for (FilterHostVector::iterator iter = filter_hosts_.begin(); iter != filter_hosts_.end(); ++iter) { - (*iter)->media_filter()->Seek(time); + (*iter)->media_filter()->Seek(time, + NewCallback(this, &PipelineInternal::OnFilterSeek)); } // TODO(hclam): we should set the time when the above seek operations were all @@ -602,9 +607,8 @@ void PipelineInternal::CreateFilter(FilterFactory* filter_factory, filter_hosts_.push_back(host.release()); // Now initialize the filter. - if (!filter->Initialize(source)) { - Error(PIPELINE_ERROR_INITIALIZATION_FAILED); - } + filter->Initialize(source, + NewCallback(this, &PipelineInternal::OnFilterInitialize)); } void PipelineInternal::CreateDataSource() { |