Index: talk/session/media/channel.cc |
diff --git a/talk/session/media/channel.cc b/talk/session/media/channel.cc |
index 588a03661cf1e84e8d3d75e8cd058abd273c3e73..2358969801f2f57abd22be9ed69856740a874b83 100644 |
--- a/talk/session/media/channel.cc |
+++ b/talk/session/media/channel.cc |
@@ -40,9 +40,18 @@ |
#include "webrtc/p2p/base/transportchannel.h" |
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, |
MSG_SCREENCASTWINDOWEVENT, |
@@ -1376,6 +1385,15 @@ bool VoiceChannel::SetOutputVolume(uint32_t ssrc, double volume) { |
media_channel(), ssrc, volume)); |
} |
+void VoiceChannel::SetRawAudioSink( |
+ uint32_t ssrc, |
+ 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) { |
return InvokeOnWorker(Bind(&VoiceMediaChannel::GetStats, |
media_channel(), stats)); |