| Index: media/base/pipeline.cc
|
| diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
|
| index 462c44dd57d04e027f6b589554f16d9d5d39724d..de94d0be0677ab76c97b0affa2a9559fa4f233d1 100644
|
| --- a/media/base/pipeline.cc
|
| +++ b/media/base/pipeline.cc
|
| @@ -63,7 +63,6 @@ media::PipelineStatus PipelineStatusNotification::status() {
|
|
|
| struct Pipeline::PipelineInitState {
|
| scoped_refptr<AudioDecoder> audio_decoder;
|
| - scoped_refptr<VideoDecoder> video_decoder;
|
| };
|
|
|
| Pipeline::Pipeline(MessageLoop* message_loop, MediaLog* media_log)
|
| @@ -584,14 +583,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.
|
| @@ -601,7 +594,6 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
|
| DCHECK(state_ == kInitDemuxer ||
|
| state_ == kInitAudioDecoder ||
|
| state_ == kInitAudioRenderer ||
|
| - state_ == kInitVideoDecoder ||
|
| state_ == kInitVideoRenderer);
|
|
|
| // Demuxer created, create audio decoder.
|
| @@ -624,18 +616,10 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
|
| }
|
| }
|
|
|
| - // Assuming audio renderer was created, create video decoder.
|
| + // Assuming audio renderer was created, create video renderer.
|
| 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;
|
| @@ -683,10 +667,8 @@ void Pipeline::StopTask(const base::Closure& stop_cb) {
|
| return;
|
| }
|
|
|
| - if (video_decoder_) {
|
| - video_decoder_->PrepareForShutdownHack();
|
| - video_decoder_ = NULL;
|
| - }
|
| + if (video_renderer_)
|
| + video_renderer_->PrepareForShutdownHack();
|
|
|
| if (tearing_down_ && status_ != PIPELINE_OK) {
|
| // If we are stopping due to SetError(), stop normally instead of
|
| @@ -970,7 +952,6 @@ void Pipeline::TeardownStateTransitionTask() {
|
| case kInitDemuxer:
|
| case kInitAudioDecoder:
|
| case kInitAudioRenderer:
|
| - case kInitVideoDecoder:
|
| case kInitVideoRenderer:
|
| case kSeeking:
|
| case kStarting:
|
| @@ -1064,34 +1045,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());
|
| @@ -1118,11 +1071,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_);
|
| @@ -1132,7 +1085,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),
|
| @@ -1141,6 +1095,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;
|
| }
|
|
|
| @@ -1174,7 +1129,6 @@ void Pipeline::TearDownPipeline() {
|
| case kInitDemuxer:
|
| case kInitAudioDecoder:
|
| case kInitAudioRenderer:
|
| - case kInitVideoDecoder:
|
| case kInitVideoRenderer:
|
| // Make it look like initialization was successful.
|
| filter_collection_.reset();
|
|
|