* 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
This commit is contained in:
wu@webrtc.org
2011-08-22 15:58:03 +00:00
parent adb23827c1
commit eb29a9789d

View File

@ -53,14 +53,18 @@ class WebRtcRenderAdapter : public webrtc::ExternalRenderer {
virtual int FrameSizeChange(unsigned int width, unsigned int height, virtual int FrameSizeChange(unsigned int width, unsigned int height,
unsigned int /*number_of_streams*/) { unsigned int /*number_of_streams*/) {
ASSERT(renderer_ != NULL); if (renderer_ == NULL) {
return 0;
}
width_ = width; width_ = width;
height_ = height; height_ = height;
return renderer_->SetSize(width_, height_, 0) ? 0 : -1; return renderer_->SetSize(width_, height_, 0) ? 0 : -1;
} }
virtual int DeliverFrame(unsigned char* buffer, int buffer_size) { virtual int DeliverFrame(unsigned char* buffer, int buffer_size) {
ASSERT(renderer_ != NULL); if (renderer_ == NULL) {
return 0;
}
WebRtcVideoFrame video_frame; WebRtcVideoFrame video_frame;
// TODO(ronghuawu): Currently by the time DeliverFrame got called, // TODO(ronghuawu): Currently by the time DeliverFrame got called,
// ViE expects the frame will be rendered ASAP. However, the libjingle // ViE expects the frame will be rendered ASAP. However, the libjingle
@ -711,6 +715,7 @@ bool WebRtcVideoMediaChannel::SetRenderer(
if (remote_renderer_.get()) { if (remote_renderer_.get()) {
// If the renderer already set, stop it first // If the renderer already set, stop it first
engine_->video_engine()->render()->StopRender(vie_channel_); engine_->video_engine()->render()->StopRender(vie_channel_);
engine_->video_engine()->render()->RemoveRenderer(vie_channel_);
} }
remote_renderer_.reset(new WebRtcRenderAdapter(renderer)); remote_renderer_.reset(new WebRtcRenderAdapter(renderer));