Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(899)

Unified Diff: media/base/pipeline_impl.cc

Issue 6625059: Implementing preload=metadata for video (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix indent Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/pipeline_impl.h ('k') | media/filters/adaptive_demuxer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/pipeline_impl.cc
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index 7f5f3f3520e001a333450daf4aae202e2395b5da..2555bd7a6e028422aaf332407b3efc7572351ff7 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();
}
« no previous file with comments | « media/base/pipeline_impl.h ('k') | media/filters/adaptive_demuxer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698