Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1037)

Unified Diff: media/base/pipeline_impl.cc

Issue 5362003: Stopgap fix for crash in issue 53867 comment 15 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/pipeline_impl.h ('k') | webkit/glue/webmediaplayer_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « media/base/pipeline_impl.h ('k') | webkit/glue/webmediaplayer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698