Index: talk/session/media/channel.cc |
diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc |
index fa1165af87c796a49691f3cb308f0ce35ed67af5..a59c3f82b771848b79f88fa949e781d77c5f5a07 100644 |
--- a/talk/session/media/channel.cc |
+++ b/talk/session/media/channel.cc |
@@ -44,6 +44,16 @@ |
namespace cricket { |
using rtc::Bind; |
+ |
+namespace { |
+// See comment below for why we need to use a pointer to a scoped_ptr. |
+bool SetRawAudioSink_w(VoiceMediaChannel* channel, |
+ uint32_t ssrc, |
+ rtc::scoped_ptr<webrtc::AudioSinkInterface>* sink) { |
+ channel->SetRawAudioSink(ssrc, std::move(*sink)); |
+ return true; |
+} |
+} // namespace |
enum { |
MSG_EARLYMEDIATIMEOUT = 1, |
@@ -1389,9 +1399,11 @@ |
void VoiceChannel::SetRawAudioSink( |
uint32_t ssrc, |
- const rtc::scoped_refptr<webrtc::AudioSinkInterface>& sink) { |
- worker_thread()->Invoke<void>( |
- Bind(&VoiceMediaChannel::SetRawAudioSink, media_channel(), ssrc, sink)); |
+ rtc::scoped_ptr<webrtc::AudioSinkInterface> sink) { |
+ // We need to work around Bind's lack of support for scoped_ptr and ownership |
+ // passing. So we invoke to our own little routine that gets a pointer to |
+ // our local variable. This is OK since we're synchronously invoking. |
+ InvokeOnWorker(Bind(&SetRawAudioSink_w, media_channel(), ssrc, &sink)); |
} |
bool VoiceChannel::GetStats(VoiceMediaInfo* stats) { |