| Index: media/base/pipeline.cc
|
| diff --git a/media/base/pipeline.cc b/media/base/pipeline.cc
|
| index 10007478ba276fdafb649265f4e355c27e63336e..4db2cc9a7697eb9a425098a4b4f3a9aeada9b658 100644
|
| --- a/media/base/pipeline.cc
|
| +++ b/media/base/pipeline.cc
|
| @@ -19,7 +19,6 @@
|
| #include "media/base/audio_renderer.h"
|
| #include "media/base/callback_util.h"
|
| #include "media/base/clock.h"
|
| -#include "media/base/composite_filter.h"
|
| #include "media/base/filter_collection.h"
|
| #include "media/base/media_log.h"
|
| #include "media/base/video_decoder.h"
|
| @@ -65,8 +64,6 @@ media::PipelineStatus PipelineStatusNotification::status() {
|
| struct Pipeline::PipelineInitState {
|
| scoped_refptr<AudioDecoder> audio_decoder;
|
| scoped_refptr<VideoDecoder> video_decoder;
|
| - scoped_refptr<VideoRenderer> video_renderer;
|
| - scoped_refptr<CompositeFilter> composite;
|
| };
|
|
|
| Pipeline::Pipeline(MessageLoop* message_loop, MediaLog* media_log)
|
| @@ -189,13 +186,8 @@ void Pipeline::SetVolume(float volume) {
|
| }
|
| }
|
|
|
| -TimeDelta Pipeline::GetCurrentTime() const {
|
| +TimeDelta Pipeline::GetMediaTime() const {
|
| base::AutoLock auto_lock(lock_);
|
| - return GetCurrentTime_Locked();
|
| -}
|
| -
|
| -TimeDelta Pipeline::GetCurrentTime_Locked() const {
|
| - lock_.AssertAcquired();
|
| return clock_->Elapsed();
|
| }
|
|
|
| @@ -381,16 +373,6 @@ void Pipeline::SetError(PipelineStatus error) {
|
| media_log_->AddEvent(media_log_->CreatePipelineErrorEvent(error));
|
| }
|
|
|
| -TimeDelta Pipeline::GetTime() const {
|
| - DCHECK(IsRunning());
|
| - return GetCurrentTime();
|
| -}
|
| -
|
| -TimeDelta Pipeline::GetDuration() const {
|
| - DCHECK(IsRunning());
|
| - return GetMediaDuration();
|
| -}
|
| -
|
| void Pipeline::OnAudioDisabled() {
|
| DCHECK(IsRunning());
|
| message_loop_->PostTask(FROM_HERE, base::Bind(
|
| @@ -476,8 +458,8 @@ void Pipeline::DoPause(const base::Closure& done_cb) {
|
| if (audio_renderer_)
|
| closures->push(base::Bind(&AudioRenderer::Pause, audio_renderer_));
|
|
|
| - if (pipeline_filter_)
|
| - closures->push(base::Bind(&Filter::Pause, pipeline_filter_));
|
| + if (video_renderer_)
|
| + closures->push(base::Bind(&VideoRenderer::Pause, video_renderer_));
|
|
|
| RunInSeries(closures.Pass(), done_cb);
|
| }
|
| @@ -489,8 +471,8 @@ void Pipeline::DoFlush(const base::Closure& done_cb) {
|
| if (audio_renderer_)
|
| closures->push(base::Bind(&AudioRenderer::Flush, audio_renderer_));
|
|
|
| - if (pipeline_filter_)
|
| - closures->push(base::Bind(&Filter::Flush, pipeline_filter_));
|
| + if (video_renderer_)
|
| + closures->push(base::Bind(&VideoRenderer::Flush, video_renderer_));
|
|
|
| RunInParallel(closures.Pass(), done_cb);
|
| }
|
| @@ -502,8 +484,8 @@ void Pipeline::DoPlay(const base::Closure& done_cb) {
|
| if (audio_renderer_)
|
| closures->push(base::Bind(&AudioRenderer::Play, audio_renderer_));
|
|
|
| - if (pipeline_filter_)
|
| - closures->push(base::Bind(&Filter::Play, pipeline_filter_));
|
| + if (video_renderer_)
|
| + closures->push(base::Bind(&VideoRenderer::Play, video_renderer_));
|
|
|
| RunInSeries(closures.Pass(), done_cb);
|
| }
|
| @@ -518,8 +500,8 @@ void Pipeline::DoStop(const base::Closure& done_cb) {
|
| if (audio_renderer_)
|
| closures->push(base::Bind(&AudioRenderer::Stop, audio_renderer_));
|
|
|
| - if (pipeline_filter_)
|
| - closures->push(base::Bind(&Filter::Stop, pipeline_filter_));
|
| + if (video_renderer_)
|
| + closures->push(base::Bind(&VideoRenderer::Stop, video_renderer_));
|
|
|
| RunInSeries(closures.Pass(), done_cb);
|
| }
|
| @@ -539,7 +521,7 @@ void Pipeline::AddBufferedTimeRange(base::TimeDelta start,
|
| did_loading_progress_ = true;
|
| }
|
|
|
| -void Pipeline::SetNaturalVideoSize(const gfx::Size& size) {
|
| +void Pipeline::OnNaturalVideoSizeChanged(const gfx::Size& size) {
|
| DCHECK(IsRunning());
|
| media_log_->AddEvent(media_log_->CreateVideoSizeSetEvent(
|
| size.width(), size.height()));
|
| @@ -548,10 +530,10 @@ void Pipeline::SetNaturalVideoSize(const gfx::Size& size) {
|
| natural_size_ = size;
|
| }
|
|
|
| -void Pipeline::NotifyEnded() {
|
| +void Pipeline::OnRendererEnded() {
|
| DCHECK(IsRunning());
|
| message_loop_->PostTask(FROM_HERE, base::Bind(
|
| - &Pipeline::NotifyEndedTask, this));
|
| + &Pipeline::OnRendererEndedTask, this));
|
| media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::ENDED));
|
| }
|
|
|
| @@ -608,8 +590,6 @@ void Pipeline::StartTask(scoped_ptr<FilterCollection> filter_collection,
|
|
|
| // Kick off initialization.
|
| pipeline_init_state_.reset(new PipelineInitState());
|
| - pipeline_init_state_->composite = new CompositeFilter(message_loop_);
|
| - pipeline_init_state_->composite->SetHost(this);
|
|
|
| SetState(kInitDemuxer);
|
| InitializeDemuxer();
|
| @@ -699,12 +679,8 @@ void Pipeline::InitializeTask(PipelineStatus last_stage_status) {
|
| return;
|
| }
|
|
|
| - // Clear the collection of filters.
|
| - filter_collection_->Clear();
|
| -
|
| - pipeline_filter_ = pipeline_init_state_->composite;
|
| -
|
| - // Clear init state since we're done initializing.
|
| + // Clear initialization state now that we're done.
|
| + filter_collection_.reset();
|
| pipeline_init_state_.reset();
|
|
|
| // Initialization was successful, we are now considered paused, so it's safe
|
| @@ -803,16 +779,14 @@ void Pipeline::PlaybackRateChangedTask(float playback_rate) {
|
| clock_->SetPlaybackRate(playback_rate);
|
| }
|
|
|
| - // Notify |pipeline_filter_| if it has been initialized. If initialization
|
| - // hasn't completed yet, the playback rate will be set when initialization
|
| - // completes.
|
| - if (pipeline_filter_) {
|
| + // These will get set after initialization completes in case playback rate is
|
| + // set prior to initialization.
|
| + if (demuxer_)
|
| demuxer_->SetPlaybackRate(playback_rate);
|
| - pipeline_filter_->SetPlaybackRate(playback_rate);
|
| -
|
| - if (audio_renderer_)
|
| - audio_renderer_->SetPlaybackRate(playback_rate_);
|
| - }
|
| + if (audio_renderer_)
|
| + audio_renderer_->SetPlaybackRate(playback_rate_);
|
| + if (video_renderer_)
|
| + video_renderer_->SetPlaybackRate(playback_rate_);
|
| }
|
|
|
| void Pipeline::VolumeChangedTask(float volume) {
|
| @@ -860,7 +834,7 @@ void Pipeline::SeekTask(TimeDelta time, const PipelineStatusCB& seek_cb) {
|
| DoPause(base::Bind(&Pipeline::OnFilterStateTransition, this));
|
| }
|
|
|
| -void Pipeline::NotifyEndedTask() {
|
| +void Pipeline::OnRendererEndedTask() {
|
| DCHECK(message_loop_->BelongsToCurrentThread());
|
|
|
| // We can only end if we were actually playing.
|
| @@ -1027,13 +1001,10 @@ void Pipeline::FinishDestroyingFiltersTask() {
|
| DCHECK(message_loop_->BelongsToCurrentThread());
|
| DCHECK(IsPipelineStopped());
|
|
|
| - // Clear filter references.
|
| audio_renderer_ = NULL;
|
| video_renderer_ = NULL;
|
| demuxer_ = NULL;
|
|
|
| - pipeline_filter_ = NULL;
|
| -
|
| if (error_caused_teardown_ && !IsPipelineOk() && !error_cb_.is_null())
|
| error_cb_.Run(status_);
|
|
|
| @@ -1156,7 +1127,7 @@ bool Pipeline::InitializeAudioRenderer(
|
| base::Bind(&Pipeline::OnFilterInitialize, this),
|
| base::Bind(&Pipeline::OnAudioUnderflow, this),
|
| base::Bind(&Pipeline::OnAudioTimeUpdate, this),
|
| - base::Bind(&Pipeline::NotifyEnded, this),
|
| + base::Bind(&Pipeline::OnRendererEnded, this),
|
| base::Bind(&Pipeline::OnAudioDisabled, this),
|
| base::Bind(&Pipeline::SetError, this));
|
| return true;
|
| @@ -1170,23 +1141,22 @@ bool Pipeline::InitializeVideoRenderer(
|
| if (!decoder)
|
| return false;
|
|
|
| - filter_collection_->SelectVideoRenderer(
|
| - &pipeline_init_state_->video_renderer);
|
| - if (!pipeline_init_state_->video_renderer) {
|
| + filter_collection_->SelectVideoRenderer(&video_renderer_);
|
| + if (!video_renderer_) {
|
| SetError(PIPELINE_ERROR_REQUIRED_FILTER_MISSING);
|
| return false;
|
| }
|
|
|
| - pipeline_init_state_->composite->AddFilter(
|
| - pipeline_init_state_->video_renderer);
|
| -
|
| - pipeline_init_state_->video_renderer->Initialize(
|
| + video_renderer_->Initialize(
|
| decoder,
|
| base::Bind(&Pipeline::OnFilterInitialize, this),
|
| base::Bind(&Pipeline::OnUpdateStatistics, this),
|
| - base::Bind(&Pipeline::OnVideoTimeUpdate, this));
|
| -
|
| - video_renderer_ = pipeline_init_state_->video_renderer;
|
| + base::Bind(&Pipeline::OnVideoTimeUpdate, this),
|
| + base::Bind(&Pipeline::OnNaturalVideoSizeChanged, this),
|
| + base::Bind(&Pipeline::OnRendererEnded, this),
|
| + base::Bind(&Pipeline::SetError, this),
|
| + base::Bind(&Pipeline::GetMediaTime, this),
|
| + base::Bind(&Pipeline::GetMediaDuration, this));
|
| return true;
|
| }
|
|
|
| @@ -1217,9 +1187,8 @@ void Pipeline::TearDownPipeline() {
|
| case kInitVideoDecoder:
|
| case kInitVideoRenderer:
|
| // Make it look like initialization was successful.
|
| - pipeline_filter_ = pipeline_init_state_->composite;
|
| - pipeline_init_state_.reset();
|
| filter_collection_.reset();
|
| + pipeline_init_state_.reset();
|
|
|
| SetState(kStopping);
|
| DoStop(base::Bind(&Pipeline::OnTeardownStateTransition, this));
|
| @@ -1270,9 +1239,9 @@ void Pipeline::DoSeek(base::TimeDelta seek_timestamp,
|
| status_cbs->push(base::Bind(
|
| &AudioRenderer::Seek, audio_renderer_, seek_timestamp));
|
|
|
| - if (pipeline_filter_)
|
| + if (video_renderer_)
|
| status_cbs->push(base::Bind(
|
| - &Filter::Seek, pipeline_filter_, seek_timestamp));
|
| + &VideoRenderer::Seek, video_renderer_, seek_timestamp));
|
|
|
| RunInSeriesWithStatus(status_cbs.Pass(), base::Bind(
|
| &Pipeline::ReportStatus, this, done_cb));
|
|
|