From eb29a9789da6f297950eedf2ca73eabc5cb1dd33 Mon Sep 17 00:00:00 2001 From: "wu@webrtc.org" Date: Mon, 22 Aug 2011 15:58:03 +0000 Subject: [PATCH] * Remove the previous renderer before set a new one. * Allow to unregister a renderer by giving a NULL point. Review URL: http://webrtc-codereview.appspot.com/123001 git-svn-id: http://webrtc.googlecode.com/svn/trunk@412 4adac7df-926f-26a2-2b94-8c16560cd09d --- .../source/talk/session/phone/webrtcvideoengine.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/third_party_mods/libjingle/source/talk/session/phone/webrtcvideoengine.cc b/third_party_mods/libjingle/source/talk/session/phone/webrtcvideoengine.cc index 63fc8cd01e..bb1157b245 100644 --- a/third_party_mods/libjingle/source/talk/session/phone/webrtcvideoengine.cc +++ b/third_party_mods/libjingle/source/talk/session/phone/webrtcvideoengine.cc @@ -53,14 +53,18 @@ class WebRtcRenderAdapter : public webrtc::ExternalRenderer { virtual int FrameSizeChange(unsigned int width, unsigned int height, unsigned int /*number_of_streams*/) { - ASSERT(renderer_ != NULL); + if (renderer_ == NULL) { + return 0; + } width_ = width; height_ = height; return renderer_->SetSize(width_, height_, 0) ? 0 : -1; } virtual int DeliverFrame(unsigned char* buffer, int buffer_size) { - ASSERT(renderer_ != NULL); + if (renderer_ == NULL) { + return 0; + } WebRtcVideoFrame video_frame; // TODO(ronghuawu): Currently by the time DeliverFrame got called, // ViE expects the frame will be rendered ASAP. However, the libjingle @@ -711,6 +715,7 @@ bool WebRtcVideoMediaChannel::SetRenderer( if (remote_renderer_.get()) { // If the renderer already set, stop it first engine_->video_engine()->render()->StopRender(vie_channel_); + engine_->video_engine()->render()->RemoveRenderer(vie_channel_); } remote_renderer_.reset(new WebRtcRenderAdapter(renderer));