Chromium Code Reviews| Index: media/base/pipeline.cc |
| diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc |
| index 94817aa9ed1033ce8515a05c5b15dd8b9d9fe4b6..331bc66ea7e83a3346dac550522bfa7648bc079e 100644 |
| --- a/media/base/pipeline.cc |
| +++ b/media/base/pipeline.cc |
| @@ -63,7 +63,6 @@ media::PipelineStatus PipelineStatusNotification::status() { |
| struct Pipeline::PipelineInitState { |
|
Ami GONE FROM CHROMIUM
2012/08/09 20:30:18
drop this struct now (and bind the audio decoder i
acolwell GONE FROM CHROMIUM
2012/08/09 22:23:32
I can't really do this w/o moving the kInitAudioDe
|
| scoped_refptr<AudioDecoder> audio_decoder; |
| - scoped_refptr<VideoDecoder> video_decoder; |
| }; |
| Pipeline::Pipeline(MessageLoop* message_loop, MediaLog* media_log) |
| @@ -609,14 +608,8 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| if (last_stage_status != PIPELINE_OK) { |
| - // Currently only VideoDecoders have a recoverable error code. |
| - if (state_ == kInitVideoDecoder && |
| - last_stage_status == DECODER_ERROR_NOT_SUPPORTED) { |
| - state_ = kInitAudioRenderer; |
| - } else { |
| - SetError(last_stage_status); |
| - return; |
| - } |
| + SetError(last_stage_status); |
| + return; |
| } |
| // If we have received the stop or error signal, return immediately. |
| @@ -626,7 +619,6 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) { |
| DCHECK(state_ == kInitDemuxer || |
| state_ == kInitAudioDecoder || |
| state_ == kInitAudioRenderer || |
| - state_ == kInitVideoDecoder || |
| state_ == kInitVideoRenderer); |
| // Demuxer created, create audio decoder. |
| @@ -651,16 +643,8 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) { |
| // Assuming audio renderer was created, create video decoder. |
|
Ami GONE FROM CHROMIUM
2012/08/09 20:30:18
s/decoder/renderer/
acolwell GONE FROM CHROMIUM
2012/08/09 22:23:32
Done.
|
| if (state_ == kInitAudioRenderer) { |
| - // Then perform the stage of initialization, i.e. initialize video decoder. |
| - SetState(kInitVideoDecoder); |
| - if (InitializeVideoDecoder(demuxer_)) |
| - return; |
| - } |
| - |
| - // Assuming video decoder was created, create video renderer. |
| - if (state_ == kInitVideoDecoder) { |
| SetState(kInitVideoRenderer); |
| - if (InitializeVideoRenderer(pipeline_init_state_->video_decoder)) { |
| + if (InitializeVideoRenderer(demuxer_->GetStream(DemuxerStream::VIDEO))) { |
| base::AutoLock auto_lock(lock_); |
| has_video_ = true; |
| return; |
| @@ -704,10 +688,8 @@ void Pipeline::StopTask(const base::Closure& stop_cb) { |
| DCHECK(!IsPipelineStopPending()); |
| DCHECK_NE(state_, kStopped); |
| - if (video_decoder_) { |
| - video_decoder_->PrepareForShutdownHack(); |
| - video_decoder_ = NULL; |
| - } |
| + if (video_renderer_) |
| + video_renderer_->PrepareForShutdownHack(); |
| if (IsPipelineTearingDown() && error_caused_teardown_) { |
| // If we are stopping due to SetError(), stop normally instead of |
| @@ -985,7 +967,6 @@ void Pipeline::TeardownStateTransitionTask() { |
| case kInitDemuxer: |
| case kInitAudioDecoder: |
| case kInitAudioRenderer: |
| - case kInitVideoDecoder: |
| case kInitVideoRenderer: |
| case kSeeking: |
| case kStarting: |
| @@ -1086,34 +1067,6 @@ bool Pipeline::InitializeAudioDecoder( |
| return true; |
| } |
| -bool Pipeline::InitializeVideoDecoder( |
| - const scoped_refptr<Demuxer>& demuxer) { |
| - DCHECK(message_loop_->BelongsToCurrentThread()); |
| - DCHECK(IsPipelineOk()); |
| - DCHECK(demuxer); |
| - |
| - scoped_refptr<DemuxerStream> stream = |
| - demuxer->GetStream(DemuxerStream::VIDEO); |
| - |
| - if (!stream) |
| - return false; |
| - |
| - filter_collection_->SelectVideoDecoder(&pipeline_init_state_->video_decoder); |
| - |
| - if (!pipeline_init_state_->video_decoder) { |
| - SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING); |
| - return false; |
| - } |
| - |
| - pipeline_init_state_->video_decoder->Initialize( |
| - stream, |
| - base::Bind(&Pipeline::OnFilterInitialize, this), |
| - base::Bind(&Pipeline::OnUpdateStatistics, this)); |
| - |
| - video_decoder_ = pipeline_init_state_->video_decoder; |
| - return true; |
| -} |
| - |
| bool Pipeline::InitializeAudioRenderer( |
| const scoped_refptr<AudioDecoder>& decoder) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| @@ -1140,11 +1093,11 @@ bool Pipeline::InitializeAudioRenderer( |
| } |
| bool Pipeline::InitializeVideoRenderer( |
| - const scoped_refptr<VideoDecoder>& decoder) { |
| + const scoped_refptr<DemuxerStream>& stream) { |
| DCHECK(message_loop_->BelongsToCurrentThread()); |
| DCHECK(IsPipelineOk()); |
| - if (!decoder) |
| + if (!stream) |
| return false; |
| filter_collection_->SelectVideoRenderer(&video_renderer_); |
| @@ -1154,7 +1107,8 @@ bool Pipeline::InitializeVideoRenderer( |
| } |
| video_renderer_->Initialize( |
| - decoder, |
| + stream, |
| + filter_collection_->GetVideoDecoders(), |
| base::Bind(&Pipeline::OnFilterInitialize, this), |
| base::Bind(&Pipeline::OnUpdateStatistics, this), |
| base::Bind(&Pipeline::OnVideoTimeUpdate, this), |
| @@ -1163,6 +1117,7 @@ bool Pipeline::InitializeVideoRenderer( |
| base::Bind(&Pipeline::SetError, this), |
| base::Bind(&Pipeline::GetMediaTime, this), |
| base::Bind(&Pipeline::GetMediaDuration, this)); |
| + filter_collection_->GetVideoDecoders().clear(); |
| return true; |
| } |
| @@ -1193,7 +1148,6 @@ void Pipeline::TearDownPipeline() { |
| case kInitDemuxer: |
| case kInitAudioDecoder: |
| case kInitAudioRenderer: |
| - case kInitVideoDecoder: |
| case kInitVideoRenderer: |
| // Make it look like initialization was successful. |
| filter_collection_.reset(); |