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

Unified Diff: media/audio/audio_output_resampler.cc

Issue 2621993002: Makes AudioOutputProxy -> AudioOutputDispatcher reference weak. (Closed)
Patch Set: adds StopPhysicalStream Created 3 years, 11 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
« no previous file with comments | « media/audio/audio_output_resampler.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_resampler.cc
diff --git a/media/audio/audio_output_resampler.cc b/media/audio/audio_output_resampler.cc
index 33a4ccd960e1c157f5bea0a3cfd1eae60fafbb7a..5dbba5dc2be388087e4aa3eccf753f105ef8c187 100644
--- a/media/audio/audio_output_resampler.cc
+++ b/media/audio/audio_output_resampler.cc
@@ -229,7 +229,8 @@ AudioOutputResampler::AudioOutputResampler(AudioManager* audio_manager,
close_delay_,
base::Bind(&AudioOutputResampler::Reinitialize,
base::Unretained(this)),
- false) {
+ false),
+ weak_factory_(this) {
DCHECK(input_params.IsValid());
DCHECK(output_params.IsValid());
DCHECK_EQ(output_params_.format(), AudioParameters::AUDIO_PCM_LOW_LATENCY);
@@ -241,7 +242,9 @@ AudioOutputResampler::AudioOutputResampler(AudioManager* audio_manager,
}
AudioOutputResampler::~AudioOutputResampler() {
- DCHECK(callbacks_.empty());
+ for (auto& iter : callbacks_) {
+ StopStream(iter.first);
+ }
}
void AudioOutputResampler::Reinitialize() {
@@ -268,6 +271,11 @@ void AudioOutputResampler::Initialize() {
audio_manager_, output_params_, device_id_, close_delay_);
}
+AudioOutputProxy* AudioOutputResampler::CreateStreamProxy() {
+ DCHECK(task_runner_->BelongsToCurrentThread());
+ return new AudioOutputProxy(weak_factory_.GetWeakPtr());
+}
+
bool AudioOutputResampler::OpenStream() {
DCHECK(task_runner_->BelongsToCurrentThread());
@@ -333,9 +341,10 @@ bool AudioOutputResampler::StartStream(
CallbackMap::iterator it = callbacks_.find(stream_proxy);
if (it == callbacks_.end()) {
resampler_callback = new OnMoreDataConverter(params_, output_params_);
- callbacks_[stream_proxy] = resampler_callback;
+ callbacks_[stream_proxy] =
+ base::WrapUnique<OnMoreDataConverter>(resampler_callback);
} else {
- resampler_callback = it->second;
+ resampler_callback = it->second.get();
}
resampler_callback->Start(callback);
@@ -376,11 +385,7 @@ void AudioOutputResampler::CloseStream(AudioOutputProxy* stream_proxy) {
// We assume that StopStream() is always called prior to CloseStream(), so
// that it is safe to delete the OnMoreDataConverter here.
- CallbackMap::iterator it = callbacks_.find(stream_proxy);
- if (it != callbacks_.end()) {
- delete it->second;
- callbacks_.erase(it);
- }
+ callbacks_.erase(stream_proxy);
// Start the reinitialization timer if there are no active proxies and we're
// not using the originally requested output parameters. This allows us to
« no previous file with comments | « media/audio/audio_output_resampler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698