Use an external-only VideoRenderModule in Call.

The default render module instantiated from inside VideoEngine if none
exists instantiates platform-specific code. Call only uses external
rendering, so this is an unneccessary overhead.

BUG=1667
R=mflodman@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/39069004

Cr-Commit-Position: refs/heads/master@{#8346}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8346 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/video/call.cc b/webrtc/video/call.cc
index a11656e..15ca45b 100644
--- a/webrtc/video/call.cc
+++ b/webrtc/video/call.cc
@@ -22,6 +22,7 @@
 #include "webrtc/modules/rtp_rtcp/source/byte_io.h"
 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h"
 #include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h"
+#include "webrtc/modules/video_render/include/video_render.h"
 #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
 #include "webrtc/system_wrappers/interface/logging.h"
 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h"
@@ -152,9 +153,12 @@
   VideoEngine* video_engine_;
   ViERTP_RTCP* rtp_rtcp_;
   ViECodec* codec_;
+  ViERender* render_;
   ViEBase* base_;
   int base_channel_id_;
 
+  scoped_ptr<VideoRender> external_render_;
+
   DISALLOW_COPY_AND_ASSIGN(Call);
 };
 }  // namespace internal
@@ -177,7 +181,9 @@
       receive_crit_(RWLockWrapper::CreateRWLock()),
       send_crit_(RWLockWrapper::CreateRWLock()),
       video_engine_(video_engine),
-      base_channel_id_(-1) {
+      base_channel_id_(-1),
+      external_render_(
+          VideoRender::CreateVideoRender(42, NULL, false, kRenderExternal)) {
   assert(video_engine != NULL);
   assert(config.send_transport != NULL);
 
@@ -194,6 +200,11 @@
         new CpuOveruseObserverProxy(config.overuse_callback));
   }
 
+  render_ = ViERender::GetInterface(video_engine_);
+  assert(render_ != NULL);
+
+  render_->RegisterVideoRenderModule(*external_render_.get());
+
   rtp_rtcp_ = ViERTP_RTCP::GetInterface(video_engine_);
   assert(rtp_rtcp_ != NULL);
 
@@ -211,8 +222,12 @@
 
 Call::~Call() {
   base_->DeleteChannel(base_channel_id_);
+
+  render_->DeRegisterVideoRenderModule(*external_render_.get());
+
   base_->Release();
   codec_->Release();
+  render_->Release();
   rtp_rtcp_->Release();
   webrtc::VideoEngine::Delete(video_engine_);
 }
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index fee90f4..4699ca4 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -102,6 +102,7 @@
 
 namespace internal {
 namespace {
+
 VideoCodec CreateDecoderVideoCodec(const VideoReceiveStream::Decoder& decoder) {
   VideoCodec codec;
   memset(&codec, 0, sizeof(codec));
diff --git a/webrtc/video_engine/vie_renderer.cc b/webrtc/video_engine/vie_renderer.cc
index 5c053c3..d9b05f2 100644
--- a/webrtc/video_engine/vie_renderer.cc
+++ b/webrtc/video_engine/vie_renderer.cc
@@ -39,8 +39,7 @@
   if (render_callback_)
     render_module_.DeleteIncomingRenderStream(render_id_);
 
-  if (incoming_external_callback_)
-    delete incoming_external_callback_;
+  delete incoming_external_callback_;
 }
 
 int32_t ViERenderer::StartRender() {