Index: remoting/protocol/webrtc_audio_sink_adapter.cc |
diff --git a/remoting/protocol/webrtc_audio_sink_adapter.cc b/remoting/protocol/webrtc_audio_sink_adapter.cc |
index 5e2da715ad11d8dd500ef5806365400d430555a9..651d4eec82ab2d5a624337b28ca3507584cd2727 100644 |
--- a/remoting/protocol/webrtc_audio_sink_adapter.cc |
+++ b/remoting/protocol/webrtc_audio_sink_adapter.cc |
@@ -4,6 +4,7 @@ |
#include "remoting/protocol/webrtc_audio_sink_adapter.h" |
+#include "base/bind.h" |
#include "base/callback.h" |
#include "remoting/proto/audio.pb.h" |
#include "remoting/protocol/audio_stub.h" |
@@ -13,20 +14,17 @@ namespace protocol { |
WebrtcAudioSinkAdapter::WebrtcAudioSinkAdapter( |
scoped_refptr<webrtc::MediaStreamInterface> stream, |
- base::WeakPtr<AudioStub> audio_stub) { |
- audio_stub_ = audio_stub; |
- |
- media_stream_ = std::move(stream); |
- |
+ base::WeakPtr<AudioStub> audio_stub) |
+ : task_runner_(base::ThreadTaskRunnerHandle::Get()), |
+ audio_stub_(audio_stub), |
+ media_stream_(std::move(stream)) { |
webrtc::AudioTrackVector audio_tracks = media_stream_->GetAudioTracks(); |
// Caller must verify that the media stream contains audio tracks. |
DCHECK(!audio_tracks.empty()); |
- |
if (audio_tracks.size() > 1U) { |
LOG(WARNING) << "Received media stream with multiple audio tracks."; |
} |
- |
audio_track_ = audio_tracks[0]; |
audio_track_->GetSource()->AddSink(this); |
} |
@@ -40,9 +38,6 @@ void WebrtcAudioSinkAdapter::OnData(const void* audio_data, |
int sample_rate, |
size_t number_of_channels, |
size_t number_of_frames) { |
- if (!audio_stub_) |
- return; |
- |
std::unique_ptr<AudioPacket> audio_packet(new AudioPacket()); |
audio_packet->set_encoding(AudioPacket::ENCODING_RAW); |
@@ -73,7 +68,10 @@ void WebrtcAudioSinkAdapter::OnData(const void* audio_data, |
size_t data_size = |
number_of_frames * number_of_channels * (bits_per_sample / 8); |
audio_packet->add_data(reinterpret_cast<const char*>(audio_data), data_size); |
- audio_stub_->ProcessAudioPacket(std::move(audio_packet), base::Closure()); |
+ |
+ task_runner_->PostTask( |
+ FROM_HERE, base::Bind(&AudioStub::ProcessAudioPacket, audio_stub_, |
+ base::Passed(&audio_packet), base::Closure())); |
} |
} // namespace protocol |