Index: content/renderer/media/audio_renderer_impl.cc |
=================================================================== |
--- content/renderer/media/audio_renderer_impl.cc (revision 89645) |
+++ content/renderer/media/audio_renderer_impl.cc (working copy) |
@@ -24,18 +24,25 @@ |
} // namespace |
-AudioRendererImpl::AudioRendererImpl(AudioMessageFilter* filter) |
+AudioRendererImpl::AudioRendererImpl(int routing_id) |
: AudioRendererBase(), |
bytes_per_second_(0), |
- filter_(filter), |
stream_id_(0), |
shared_memory_(NULL), |
shared_memory_size_(0), |
- io_loop_(filter->message_loop()), |
stopped_(false), |
pending_request_(false), |
prerolling_(false), |
preroll_bytes_(0) { |
+ AudioMessageFilter* audio_message_filter = AudioMessageFilter::GetInstance(); |
+ DCHECK(audio_message_filter); |
+ if (!audio_message_filter->RoutingIDHasBeenSet()) { |
+ // Ensure that first user sets a valid routing ID. |
+ // This routing ID will remain during the lifetime of the audio message |
+ // filter (which is a singleton). |
+ audio_message_filter->SetRoutingID(routing_id); |
+ } |
+ io_loop_ = audio_message_filter->message_loop(); |
DCHECK(io_loop_); |
} |
@@ -240,35 +247,34 @@ |
// Make sure we don't call create more than once. |
DCHECK_EQ(0, stream_id_); |
- stream_id_ = filter_->AddDelegate(this); |
+ stream_id_ = AudioMessageFilter::GetInstance()->AddDelegate(this); |
io_loop_->AddDestructionObserver(this); |
AudioParameters params_to_send(audio_params); |
// Let the browser choose packet size. |
params_to_send.samples_per_packet = 0; |
- filter_->Send(new AudioHostMsg_CreateStream( |
- 0, stream_id_, params_to_send, false)); |
+ Send(new AudioHostMsg_CreateStream(0, stream_id_, params_to_send, false)); |
} |
void AudioRendererImpl::PlayTask() { |
DCHECK(MessageLoop::current() == io_loop_); |
- filter_->Send(new AudioHostMsg_PlayStream(0, stream_id_)); |
+ Send(new AudioHostMsg_PlayStream(0, stream_id_)); |
} |
void AudioRendererImpl::PauseTask() { |
DCHECK(MessageLoop::current() == io_loop_); |
- filter_->Send(new AudioHostMsg_PauseStream(0, stream_id_)); |
+ Send(new AudioHostMsg_PauseStream(0, stream_id_)); |
} |
void AudioRendererImpl::SeekTask() { |
DCHECK(MessageLoop::current() == io_loop_); |
// We have to pause the audio stream before we can flush. |
- filter_->Send(new AudioHostMsg_PauseStream(0, stream_id_)); |
- filter_->Send(new AudioHostMsg_FlushStream(0, stream_id_)); |
+ Send(new AudioHostMsg_PauseStream(0, stream_id_)); |
+ Send(new AudioHostMsg_FlushStream(0, stream_id_)); |
} |
void AudioRendererImpl::DestroyTask() { |
@@ -276,8 +282,8 @@ |
// Make sure we don't call destroy more than once. |
DCHECK_NE(0, stream_id_); |
- filter_->RemoveDelegate(stream_id_); |
- filter_->Send(new AudioHostMsg_CloseStream(0, stream_id_)); |
+ AudioMessageFilter::GetInstance()->RemoveDelegate(stream_id_); |
+ Send(new AudioHostMsg_CloseStream(0, stream_id_)); |
io_loop_->RemoveDestructionObserver(this); |
stream_id_ = 0; |
} |
@@ -288,7 +294,7 @@ |
base::AutoLock auto_lock(lock_); |
if (stopped_) |
return; |
- filter_->Send(new AudioHostMsg_SetVolume(0, stream_id_, volume)); |
+ Send(new AudioHostMsg_SetVolume(0, stream_id_, volume)); |
} |
void AudioRendererImpl::NotifyPacketReadyTask() { |
@@ -331,7 +337,7 @@ |
request_buffers_state_.pending_bytes == 0); |
pending_request_ = false; |
// Then tell browser process we are done filling into the buffer. |
- filter_->Send(new AudioHostMsg_NotifyPacketReady(0, stream_id_, filled)); |
+ Send(new AudioHostMsg_NotifyPacketReady(0, stream_id_, filled)); |
} |
} |
@@ -346,3 +352,8 @@ |
stopped_ = true; |
DestroyTask(); |
} |
+ |
+void AudioRendererImpl::Send(IPC::Message* message) { |
+ DCHECK(MessageLoop::current() == io_loop_); |
+ AudioMessageFilter::GetInstance()->Send(message); |
+} |