summaryrefslogtreecommitdiff
path: root/chromium/media/base/pipeline_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/pipeline_impl.cc')
-rw-r--r--chromium/media/base/pipeline_impl.cc73
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());