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

Unified Diff: media/renderers/audio_renderer_impl.cc

Issue 1955843002: Move Renderer permanent callbacks into RendererClient interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 7 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/renderers/audio_renderer_impl.cc
diff --git a/media/renderers/audio_renderer_impl.cc b/media/renderers/audio_renderer_impl.cc
index 0912eeb55da3d16191936f552d35fd099b0545a3..c2c7e7bf86a6ce27bd8053a13382ac49833d3d7d 100644
--- a/media/renderers/audio_renderer_impl.cc
+++ b/media/renderers/audio_renderer_impl.cc
@@ -25,6 +25,7 @@
#include "media/base/demuxer_stream.h"
#include "media/base/media_log.h"
#include "media/base/media_switches.h"
+#include "media/base/renderer_client.h"
#include "media/base/timestamp_constants.h"
#include "media/filters/audio_clock.h"
#include "media/filters/decrypting_demuxer_stream.h"
@@ -44,6 +45,7 @@ AudioRendererImpl::AudioRendererImpl(
new AudioBufferStream(task_runner, std::move(decoders), media_log)),
hardware_config_(hardware_config),
media_log_(media_log),
+ client_(nullptr),
tick_clock_(new base::DefaultTickClock()),
last_audio_memory_usage_(0),
last_decoded_sample_rate_(0),
@@ -310,38 +312,26 @@ void AudioRendererImpl::StartPlaying() {
AttemptRead_Locked();
}
-void AudioRendererImpl::Initialize(
- DemuxerStream* stream,
- const PipelineStatusCB& init_cb,
- CdmContext* cdm_context,
- const StatisticsCB& statistics_cb,
- const BufferingStateCB& buffering_state_cb,
- const base::Closure& ended_cb,
- const PipelineStatusCB& error_cb,
- const base::Closure& waiting_for_decryption_key_cb) {
+void AudioRendererImpl::Initialize(RendererClient* client,
+ DemuxerStream* stream,
+ CdmContext* cdm_context,
+ const PipelineStatusCB& init_cb) {
DVLOG(1) << __FUNCTION__;
DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(client);
DCHECK(stream);
DCHECK_EQ(stream->type(), DemuxerStream::AUDIO);
DCHECK(!init_cb.is_null());
- DCHECK(!statistics_cb.is_null());
- DCHECK(!buffering_state_cb.is_null());
- DCHECK(!ended_cb.is_null());
- DCHECK(!error_cb.is_null());
DCHECK_EQ(kUninitialized, state_);
DCHECK(sink_.get());
state_ = kInitializing;
+ client_ = client;
// Always post |init_cb_| because |this| could be destroyed if initialization
// failed.
init_cb_ = BindToCurrentLoop(init_cb);
- buffering_state_cb_ = buffering_state_cb;
- ended_cb_ = ended_cb;
- error_cb_ = error_cb;
- statistics_cb_ = statistics_cb;
-
const AudioParameters& hw_params = hardware_config_.GetOutputConfig();
expecting_config_changes_ = stream->SupportsConfigChanges();
if (!expecting_config_changes_ || !hw_params.IsValid() ||
@@ -430,7 +420,10 @@ void AudioRendererImpl::Initialize(
audio_buffer_stream_->Initialize(
stream, base::Bind(&AudioRendererImpl::OnAudioBufferStreamInitialized,
weak_factory_.GetWeakPtr()),
- cdm_context, statistics_cb, waiting_for_decryption_key_cb);
+ cdm_context, base::Bind(&AudioRendererImpl::OnStatisticsUpdate,
+ weak_factory_.GetWeakPtr()),
+ base::Bind(&AudioRendererImpl::OnWaitingForDecryptionKey,
+ weak_factory_.GetWeakPtr()));
}
void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) {
@@ -477,6 +470,31 @@ void AudioRendererImpl::OnAudioBufferStreamInitialized(bool success) {
base::ResetAndReturn(&init_cb_).Run(PIPELINE_OK);
}
+void AudioRendererImpl::OnPlaybackError(PipelineStatus error) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnError(error);
+}
+
+void AudioRendererImpl::OnPlaybackEnded() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnEnded();
+}
+
+void AudioRendererImpl::OnStatisticsUpdate(const PipelineStatistics& stats) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnStatisticsUpdate(stats);
+}
+
+void AudioRendererImpl::OnBufferingStateChange(BufferingState state) {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnBufferingStateChange(state);
+}
+
+void AudioRendererImpl::OnWaitingForDecryptionKey() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ client_->OnWaitingForDecryptionKey();
+}
+
void AudioRendererImpl::SetVolume(float volume) {
DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(sink_.get());
@@ -611,7 +629,9 @@ bool AudioRendererImpl::HandleSplicerBuffer_Locked(
PipelineStatistics stats;
stats.audio_memory_usage = memory_usage - last_audio_memory_usage_;
last_audio_memory_usage_ = memory_usage;
- task_runner_->PostTask(FROM_HERE, base::Bind(statistics_cb_, stats));
+ task_runner_->PostTask(FROM_HERE,
+ base::Bind(&AudioRendererImpl::OnStatisticsUpdate,
+ weak_factory_.GetWeakPtr(), stats));
switch (state_) {
case kUninitialized:
@@ -823,7 +843,9 @@ int AudioRendererImpl::Render(AudioBus* audio_bus,
if (audio_clock_->front_timestamp() >= ended_timestamp_ &&
!rendered_end_of_stream_) {
rendered_end_of_stream_ = true;
- task_runner_->PostTask(FROM_HERE, ended_cb_);
+ task_runner_->PostTask(FROM_HERE,
+ base::Bind(&AudioRendererImpl::OnPlaybackEnded,
+ weak_factory_.GetWeakPtr()));
}
}
@@ -835,8 +857,9 @@ void AudioRendererImpl::OnRenderError() {
MEDIA_LOG(ERROR, media_log_) << "audio render error";
// Post to |task_runner_| as this is called on the audio callback thread.
- task_runner_->PostTask(FROM_HERE,
- base::Bind(error_cb_, AUDIO_RENDERER_ERROR));
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&AudioRendererImpl::OnPlaybackError,
+ weak_factory_.GetWeakPtr(), AUDIO_RENDERER_ERROR));
}
void AudioRendererImpl::HandleAbortedReadOrDecodeError(PipelineStatus status) {
@@ -857,7 +880,7 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(PipelineStatus status) {
MEDIA_LOG(ERROR, media_log_) << "audio error during flushing, status: "
<< MediaLog::PipelineStatusToString(status);
- error_cb_.Run(status);
+ client_->OnError(status);
base::ResetAndReturn(&flush_cb_).Run();
return;
@@ -867,7 +890,7 @@ void AudioRendererImpl::HandleAbortedReadOrDecodeError(PipelineStatus status) {
MEDIA_LOG(ERROR, media_log_)
<< "audio error during playing, status: "
<< MediaLog::PipelineStatusToString(status);
- error_cb_.Run(status);
+ client_->OnError(status);
}
return;
}
@@ -903,8 +926,9 @@ void AudioRendererImpl::SetBufferingState_Locked(
lock_.AssertAcquired();
buffering_state_ = buffering_state;
- task_runner_->PostTask(FROM_HERE,
- base::Bind(buffering_state_cb_, buffering_state_));
+ task_runner_->PostTask(
+ FROM_HERE, base::Bind(&AudioRendererImpl::OnBufferingStateChange,
+ weak_factory_.GetWeakPtr(), buffering_state_));
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698