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

Unified Diff: media/base/pipeline_impl.cc

Issue 1904793002: Move Pipeline permanent callbacks into Pipeline::Client interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleanup Created 4 years, 8 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
Index: media/base/pipeline_impl.cc
diff --git a/media/base/pipeline_impl.cc b/media/base/pipeline_impl.cc
index 5f4705b5d2639c6b4b2dd65bceacc72178d26d9c..adc46faf1ba24720a3b6432425660247a99b5f77 100644
--- a/media/base/pipeline_impl.cc
+++ b/media/base/pipeline_impl.cc
@@ -47,6 +47,7 @@ PipelineImpl::PipelineImpl(
renderer_ended_(false),
text_renderer_ended_(false),
demuxer_(NULL),
+ client_(nullptr),
cdm_context_(nullptr),
weak_factory_(this) {
weak_this_ = weak_factory_.GetWeakPtr();
@@ -63,19 +64,10 @@ PipelineImpl::~PipelineImpl() {
void PipelineImpl::Start(Demuxer* demuxer,
scoped_ptr<Renderer> renderer,
- const base::Closure& ended_cb,
- const PipelineStatusCB& error_cb,
- const PipelineStatusCB& seek_cb,
- const PipelineMetadataCB& metadata_cb,
- const BufferingStateCB& buffering_state_cb,
- const base::Closure& duration_change_cb,
- const AddTextTrackCB& add_text_track_cb,
- const base::Closure& waiting_for_decryption_key_cb) {
- DCHECK(!ended_cb.is_null());
- DCHECK(!error_cb.is_null());
+ Client* client,
+ const PipelineStatusCB& seek_cb) {
+ DCHECK(client);
DCHECK(!seek_cb.is_null());
- DCHECK(!metadata_cb.is_null());
- DCHECK(!buffering_state_cb.is_null());
base::AutoLock auto_lock(lock_);
CHECK(!running_) << "Media pipeline is already running";
@@ -83,15 +75,8 @@ void PipelineImpl::Start(Demuxer* demuxer,
demuxer_ = demuxer;
renderer_ = std::move(renderer);
- ended_cb_ = ended_cb;
- error_cb_ = error_cb;
+ client_ = client;
seek_cb_ = seek_cb;
- metadata_cb_ = metadata_cb;
- buffering_state_cb_ = buffering_state_cb;
- duration_change_cb_ = duration_change_cb;
- add_text_track_cb_ = add_text_track_cb;
- waiting_for_decryption_key_cb_ = waiting_for_decryption_key_cb;
-
task_runner_->PostTask(FROM_HERE,
base::Bind(&PipelineImpl::StartTask, weak_this_));
}
@@ -314,8 +299,7 @@ void PipelineImpl::SetDuration(TimeDelta duration) {
base::AutoLock auto_lock(lock_);
duration_ = duration;
- if (!duration_change_cb_.is_null())
- duration_change_cb_.Run();
+ client_->OnDurationChange();
}
void PipelineImpl::StateTransitionTask(PipelineStatus status) {
@@ -471,17 +455,16 @@ void PipelineImpl::OnStopCompleted(PipelineStatus status) {
// If we stop during initialization/seeking/suspending we don't want to leave
// outstanding callbacks around.
+ bool status_reported = false;
if (!seek_cb_.is_null()) {
base::ResetAndReturn(&seek_cb_).Run(status_);
- error_cb_.Reset();
+ status_reported = true;
}
if (!suspend_cb_.is_null()) {
base::ResetAndReturn(&suspend_cb_).Run(status_);
- error_cb_.Reset();
+ status_reported = true;
}
if (!stop_cb_.is_null()) {
- error_cb_.Reset();
-
// Invalid all weak pointers so it's safe to destroy |this| on the render
// main thread.
weak_factory_.InvalidateWeakPtrs();
@@ -492,9 +475,9 @@ void PipelineImpl::OnStopCompleted(PipelineStatus status) {
// executing |stop_cb_|.
return;
}
- if (!error_cb_.is_null()) {
+ if (!status_reported) {
DCHECK_NE(status_, PIPELINE_OK);
- base::ResetAndReturn(&error_cb_).Run(status_);
+ client_->OnError(status_);
}
}
@@ -516,6 +499,10 @@ void PipelineImpl::OnUpdateStatistics(const PipelineStatistics& stats_delta) {
statistics_.video_memory_usage += stats_delta.video_memory_usage;
}
+void PipelineImpl::OnWaitingForDecryptionKey() {
+ client_->OnWaitingForDecryptionKey();
+}
+
void PipelineImpl::StartTask() {
DCHECK(task_runner_->BelongsToCurrentThread());
@@ -782,7 +769,7 @@ void PipelineImpl::RunEndedCallbackIfNeeded() {
return;
DCHECK_EQ(status_, PIPELINE_OK);
- ended_cb_.Run();
+ client_->OnEnded();
}
scoped_ptr<TextRenderer> PipelineImpl::CreateTextRenderer() {
@@ -814,7 +801,7 @@ void PipelineImpl::RemoveTextStreamTask(DemuxerStream* text_stream) {
void PipelineImpl::OnAddTextTrack(const TextTrackConfig& config,
const AddTextTrackDoneCB& done_cb) {
DCHECK(task_runner_->BelongsToCurrentThread());
- add_text_track_cb_.Run(config, done_cb);
+ client_->OnAddTextTrack(config, done_cb);
}
void PipelineImpl::InitializeDemuxer(const PipelineStatusCB& done_cb) {
@@ -844,7 +831,7 @@ void PipelineImpl::InitializeRenderer(const PipelineStatusCB& done_cb) {
base::Bind(&PipelineImpl::BufferingStateChanged, weak_this_),
base::Bind(&PipelineImpl::OnRendererEnded, weak_this_),
base::Bind(&PipelineImpl::OnError, weak_this_),
- waiting_for_decryption_key_cb_);
+ base::Bind(&PipelineImpl::OnWaitingForDecryptionKey, weak_this_));
}
void PipelineImpl::ReportMetadata() {
@@ -860,13 +847,13 @@ void PipelineImpl::ReportMetadata() {
if (demuxer_->GetStream(DemuxerStream::AUDIO)) {
metadata.has_audio = true;
}
- metadata_cb_.Run(metadata);
+ client_->OnMetadata(metadata);
}
void PipelineImpl::BufferingStateChanged(BufferingState new_buffering_state) {
DVLOG(1) << __FUNCTION__ << "(" << new_buffering_state << ") ";
DCHECK(task_runner_->BelongsToCurrentThread());
- buffering_state_cb_.Run(new_buffering_state);
+ client_->OnBufferingStateChange(new_buffering_state);
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698