diff options
author | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-23 21:28:59 +0000 |
---|---|---|
committer | acolwell@chromium.org <acolwell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-23 21:28:59 +0000 |
commit | d82b18ae3cf1a5976e85f773e9212431e46146cb (patch) | |
tree | 7547c63a852a7e9164985fedd9de7622a59234a5 /media/base/pipeline_impl.cc | |
parent | 238ca86df5ced41e7de04492fb547259803a93a4 (diff) | |
download | chromium_src-d82b18ae3cf1a5976e85f773e9212431e46146cb.zip chromium_src-d82b18ae3cf1a5976e85f773e9212431e46146cb.tar.gz chromium_src-d82b18ae3cf1a5976e85f773e9212431e46146cb.tar.bz2 |
Build a raw video pipeline for the <video> with a special src attribute (media://...).
The raw video pipeline graph only has two filters - one pass-thru decoder filter and one renderer filter.
Contributed by ronghuawu@google.com
Original code reviews:
http://codereview.chromium.org/6658001/ (pipeline changes)
http://codereview.chromium.org/6621049/ (pass-thru filter)
BUG=none
TEST=media_unittests
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=79149
Review URL: http://codereview.chromium.org/6726006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79185 0039d316-1c4b-4281-b951-d872f2087c98
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); |