| Index: media/base/pipeline_impl.cc
|
| diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
|
| index d7ad574b3ad02c19d212960691e2d40a32bb5d5a..2bd4f31e1a15d6fbaff8691b1af2b4b6d624f1a7 100644
|
| --- a/media/base/pipeline_impl.cc
|
| +++ b/media/base/pipeline_impl.cc
|
| @@ -9,6 +9,7 @@
|
|
|
| #include <algorithm>
|
|
|
| +#include "base/bind.h"
|
| #include "base/callback.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/stl_util-inl.h"
|
| @@ -575,6 +576,19 @@ void PipelineImpl::OnFilterStateTransition() {
|
| NewRunnableMethod(this, &PipelineImpl::FilterStateTransitionTask));
|
| }
|
|
|
| +// Called from any thread.
|
| +// This method makes the FilterStatusCB behave like a FilterCallback. It
|
| +// makes it look like a host()->SetError() call followed by a call to
|
| +// OnFilterStateTransition() when errors occur.
|
| +//
|
| +// TODO: Revisit this code when SetError() is removed from FilterHost and
|
| +// all the FilterCallbacks are converted to FilterStatusCB.
|
| +void PipelineImpl::OnFilterStateTransitionWithStatus(PipelineStatus status) {
|
| + if (status != PIPELINE_OK)
|
| + SetError(status);
|
| + OnFilterStateTransition();
|
| +}
|
| +
|
| void PipelineImpl::OnTeardownStateTransition() {
|
| message_loop_->PostTask(FROM_HERE,
|
| NewRunnableMethod(this, &PipelineImpl::TeardownStateTransitionTask));
|
| @@ -710,8 +724,9 @@ void PipelineImpl::InitializeTask() {
|
| seek_pending_ = true;
|
| set_state(kSeeking);
|
| seek_timestamp_ = base::TimeDelta();
|
| - pipeline_filter_->Seek(seek_timestamp_,
|
| - NewCallback(this, &PipelineImpl::OnFilterStateTransition));
|
| + pipeline_filter_->Seek(
|
| + seek_timestamp_,
|
| + base::Bind(&PipelineImpl::OnFilterStateTransitionWithStatus, this));
|
| }
|
| }
|
|
|
| @@ -952,7 +967,7 @@ void PipelineImpl::FilterStateTransitionTask() {
|
| NewCallback(this, &PipelineImpl::OnFilterStateTransition));
|
| } else if (state_ == kSeeking) {
|
| pipeline_filter_->Seek(seek_timestamp_,
|
| - NewCallback(this, &PipelineImpl::OnFilterStateTransition));
|
| + base::Bind(&PipelineImpl::OnFilterStateTransitionWithStatus, this));
|
| } else if (state_ == kStarting) {
|
| pipeline_filter_->Play(
|
| NewCallback(this, &PipelineImpl::OnFilterStateTransition));
|
|
|