diff options
Diffstat (limited to 'chromium/media/base/pipeline_impl.cc')
-rw-r--r-- | chromium/media/base/pipeline_impl.cc | 73 |
1 files changed, 48 insertions, 25 deletions
diff --git a/chromium/media/base/pipeline_impl.cc b/chromium/media/base/pipeline_impl.cc index 81252cf1238..e1d7be53c5c 100644 --- a/chromium/media/base/pipeline_impl.cc +++ b/chromium/media/base/pipeline_impl.cc @@ -5,6 +5,7 @@ #include "media/base/pipeline_impl.h" #include <algorithm> +#include <utility> #include "base/bind.h" #include "base/bind_helpers.h" @@ -144,6 +145,7 @@ class PipelineImpl::RendererWrapper : public DemuxerHost, void OnVideoConfigChange(const VideoDecoderConfig& config) final; void OnVideoNaturalSizeChange(const gfx::Size& size) final; void OnVideoOpacityChange(bool opaque) final; + void OnVideoFrameRateChange(base::Optional<int> fps) final; // Common handlers for notifications from renderers and demuxer. void OnPipelineError(PipelineStatus error); @@ -297,8 +299,8 @@ void PipelineImpl::RendererWrapper::Start( // Run tasks. pending_callbacks_ = SerialRunner::Run( std::move(fns), - base::BindRepeating(&RendererWrapper::CompleteSeek, - weak_factory_.GetWeakPtr(), base::TimeDelta())); + base::BindOnce(&RendererWrapper::CompleteSeek, weak_factory_.GetWeakPtr(), + base::TimeDelta())); } void PipelineImpl::RendererWrapper::Stop() { @@ -370,8 +372,8 @@ void PipelineImpl::RendererWrapper::Seek(base::TimeDelta time) { // Run tasks. pending_callbacks_ = SerialRunner::Run( std::move(bound_fns), - base::BindRepeating(&RendererWrapper::CompleteSeek, - weak_factory_.GetWeakPtr(), seek_timestamp)); + base::BindOnce(&RendererWrapper::CompleteSeek, weak_factory_.GetWeakPtr(), + seek_timestamp)); } void PipelineImpl::RendererWrapper::Suspend() { @@ -402,8 +404,8 @@ void PipelineImpl::RendererWrapper::Suspend() { // No need to flush the renderer since it's going to be destroyed. pending_callbacks_ = SerialRunner::Run( - std::move(fns), base::BindRepeating(&RendererWrapper::CompleteSuspend, - weak_factory_.GetWeakPtr())); + std::move(fns), base::BindOnce(&RendererWrapper::CompleteSuspend, + weak_factory_.GetWeakPtr())); } void PipelineImpl::RendererWrapper::Resume( @@ -436,8 +438,8 @@ void PipelineImpl::RendererWrapper::Resume( // Queue the asynchronous actions required to start playback. SerialRunner::Queue fns; - fns.Push(base::BindRepeating(&Demuxer::Seek, base::Unretained(demuxer_), - start_timestamp)); + fns.Push(base::BindOnce(&Demuxer::Seek, base::Unretained(demuxer_), + start_timestamp)); fns.Push(base::BindOnce(&RendererWrapper::CreateRenderer, weak_factory_.GetWeakPtr())); @@ -447,8 +449,8 @@ void PipelineImpl::RendererWrapper::Resume( pending_callbacks_ = SerialRunner::Run( std::move(fns), - base::BindRepeating(&RendererWrapper::CompleteSeek, - weak_factory_.GetWeakPtr(), start_timestamp)); + base::BindOnce(&RendererWrapper::CompleteSeek, weak_factory_.GetWeakPtr(), + start_timestamp)); } void PipelineImpl::RendererWrapper::SetPlaybackRate(double playback_rate) { @@ -580,8 +582,7 @@ void PipelineImpl::RendererWrapper::OnBufferedTimeRangesChanged( void PipelineImpl::RendererWrapper::SetDuration(base::TimeDelta duration) { // TODO(alokp): Add thread DCHECK after ensuring that all Demuxer // implementations call DemuxerHost on the media thread. - media_log_->AddEvent(media_log_->CreateTimeEvent(MediaLogEvent::DURATION_SET, - "duration", duration)); + media_log_->AddEvent<MediaLogEvent::kDurationChanged>(duration); main_task_runner_->PostTask( FROM_HERE, base::BindOnce(&PipelineImpl::OnDurationChange, weak_pipeline_, duration)); @@ -602,7 +603,7 @@ void PipelineImpl::RendererWrapper::OnError(PipelineStatus error) { void PipelineImpl::RendererWrapper::OnEnded() { DCHECK(media_task_runner_->BelongsToCurrentThread()); - media_log_->AddEvent(media_log_->CreateEvent(MediaLogEvent::ENDED)); + media_log_->AddEvent<MediaLogEvent::kEnded>(); if (state_ != kPlaying) return; @@ -660,7 +661,7 @@ void PipelineImpl::RendererWrapper::OnEnabledAudioTracksChanged( enabled_track_ids, GetCurrentTimestamp(), base::BindOnce(&RendererWrapper::OnDemuxerCompletedTrackChange, weak_factory_.GetWeakPtr(), - base::Passed(&change_completed_cb))); + std::move(change_completed_cb))); } void PipelineImpl::OnSelectedVideoTrackChanged( @@ -700,7 +701,7 @@ void PipelineImpl::RendererWrapper::OnSelectedVideoTrackChanged( tracks, GetCurrentTimestamp(), base::BindOnce(&RendererWrapper::OnDemuxerCompletedTrackChange, weak_factory_.GetWeakPtr(), - base::Passed(&change_completed_cb))); + std::move(change_completed_cb))); } void PipelineImpl::RendererWrapper::OnDemuxerCompletedTrackChange( @@ -818,6 +819,15 @@ void PipelineImpl::RendererWrapper::OnVideoOpacityChange(bool opaque) { weak_pipeline_, opaque)); } +void PipelineImpl::RendererWrapper::OnVideoFrameRateChange( + base::Optional<int> fps) { + DCHECK(media_task_runner_->BelongsToCurrentThread()); + + main_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&PipelineImpl::OnVideoFrameRateChange, + weak_pipeline_, fps)); +} + void PipelineImpl::RendererWrapper::OnAudioConfigChange( const AudioDecoderConfig& config) { DCHECK(media_task_runner_->BelongsToCurrentThread()); @@ -890,7 +900,11 @@ void PipelineImpl::RendererWrapper::SetState(State next_state) { << PipelineImpl::GetStateString(next_state); state_ = next_state; - media_log_->AddEvent(media_log_->CreatePipelineStateChangedEvent(next_state)); + + // TODO(tmathmeyer) Make State serializable so GetStateString won't need + // to be called here. + media_log_->AddEvent<MediaLogEvent::kPipelineStateChange>( + std::string(PipelineImpl::GetStateString(next_state))); } void PipelineImpl::RendererWrapper::CompleteSeek(base::TimeDelta seek_time, @@ -1155,7 +1169,7 @@ PipelineImpl::~PipelineImpl() { void PipelineImpl::Start(StartType start_type, Demuxer* demuxer, Client* client, - const PipelineStatusCB& seek_cb) { + PipelineStatusCallback seek_cb) { DVLOG(2) << __func__ << ": start_type=" << static_cast<int>(start_type); DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(demuxer); @@ -1165,7 +1179,7 @@ void PipelineImpl::Start(StartType start_type, DCHECK(!client_); DCHECK(!seek_cb_); client_ = client; - seek_cb_ = seek_cb; + seek_cb_ = std::move(seek_cb); last_media_time_ = base::TimeDelta(); seek_time_ = kNoTimestamp; @@ -1216,19 +1230,19 @@ void PipelineImpl::Stop() { weak_factory_.InvalidateWeakPtrs(); } -void PipelineImpl::Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) { +void PipelineImpl::Seek(base::TimeDelta time, PipelineStatusCallback seek_cb) { DVLOG(2) << __func__ << " to " << time.InMicroseconds(); DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(seek_cb); if (!IsRunning()) { DLOG(ERROR) << "Media pipeline isn't running. Ignoring Seek()."; - seek_cb.Run(PIPELINE_ERROR_INVALID_STATE); + std::move(seek_cb).Run(PIPELINE_ERROR_INVALID_STATE); return; } DCHECK(!seek_cb_); - seek_cb_ = seek_cb; + seek_cb_ = std::move(seek_cb); seek_time_ = time; last_media_time_ = base::TimeDelta(); media_task_runner_->PostTask( @@ -1237,13 +1251,13 @@ void PipelineImpl::Seek(base::TimeDelta time, const PipelineStatusCB& seek_cb) { base::Unretained(renderer_wrapper_.get()), time)); } -void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) { +void PipelineImpl::Suspend(PipelineStatusCallback suspend_cb) { DVLOG(2) << __func__; DCHECK(suspend_cb); DCHECK(IsRunning()); DCHECK(!suspend_cb_); - suspend_cb_ = suspend_cb; + suspend_cb_ = std::move(suspend_cb); media_task_runner_->PostTask( FROM_HERE, base::BindOnce(&RendererWrapper::Suspend, @@ -1251,14 +1265,14 @@ void PipelineImpl::Suspend(const PipelineStatusCB& suspend_cb) { } void PipelineImpl::Resume(base::TimeDelta time, - const PipelineStatusCB& seek_cb) { + PipelineStatusCallback seek_cb) { DVLOG(2) << __func__; DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(seek_cb); DCHECK(IsRunning()); DCHECK(!seek_cb_); - seek_cb_ = seek_cb; + seek_cb_ = std::move(seek_cb); seek_time_ = time; last_media_time_ = base::TimeDelta(); @@ -1531,6 +1545,15 @@ void PipelineImpl::OnVideoOpacityChange(bool opaque) { client_->OnVideoOpacityChange(opaque); } +void PipelineImpl::OnVideoFrameRateChange(base::Optional<int> fps) { + DVLOG(2) << __func__; + DCHECK(thread_checker_.CalledOnValidThread()); + DCHECK(IsRunning()); + + DCHECK(client_); + client_->OnVideoFrameRateChange(fps); +} + void PipelineImpl::OnAudioConfigChange(const AudioDecoderConfig& config) { DVLOG(2) << __func__; DCHECK(thread_checker_.CalledOnValidThread()); |