diff options
Diffstat (limited to 'media/base/pipeline_impl.cc')
-rw-r--r-- | media/base/pipeline_impl.cc | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index 2b66661..7f5f3f3 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc @@ -5,14 +5,18 @@ // TODO(scherkus): clean up PipelineImpl... too many crazy function names, // potential deadlocks, etc... +#include "media/base/pipeline_impl.h" + +#include <algorithm> + #include "base/callback.h" #include "base/compiler_specific.h" #include "base/stl_util-inl.h" #include "base/synchronization/condition_variable.h" +#include "media/filters/rtc_video_decoder.h" #include "media/base/clock.h" #include "media/base/filter_collection.h" #include "media/base/media_format.h" -#include "media/base/pipeline_impl.h" namespace media { @@ -578,12 +582,17 @@ void PipelineImpl::StartTask(FilterCollection* filter_collection, seek_callback_.reset(start_callback); // Kick off initialization. - set_state(kInitDemuxer); pipeline_init_state_.reset(new PipelineInitState()); pipeline_init_state_->composite_ = new CompositeFilter(message_loop_); pipeline_init_state_->composite_->set_host(this); - InitializeDemuxer(); + if (RTCVideoDecoder::IsUrlSupported(url)) { + set_state(kInitVideoDecoder); + InitializeVideoDecoder(NULL); + } else { + set_state(kInitDemuxer); + InitializeDemuxer(); + } } // Main initialization method called on the pipeline thread. This code attempts @@ -914,7 +923,7 @@ void PipelineImpl::FilterStateTransitionTask() { NewCallback(this, &PipelineImpl::OnFilterStateTransition)); } else if (state_ == kStarting) { pipeline_filter_->Play( - NewCallback(this,&PipelineImpl::OnFilterStateTransition)); + NewCallback(this, &PipelineImpl::OnFilterStateTransition)); } else if (state_ == kStopping) { pipeline_filter_->Stop( NewCallback(this, &PipelineImpl::OnFilterStateTransition)); @@ -946,7 +955,7 @@ void PipelineImpl::FilterStateTransitionTask() { void PipelineImpl::TeardownStateTransitionTask() { DCHECK(IsPipelineTearingDown()); - switch(state_) { + switch (state_) { case kStopping: set_state(error_caused_teardown_ ? kError : kStopped); FinishDestroyingFiltersTask(); @@ -1087,11 +1096,14 @@ bool PipelineImpl::InitializeVideoDecoder( DCHECK_EQ(MessageLoop::current(), message_loop_); DCHECK(IsPipelineOk()); - scoped_refptr<DemuxerStream> stream = - demuxer->GetStream(DemuxerStream::VIDEO); + scoped_refptr<DemuxerStream> stream; - if (!stream) - return false; + if (demuxer) { + stream = demuxer->GetStream(DemuxerStream::VIDEO); + + if (!stream) + return false; + } scoped_refptr<VideoDecoder> video_decoder; filter_collection_->SelectVideoDecoder(&video_decoder); @@ -1169,7 +1181,7 @@ void PipelineImpl::TearDownPipeline() { // Mark that we already start tearing down operation. tearing_down_ = true; - switch(state_) { + switch (state_) { case kCreated: case kError: set_state(kStopped); |