From 9e4e524f3894c7eeee8a53bd3cbf21d27b5efc8c Mon Sep 17 00:00:00 2001 From: "pbos@webrtc.org" Date: Thu, 12 Feb 2015 10:48:23 +0000 Subject: [PATCH] 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 --- webrtc/video/call.cc | 17 ++++++++++++++++- webrtc/video/video_receive_stream.cc | 1 + webrtc/video_engine/vie_renderer.cc | 3 +-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/webrtc/video/call.cc b/webrtc/video/call.cc index a11656ea3..15ca45bd9 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 @@ class Call : public webrtc::Call, public PacketReceiver { VideoEngine* video_engine_; ViERTP_RTCP* rtp_rtcp_; ViECodec* codec_; + ViERender* render_; ViEBase* base_; int base_channel_id_; + scoped_ptr external_render_; + DISALLOW_COPY_AND_ASSIGN(Call); }; } // namespace internal @@ -177,7 +181,9 @@ Call::Call(webrtc::VideoEngine* video_engine, const Call::Config& config) 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 @@ Call::Call(webrtc::VideoEngine* video_engine, const Call::Config& config) 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(webrtc::VideoEngine* video_engine, const Call::Config& config) 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 fee90f44f..4699ca4f1 100644 --- a/webrtc/video/video_receive_stream.cc +++ b/webrtc/video/video_receive_stream.cc @@ -102,6 +102,7 @@ std::string VideoReceiveStream::Config::Rtp::ToString() const { 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 5c053c3c7..d9b05f26c 100644 --- a/webrtc/video_engine/vie_renderer.cc +++ b/webrtc/video_engine/vie_renderer.cc @@ -39,8 +39,7 @@ ViERenderer::~ViERenderer(void) { if (render_callback_) render_module_.DeleteIncomingRenderStream(render_id_); - if (incoming_external_callback_) - delete incoming_external_callback_; + delete incoming_external_callback_; } int32_t ViERenderer::StartRender() {