| Index: media/base/pipeline_impl.cc
|
| diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
|
| index f021ad366251abfaae4927ccc25db203aba20b66..7ef051de0250ff3b38a0fde925a6a543a4d48d90 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() {
|
|
|