Index: media/audio/audio_output_controller.cc |
diff --git a/media/audio/audio_output_controller.cc b/media/audio/audio_output_controller.cc |
index d087a70208a03623dbcd2a8783f51b461c1356c2..9a0d3993ee7dacac2cc5027446d614d0b66c8972 100644 |
--- a/media/audio/audio_output_controller.cc |
+++ b/media/audio/audio_output_controller.cc |
@@ -25,15 +25,12 @@ const int AudioOutputController::kPollPauseInMilliseconds = 3; |
AudioOutputController::AudioOutputController(AudioManager* audio_manager, |
EventHandler* handler, |
- uint32 capacity, |
SyncReader* sync_reader) |
: audio_manager_(audio_manager), |
handler_(handler), |
stream_(NULL), |
volume_(1.0), |
state_(kEmpty), |
- buffer_(0, capacity), |
- pending_request_(false), |
sync_reader_(sync_reader), |
message_loop_(NULL), |
number_polling_attempts_left_(0), |
@@ -62,27 +59,6 @@ scoped_refptr<AudioOutputController> AudioOutputController::Create( |
AudioManager* audio_manager, |
EventHandler* event_handler, |
const AudioParameters& params, |
- uint32 buffer_capacity) { |
- DCHECK(audio_manager); |
- if (!params.IsValid() || !audio_manager) |
- return NULL; |
- |
- // Starts the audio controller thread. |
- scoped_refptr<AudioOutputController> controller(new AudioOutputController( |
- audio_manager, event_handler, buffer_capacity, NULL)); |
- |
- controller->message_loop_ = audio_manager->GetMessageLoop(); |
- controller->message_loop_->PostTask(FROM_HERE, base::Bind( |
- &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); |
@@ -92,7 +68,7 @@ scoped_refptr<AudioOutputController> AudioOutputController::CreateLowLatency( |
// Starts the audio controller thread. |
scoped_refptr<AudioOutputController> controller(new AudioOutputController( |
- audio_manager, event_handler, 0, sync_reader)); |
+ audio_manager, event_handler, sync_reader)); |
controller->message_loop_ = audio_manager->GetMessageLoop(); |
controller->message_loop_->PostTask(FROM_HERE, base::Bind( |
@@ -132,19 +108,6 @@ void AudioOutputController::SetVolume(double volume) { |
&AudioOutputController::DoSetVolume, base::Unretained(this), volume)); |
} |
-void AudioOutputController::EnqueueData(const uint8* data, uint32 size) { |
- // Write data to the push source and ask for more data if needed. |
- base::AutoLock auto_lock(lock_); |
- pending_request_ = false; |
- // If |size| is set to 0, it indicates that the audio source doesn't have |
- // more data right now, and so it doesn't make sense to send additional |
- // request. |
- if (size) { |
- buffer_.Append(data, size); |
- SubmitOnMoreData_Locked(); |
- } |
-} |
- |
void AudioOutputController::DoCreate(const AudioParameters& params) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
@@ -177,12 +140,6 @@ void AudioOutputController::DoCreate(const AudioParameters& params) { |
// And then report we have been created. |
handler_->OnCreated(this); |
- |
- // If in normal latency mode then start buffering. |
- if (!LowLatencyMode()) { |
- base::AutoLock auto_lock(lock_); |
- SubmitOnMoreData_Locked(); |
- } |
} |
void AudioOutputController::DoPlay() { |
@@ -192,23 +149,19 @@ void AudioOutputController::DoPlay() { |
if (state_ != kCreated && state_ != kPaused) |
return; |
- if (LowLatencyMode()) { |
- state_ = kStarting; |
+ state_ = kStarting; |
- // Ask for first packet. |
- sync_reader_->UpdatePendingBytes(0); |
+ // Ask for first packet. |
+ sync_reader_->UpdatePendingBytes(0); |
- // Cannot start stream immediately, should give renderer some time |
- // to deliver data. |
- number_polling_attempts_left_ = kPollNumAttempts; |
- message_loop_->PostDelayedTask( |
- FROM_HERE, |
- base::Bind(&AudioOutputController::PollAndStartIfDataReady, |
- weak_this_.GetWeakPtr()), |
- kPollPauseInMilliseconds); |
- } else { |
- StartStream(); |
- } |
+ // Cannot start stream immediately, should give renderer some time |
+ // to deliver data. |
+ number_polling_attempts_left_ = kPollNumAttempts; |
scherkus (not reviewing)
2012/01/28 02:12:52
I know you didn't write this but this seems odd
i
vrk (LEFT CHROMIUM)
2012/01/31 23:53:08
Done. Details in the bug! (crbug.com/112196)
|
+ message_loop_->PostDelayedTask( |
+ FROM_HERE, |
+ base::Bind(&AudioOutputController::PollAndStartIfDataReady, |
+ weak_this_.GetWeakPtr()), |
+ kPollPauseInMilliseconds); |
} |
void AudioOutputController::PollAndStartIfDataReady() { |
@@ -270,10 +223,8 @@ void AudioOutputController::DoPause() { |
// TODO(hclam): Actually pause the audio device. |
stream_->Stop(); |
- if (LowLatencyMode()) { |
- // Send a special pause mark to the low-latency audio thread. |
- sync_reader_->UpdatePendingBytes(kPauseMark); |
- } |
+ // Send a special pause mark to the low-latency audio thread. |
+ sync_reader_->UpdatePendingBytes(kPauseMark); |
handler_->OnPaused(this); |
break; |
@@ -286,14 +237,6 @@ void AudioOutputController::DoFlush() { |
DCHECK(message_loop_->BelongsToCurrentThread()); |
// TODO(hclam): Actually flush the audio device. |
- |
- // If we are in the regular latency mode then flush the push source. |
- if (!sync_reader_) { |
- if (state_ != kPaused) |
- return; |
- base::AutoLock auto_lock(lock_); |
- buffer_.Clear(); |
- } |
} |
void AudioOutputController::DoClose(const base::Closure& closed_task) { |
@@ -301,11 +244,7 @@ void AudioOutputController::DoClose(const base::Closure& closed_task) { |
if (state_ != kClosed) { |
DoStopCloseAndClearStream(NULL); |
- |
- if (LowLatencyMode()) { |
- sync_reader_->Close(); |
- } |
- |
+ sync_reader_->Close(); |
state_ = kClosed; |
} |
@@ -343,25 +282,6 @@ uint32 AudioOutputController::OnMoreData( |
uint32 max_size, AudioBuffersState buffers_state) { |
TRACE_EVENT0("audio", "AudioOutputController::OnMoreData"); |
- // If regular latency mode is used. |
- if (!sync_reader_) { |
- base::AutoLock auto_lock(lock_); |
- |
- // Save current buffers state. |
- buffers_state_ = buffers_state; |
- |
- if (state_ != kPlaying) { |
- // Don't read anything. Save the number of bytes in the hardware buffer. |
- return 0; |
- } |
- |
- uint32 size = buffer_.Read(dest, max_size); |
- buffers_state_.pending_bytes += size; |
- SubmitOnMoreData_Locked(); |
- return size; |
- } |
- |
- // Low latency mode. |
{ |
// Check state and do nothing if we are not playing. |
// We are on the hardware audio thread, so lock is needed. |
@@ -370,13 +290,13 @@ uint32 AudioOutputController::OnMoreData( |
return 0; |
} |
} |
- uint32 size = sync_reader_->Read(dest, max_size); |
+ uint32 size = sync_reader_->Read(dest, max_size); |
sync_reader_->UpdatePendingBytes(buffers_state.total_bytes() + size); |
return size; |
} |
void AudioOutputController::WaitTillDataReady() { |
- if (LowLatencyMode() && !sync_reader_->DataReady()) { |
+ if (!sync_reader_->DataReady()) { |
// In the different place we use different mechanism to poll, get max |
// polling delay from constants used there. |
const base::TimeDelta kMaxPollingDelay = base::TimeDelta::FromMilliseconds( |
@@ -395,26 +315,6 @@ void AudioOutputController::OnError(AudioOutputStream* stream, int code) { |
&AudioOutputController::DoReportError, base::Unretained(this), code)); |
} |
-void AudioOutputController::SubmitOnMoreData_Locked() { |
- lock_.AssertAcquired(); |
- |
- if (buffer_.forward_bytes() > buffer_.forward_capacity()) |
- return; |
- |
- if (pending_request_) |
- return; |
- pending_request_ = true; |
- |
- AudioBuffersState buffers_state = buffers_state_; |
- buffers_state.pending_bytes += buffer_.forward_bytes(); |
- |
- // If we need more data then call the event handler to ask for more data. |
- // It is okay that we don't lock in this block because the parameters are |
- // correct and in the worst case we are just asking more data than needed. |
- base::AutoUnlock auto_unlock(lock_); |
- handler_->OnMoreData(this, buffers_state); |
-} |
- |
void AudioOutputController::DoStopCloseAndClearStream(WaitableEvent *done) { |
DCHECK(message_loop_->BelongsToCurrentThread()); |