diff options
author | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-05 16:28:20 +0000 |
---|---|---|
committer | vrk@google.com <vrk@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-05 16:28:20 +0000 |
commit | 23a8b1d8f4c8c3b3c37811f310891256f45c8063 (patch) | |
tree | 3576777d4ec689cbba94c172f92ee5ed1e3077f9 /media/base/pipeline_impl.cc | |
parent | 702b280dbaa67b88d0b07da22dc73f2f3116afee (diff) | |
download | chromium_src-23a8b1d8f4c8c3b3c37811f310891256f45c8063.zip chromium_src-23a8b1d8f4c8c3b3c37811f310891256f45c8063.tar.gz chromium_src-23a8b1d8f4c8c3b3c37811f310891256f45c8063.tar.bz2 |
Implementing preload=metadata for video
This patch implements the logic necessary to respect the preload attribute
when it is set to MetaData. This also refactors the BufferedResourceLoader
to determine its buffering techniques based on a DeferStrategy value.
BUG=16482,76555
TEST=media/video-preload.html, test_shell_tests
Review URL: http://codereview.chromium.org/6625059
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@80465 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, 27 insertions, 5 deletions
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc index 7f5f3f3..2555bd7 100644 --- a/media/base/pipeline_impl.cc +++ b/media/base/pipeline_impl.cc @@ -55,7 +55,6 @@ media::PipelineStatus PipelineStatusNotification::status() { class PipelineImpl::PipelineInitState { public: - scoped_refptr<Demuxer> demuxer_; scoped_refptr<AudioDecoder> audio_decoder_; scoped_refptr<VideoDecoder> video_decoder_; scoped_refptr<CompositeFilter> composite_; @@ -219,6 +218,21 @@ void PipelineImpl::SetVolume(float volume) { } } +Preload PipelineImpl::GetPreload() const { + base::AutoLock auto_lock(lock_); + return preload_; +} + +void PipelineImpl::SetPreload(Preload preload) { + base::AutoLock auto_lock(lock_); + preload_ = preload; + if (running_) { + message_loop_->PostTask(FROM_HERE, + NewRunnableMethod(this, &PipelineImpl::PreloadChangedTask, + preload)); + } +} + base::TimeDelta PipelineImpl::GetCurrentTime() const { // TODO(scherkus): perhaps replace checking state_ == kEnded with a bool that // is set/get under the lock, because this is breaching the contract that @@ -630,7 +644,7 @@ void PipelineImpl::InitializeTask() { if (state_ == kInitDemuxer) { set_state(kInitAudioDecoder); // If this method returns false, then there's no audio stream. - if (InitializeAudioDecoder(pipeline_init_state_->demuxer_)) + if (InitializeAudioDecoder(demuxer_)) return; } @@ -649,7 +663,7 @@ void PipelineImpl::InitializeTask() { if (state_ == kInitAudioRenderer) { // Then perform the stage of initialization, i.e. initialize video decoder. set_state(kInitVideoDecoder); - if (InitializeVideoDecoder(pipeline_init_state_->demuxer_)) + if (InitializeVideoDecoder(demuxer_)) return; } @@ -685,6 +699,7 @@ void PipelineImpl::InitializeTask() { // Initialization was successful, we are now considered paused, so it's safe // to set the initial playback rate and volume. + PreloadChangedTask(GetPreload()); PlaybackRateChangedTask(GetPlaybackRate()); VolumeChangedTask(GetVolume()); @@ -785,6 +800,12 @@ void PipelineImpl::VolumeChangedTask(float volume) { } } +void PipelineImpl::PreloadChangedTask(Preload preload) { + DCHECK_EQ(MessageLoop::current(), message_loop_); + if (demuxer_) + demuxer_->SetPreload(preload); +} + void PipelineImpl::SeekTask(base::TimeDelta time, PipelineStatusCallback* seek_callback) { DCHECK_EQ(MessageLoop::current(), message_loop_); @@ -994,9 +1015,10 @@ void PipelineImpl::FinishDestroyingFiltersTask() { DCHECK_EQ(MessageLoop::current(), message_loop_); DCHECK(IsPipelineStopped()); - // Clear renderer references. + // Clear filter references. audio_renderer_ = NULL; video_renderer_ = NULL; + demuxer_ = NULL; pipeline_filter_ = NULL; @@ -1057,7 +1079,7 @@ void PipelineImpl::OnDemuxerBuilt(PipelineStatus status, Demuxer* demuxer) { if (!PrepareFilter(demuxer)) return; - pipeline_init_state_->demuxer_ = demuxer; + demuxer_ = demuxer; OnFilterInitialize(); } |