Index: media/base/pipeline_impl.cc |
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc |
index c53044fda223d96b4fc03a7bbdc33bddb9015850..64438a902d6ff6ddf6a7bf80af7d1fb2e5c0ffc1 100644 |
--- a/media/base/pipeline_impl.cc |
+++ b/media/base/pipeline_impl.cc |
@@ -937,7 +937,7 @@ void PipelineImpl::FinishDestroyingFiltersTask() { |
} |
} |
-void PipelineImpl::PrepareFilter(scoped_refptr<MediaFilter> filter) { |
+bool PipelineImpl::PrepareFilter(scoped_refptr<MediaFilter> filter) { |
DCHECK_EQ(MessageLoop::current(), message_loop_); |
DCHECK(IsPipelineOk()); |
@@ -948,7 +948,7 @@ void PipelineImpl::PrepareFilter(scoped_refptr<MediaFilter> filter) { |
if (!thread.get() || !thread->Start()) { |
NOTREACHED() << "Could not start filter thread"; |
SetError(PIPELINE_ERROR_INITIALIZATION_FAILED); |
- return; |
+ return false; |
} |
filter->set_message_loop(thread->message_loop()); |
@@ -959,6 +959,7 @@ void PipelineImpl::PrepareFilter(scoped_refptr<MediaFilter> filter) { |
DCHECK(IsPipelineOk()); |
filter->set_host(this); |
filters_.push_back(make_scoped_refptr(filter.get())); |
+ return true; |
} |
void PipelineImpl::InitializeDataSource() { |
@@ -977,7 +978,10 @@ void PipelineImpl::InitializeDataSource() { |
return; |
} |
- PrepareFilter(data_source); |
+ if (!PrepareFilter(data_source)) { |
+ return; |
+ } |
+ |
pipeline_init_state_->data_source_ = data_source; |
data_source->Initialize( |
url_, NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
@@ -998,7 +1002,10 @@ void PipelineImpl::InitializeDemuxer( |
return; |
} |
- PrepareFilter(demuxer); |
+ if (!PrepareFilter(demuxer)) { |
+ return; |
+ } |
+ |
pipeline_init_state_->demuxer_ = demuxer; |
demuxer->Initialize(data_source, |
NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
@@ -1012,23 +1019,25 @@ bool PipelineImpl::InitializeAudioDecoder( |
scoped_refptr<DemuxerStream> stream = |
FindDemuxerStream(demuxer, mime_type::kMajorTypeAudio); |
- if (stream) { |
- scoped_refptr<AudioDecoder> audio_decoder; |
- filter_collection_->SelectAudioDecoder(&audio_decoder); |
+ if (!stream) |
+ return false; |
- if (audio_decoder) { |
- PrepareFilter(audio_decoder); |
- pipeline_init_state_->audio_decoder_ = audio_decoder; |
- audio_decoder->Initialize( |
- stream, |
- NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
- return true; |
- } else { |
- SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
- } |
+ scoped_refptr<AudioDecoder> audio_decoder; |
+ filter_collection_->SelectAudioDecoder(&audio_decoder); |
+ |
+ if (!audio_decoder) { |
+ SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
+ return false; |
} |
- return false; |
+ if (!PrepareFilter(audio_decoder)) |
+ return false; |
+ |
+ pipeline_init_state_->audio_decoder_ = audio_decoder; |
+ audio_decoder->Initialize( |
+ stream, |
+ NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
+ return true; |
} |
bool PipelineImpl::InitializeVideoDecoder( |
@@ -1039,22 +1048,25 @@ bool PipelineImpl::InitializeVideoDecoder( |
scoped_refptr<DemuxerStream> stream = |
FindDemuxerStream(demuxer, mime_type::kMajorTypeVideo); |
- if (stream) { |
- scoped_refptr<VideoDecoder> video_decoder; |
- filter_collection_->SelectVideoDecoder(&video_decoder); |
+ if (!stream) |
+ return false; |
- if (video_decoder) { |
- PrepareFilter(video_decoder); |
- pipeline_init_state_->video_decoder_ = video_decoder; |
- video_decoder->Initialize( |
- stream, |
- NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
- return true; |
- } else { |
- SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
- } |
+ scoped_refptr<VideoDecoder> video_decoder; |
+ filter_collection_->SelectVideoDecoder(&video_decoder); |
+ |
+ if (!video_decoder) { |
+ SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
+ return false; |
} |
- return false; |
+ |
+ if (!PrepareFilter(video_decoder)) |
+ return false; |
+ |
+ pipeline_init_state_->video_decoder_ = video_decoder; |
+ video_decoder->Initialize( |
+ stream, |
+ NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
+ return true; |
} |
bool PipelineImpl::InitializeAudioRenderer( |
@@ -1062,19 +1074,21 @@ bool PipelineImpl::InitializeAudioRenderer( |
DCHECK_EQ(MessageLoop::current(), message_loop_); |
DCHECK(IsPipelineOk()); |
- if (decoder) { |
- filter_collection_->SelectAudioRenderer(&audio_renderer_); |
+ if (!decoder) |
+ return false; |
- if (audio_renderer_) { |
- PrepareFilter(audio_renderer_); |
- audio_renderer_->Initialize( |
- decoder, NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
- return true; |
- } else { |
- SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
- } |
+ filter_collection_->SelectAudioRenderer(&audio_renderer_); |
+ if (!audio_renderer_) { |
+ SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
+ return false; |
} |
- return false; |
+ |
+ if (!PrepareFilter(audio_renderer_)) |
+ return false; |
+ |
+ audio_renderer_->Initialize( |
+ decoder, NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
+ return true; |
} |
bool PipelineImpl::InitializeVideoRenderer( |
@@ -1082,19 +1096,21 @@ bool PipelineImpl::InitializeVideoRenderer( |
DCHECK_EQ(MessageLoop::current(), message_loop_); |
DCHECK(IsPipelineOk()); |
- if (decoder) { |
- filter_collection_->SelectVideoRenderer(&video_renderer_); |
+ if (!decoder) |
+ return false; |
- if (video_renderer_) { |
- PrepareFilter(video_renderer_); |
- video_renderer_->Initialize( |
- decoder, NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
- return true; |
- } else { |
- SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
- } |
+ filter_collection_->SelectVideoRenderer(&video_renderer_); |
+ if (!video_renderer_) { |
+ SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
+ return false; |
} |
- return false; |
+ |
+ if (!PrepareFilter(video_renderer_)) |
+ return false; |
+ |
+ video_renderer_->Initialize( |
+ decoder, NewCallback(this, &PipelineImpl::OnFilterInitialize)); |
+ return true; |
} |
scoped_refptr<DemuxerStream> PipelineImpl::FindDemuxerStream( |