Unrevert 5590 "description"(=(Auto)update libjingle 61834300->61901702).
BUG=N/A
R=xians@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/9009004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5595 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/media/base/fakemediaengine.h b/talk/media/base/fakemediaengine.h
index 86a0dbf..d2fc2ce 100644
--- a/talk/media/base/fakemediaengine.h
+++ b/talk/media/base/fakemediaengine.h
@@ -316,17 +316,18 @@
return true;
}
virtual bool SetLocalRenderer(uint32 ssrc, AudioRenderer* renderer) {
- std::map<uint32, AudioRenderer*>::iterator it = local_renderers_.find(ssrc);
+ std::map<uint32, VoiceChannelAudioSink*>::iterator it =
+ local_renderers_.find(ssrc);
if (renderer) {
if (it != local_renderers_.end()) {
- ASSERT(it->second == renderer);
+ ASSERT(it->second->renderer() == renderer);
} else {
- local_renderers_.insert(std::make_pair(ssrc, renderer));
- renderer->AddChannel(0);
+ local_renderers_.insert(std::make_pair(
+ ssrc, new VoiceChannelAudioSink(renderer)));
}
} else {
if (it != local_renderers_.end()) {
- it->second->RemoveChannel(0);
+ delete it->second;
local_renderers_.erase(it);
} else {
return false;
@@ -419,6 +420,34 @@
double left, right;
};
+ class VoiceChannelAudioSink : public AudioRenderer::Sink {
+ public:
+ explicit VoiceChannelAudioSink(AudioRenderer* renderer)
+ : renderer_(renderer) {
+ renderer_->AddChannel(0);
+ renderer_->SetSink(this);
+ }
+ virtual ~VoiceChannelAudioSink() {
+ if (renderer_) {
+ renderer_->RemoveChannel(0);
+ renderer_->SetSink(NULL);
+ }
+ }
+ virtual void OnData(const void* audio_data,
+ int bits_per_sample,
+ int sample_rate,
+ int number_of_channels,
+ int number_of_frames) OVERRIDE {}
+ virtual void OnClose() OVERRIDE {
+ renderer_ = NULL;
+ }
+ AudioRenderer* renderer() const { return renderer_; }
+
+ private:
+ AudioRenderer* renderer_;
+ };
+
+
FakeVoiceEngine* engine_;
std::vector<AudioCodec> recv_codecs_;
std::vector<AudioCodec> send_codecs_;
@@ -430,7 +459,7 @@
bool ringback_tone_loop_;
int time_since_last_typing_;
AudioOptions options_;
- std::map<uint32, AudioRenderer*> local_renderers_;
+ std::map<uint32, VoiceChannelAudioSink*> local_renderers_;
std::map<uint32, AudioRenderer*> remote_renderers_;
};