| 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);
|
| +}
|
|
|