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

Unified Diff: media/audio/audio_output_controller.cc

Issue 8818012: Remove the AudioManager singleton. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Set svn eol properties for a couple of files Created 9 years 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_controller.h ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_output_controller.cc
===================================================================
--- media/audio/audio_output_controller.cc (revision 114012)
+++ media/audio/audio_output_controller.cc (working copy)
@@ -21,10 +21,12 @@
const int AudioOutputController::kPollNumAttempts = 3;
const int AudioOutputController::kPollPauseInMilliseconds = 3;
-AudioOutputController::AudioOutputController(EventHandler* handler,
+AudioOutputController::AudioOutputController(AudioManager* audio_manager,
+ EventHandler* handler,
uint32 capacity,
SyncReader* sync_reader)
- : handler_(handler),
+ : audio_manager_(audio_manager),
+ handler_(handler),
stream_(NULL),
volume_(1.0),
state_(kEmpty),
@@ -32,7 +34,8 @@
pending_request_(false),
sync_reader_(sync_reader),
message_loop_(NULL),
- number_polling_attempts_left_(0) {
+ number_polling_attempts_left_(0),
+ ALLOW_THIS_IN_INITIALIZER_LIST(weak_this_(this)) {
}
AudioOutputController::~AudioOutputController() {
@@ -42,81 +45,77 @@
// static
scoped_refptr<AudioOutputController> AudioOutputController::Create(
+ AudioManager* audio_manager,
EventHandler* event_handler,
const AudioParameters& params,
uint32 buffer_capacity) {
-
- if (!params.IsValid())
+ DCHECK(audio_manager);
+ if (!params.IsValid() || !audio_manager)
return NULL;
- if (!AudioManager::GetAudioManager())
- return NULL;
-
// Starts the audio controller thread.
scoped_refptr<AudioOutputController> controller(new AudioOutputController(
- event_handler, buffer_capacity, NULL));
+ audio_manager, event_handler, buffer_capacity, NULL));
- controller->message_loop_ =
- AudioManager::GetAudioManager()->GetMessageLoop();
+ controller->message_loop_ = audio_manager->GetMessageLoop();
controller->message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoCreate, controller.get(), params));
+ &AudioOutputController::DoCreate, base::Unretained(controller.get()),
+ params));
return controller;
}
// static
scoped_refptr<AudioOutputController> AudioOutputController::CreateLowLatency(
+ AudioManager* audio_manager,
EventHandler* event_handler,
const AudioParameters& params,
SyncReader* sync_reader) {
-
+ DCHECK(audio_manager);
DCHECK(sync_reader);
- if (!params.IsValid())
+ if (!params.IsValid() || !audio_manager)
return NULL;
- if (!AudioManager::GetAudioManager())
- return NULL;
-
// Starts the audio controller thread.
scoped_refptr<AudioOutputController> controller(new AudioOutputController(
- event_handler, 0, sync_reader));
+ audio_manager, event_handler, 0, sync_reader));
- controller->message_loop_ =
- AudioManager::GetAudioManager()->GetMessageLoop();
+ controller->message_loop_ = audio_manager->GetMessageLoop();
controller->message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoCreate, controller.get(), params));
+ &AudioOutputController::DoCreate, base::Unretained(controller.get()),
+ params));
return controller;
}
void AudioOutputController::Play() {
DCHECK(message_loop_);
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoPlay, this));
+ &AudioOutputController::DoPlay, base::Unretained(this)));
}
void AudioOutputController::Pause() {
DCHECK(message_loop_);
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoPause, this));
+ &AudioOutputController::DoPause, base::Unretained(this)));
}
void AudioOutputController::Flush() {
DCHECK(message_loop_);
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoFlush, this));
+ &AudioOutputController::DoFlush, base::Unretained(this)));
}
void AudioOutputController::Close(const base::Closure& closed_task) {
DCHECK(!closed_task.is_null());
DCHECK(message_loop_);
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoClose, this, closed_task));
+ &AudioOutputController::DoClose, base::Unretained(this), closed_task));
}
void AudioOutputController::SetVolume(double volume) {
DCHECK(message_loop_);
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoSetVolume, this, volume));
+ &AudioOutputController::DoSetVolume, base::Unretained(this), volume));
}
void AudioOutputController::EnqueueData(const uint8* data, uint32 size) {
@@ -140,11 +139,8 @@
return;
DCHECK_EQ(kEmpty, state_);
- if (!AudioManager::GetAudioManager())
- return;
-
StopCloseAndClearStream();
- stream_ = AudioManager::GetAudioManager()->MakeAudioOutputStreamProxy(params);
+ stream_ = audio_manager_->MakeAudioOutputStreamProxy(params);
if (!stream_) {
// TODO(hclam): Define error types.
handler_->OnError(this, 0);
@@ -193,7 +189,8 @@
number_polling_attempts_left_ = kPollNumAttempts;
message_loop_->PostDelayedTask(
FROM_HERE,
- base::Bind(&AudioOutputController::PollAndStartIfDataReady, this),
+ base::Bind(&AudioOutputController::PollAndStartIfDataReady,
+ weak_this_.GetWeakPtr()),
kPollPauseInMilliseconds);
} else {
StartStream();
@@ -203,7 +200,7 @@
void AudioOutputController::PollAndStartIfDataReady() {
DCHECK_EQ(message_loop_, MessageLoop::current());
- // Being paranoic: do nothing if state unexpectedly changed.
+ // Being paranoid: do nothing if state unexpectedly changed.
if ((state_ != kStarting) && (state_ != kPausedWhenStarting))
return;
@@ -220,7 +217,8 @@
} else {
message_loop_->PostDelayedTask(
FROM_HERE,
- base::Bind(&AudioOutputController::PollAndStartIfDataReady, this),
+ base::Bind(&AudioOutputController::PollAndStartIfDataReady,
+ weak_this_.GetWeakPtr()),
kPollPauseInMilliseconds);
}
}
@@ -379,7 +377,7 @@
void AudioOutputController::OnError(AudioOutputStream* stream, int code) {
// Handle error on the audio controller thread.
message_loop_->PostTask(FROM_HERE, base::Bind(
- &AudioOutputController::DoReportError, this, code));
+ &AudioOutputController::DoReportError, base::Unretained(this), code));
}
void AudioOutputController::SubmitOnMoreData_Locked() {
@@ -409,6 +407,7 @@
stream_->Stop();
stream_->Close();
stream_ = NULL;
+ weak_this_.InvalidateWeakPtrs();
}
} // namespace media
« no previous file with comments | « media/audio/audio_output_controller.h ('k') | media/audio/audio_output_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698