Extract ViESyncModule outside ViEChannel.

Moves functionality outside ViEChannel and away from the sender.

BUG=webrtc:5494
R=danilchap@webrtc.org

Review URL: https://codereview.webrtc.org/1698183002 .

Cr-Commit-Position: refs/heads/master@{#11633}
diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc
index 4546ab7..1ed047b 100644
--- a/webrtc/video/video_receive_stream.cc
+++ b/webrtc/video/video_receive_stream.cc
@@ -178,6 +178,7 @@
                    1,
                    false),
       vie_receiver_(vie_channel_.vie_receiver()),
+      vie_sync_(vcm_.get()),
       rtp_rtcp_(vie_channel_.rtp_rtcp()) {
   LOG(LS_INFO) << "VideoReceiveStream: " << config_.ToString();
 
@@ -302,12 +303,14 @@
   vie_channel_.RegisterPreRenderCallback(this);
 
   process_thread_->RegisterModule(vcm_.get());
+  process_thread_->RegisterModule(&vie_sync_);
 }
 
 VideoReceiveStream::~VideoReceiveStream() {
   LOG(LS_INFO) << "~VideoReceiveStream: " << config_.ToString();
   Stop();
 
+  process_thread_->DeRegisterModule(&vie_sync_);
   process_thread_->DeRegisterModule(vcm_.get());
 
   // Deregister external decoders so that they are no longer running during
@@ -351,11 +354,13 @@
                                         int audio_channel_id) {
   if (voice_engine != nullptr && audio_channel_id != -1) {
     VoEVideoSync* voe_sync_interface = VoEVideoSync::GetInterface(voice_engine);
-    vie_channel_.SetVoiceChannel(audio_channel_id, voe_sync_interface);
+    vie_sync_.ConfigureSync(audio_channel_id, voe_sync_interface, rtp_rtcp_,
+                            vie_receiver_->GetRtpReceiver());
     voe_sync_interface->Release();
-  } else {
-    vie_channel_.SetVoiceChannel(-1, nullptr);
+    return;
   }
+  vie_sync_.ConfigureSync(-1, nullptr, rtp_rtcp_,
+                          vie_receiver_->GetRtpReceiver());
 }
 
 VideoReceiveStream::Stats VideoReceiveStream::GetStats() const {
diff --git a/webrtc/video/video_receive_stream.h b/webrtc/video/video_receive_stream.h
index ee25cf7..5510945 100644
--- a/webrtc/video/video_receive_stream.h
+++ b/webrtc/video/video_receive_stream.h
@@ -100,6 +100,7 @@
   ReceiveStatisticsProxy stats_proxy_;
   ViEChannel vie_channel_;
   ViEReceiver* const vie_receiver_;
+  ViESyncModule vie_sync_;
   RtpRtcp* const rtp_rtcp_;
 };
 }  // namespace internal
diff --git a/webrtc/video/vie_channel.cc b/webrtc/video/vie_channel.cc
index b41e21b..b9e8357 100644
--- a/webrtc/video/vie_channel.cc
+++ b/webrtc/video/vie_channel.cc
@@ -95,7 +95,6 @@
       vcm_protection_callback_(new ViEChannelProtectionCallback(this)),
       vcm_(vcm),
       vie_receiver_(vcm_, remote_bitrate_estimator, this),
-      vie_sync_(vcm_),
       stats_observer_(new ChannelStatsObserver(this)),
       receive_stats_callback_(nullptr),
       incoming_video_stream_(nullptr),
@@ -166,7 +165,6 @@
     vcm_->RegisterReceiveStatisticsCallback(this);
     vcm_->RegisterDecoderTimingCallback(this);
     vcm_->SetRenderDelay(kDefaultRenderDelayMs);
-    module_process_thread_->RegisterModule(&vie_sync_);
   }
   return 0;
 }
@@ -178,8 +176,6 @@
       vie_receiver_.GetReceiveStatistics());
   if (sender_) {
     send_payload_router_->SetSendingRtpModules(std::vector<RtpRtcp*>());
-  } else {
-    module_process_thread_->DeRegisterModule(&vie_sync_);
   }
   for (size_t i = 0; i < num_active_rtp_rtcp_modules_; ++i)
     packet_router_->RemoveRtpModule(rtp_rtcp_modules_[i], sender_);
@@ -1000,19 +996,6 @@
   return modules;
 }
 
-int32_t ViEChannel::SetVoiceChannel(int32_t ve_channel_id,
-                                    VoEVideoSync* ve_sync_interface) {
-  RTC_DCHECK(!sender_);
-  return vie_sync_.ConfigureSync(ve_channel_id, ve_sync_interface,
-                                 rtp_rtcp_modules_[0],
-                                 vie_receiver_.GetRtpReceiver());
-}
-
-int32_t ViEChannel::VoiceChannel() {
-  RTC_DCHECK(!sender_);
-  return vie_sync_.VoiceChannel();
-}
-
 void ViEChannel::RegisterPreRenderCallback(
     I420FrameCallback* pre_render_callback) {
   RTC_DCHECK(!sender_);
diff --git a/webrtc/video/vie_channel.h b/webrtc/video/vie_channel.h
index 320ce7c..8e9cc1b 100644
--- a/webrtc/video/vie_channel.h
+++ b/webrtc/video/vie_channel.h
@@ -211,10 +211,6 @@
   int32_t ResendPackets(const uint16_t* sequence_numbers,
                         uint16_t length) override;
 
-  int32_t SetVoiceChannel(int32_t ve_channel_id,
-                          VoEVideoSync* ve_sync_interface);
-  int32_t VoiceChannel();
-
   void RegisterPreRenderCallback(I420FrameCallback* pre_render_callback);
 
   void RegisterSendFrameCountObserver(FrameCountObserver* observer);
@@ -359,7 +355,6 @@
 
   VideoCodingModule* const vcm_;
   ViEReceiver vie_receiver_;
-  ViESyncModule vie_sync_;
 
   // Helper to report call statistics.
   rtc::scoped_ptr<ChannelStatsObserver> stats_observer_;
diff --git a/webrtc/video/vie_sync_module.cc b/webrtc/video/vie_sync_module.cc
index 0a6bc8e..dc924fb 100644
--- a/webrtc/video/vie_sync_module.cc
+++ b/webrtc/video/vie_sync_module.cc
@@ -10,6 +10,7 @@
 
 #include "webrtc/video/vie_sync_module.h"
 
+#include "webrtc/base/checks.h"
 #include "webrtc/base/logging.h"
 #include "webrtc/base/trace_event.h"
 #include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h"
@@ -60,17 +61,19 @@
 ViESyncModule::~ViESyncModule() {
 }
 
-int ViESyncModule::ConfigureSync(int voe_channel_id,
-                                 VoEVideoSync* voe_sync_interface,
-                                 RtpRtcp* video_rtcp_module,
-                                 RtpReceiver* video_receiver) {
+void ViESyncModule::ConfigureSync(int voe_channel_id,
+                                  VoEVideoSync* voe_sync_interface,
+                                  RtpRtcp* video_rtcp_module,
+                                  RtpReceiver* video_receiver) {
+  if (voe_channel_id != -1)
+    RTC_DCHECK(voe_sync_interface);
   rtc::CritScope lock(&data_cs_);
   // Prevent expensive no-ops.
   if (voe_channel_id_ == voe_channel_id &&
       voe_sync_interface_ == voe_sync_interface &&
       video_receiver_ == video_receiver &&
       video_rtp_rtcp_ == video_rtcp_module) {
-    return 0;
+    return;
   }
   voe_channel_id_ = voe_channel_id;
   voe_sync_interface_ = voe_sync_interface;
@@ -78,20 +81,6 @@
   video_rtp_rtcp_ = video_rtcp_module;
   sync_.reset(
       new StreamSynchronization(video_rtp_rtcp_->SSRC(), voe_channel_id));
-
-  if (!voe_sync_interface) {
-    voe_channel_id_ = -1;
-    if (voe_channel_id >= 0) {
-      // Trying to set a voice channel but no interface exist.
-      return -1;
-    }
-    return 0;
-  }
-  return 0;
-}
-
-int ViESyncModule::VoiceChannel() {
-  return voe_channel_id_;
 }
 
 int64_t ViESyncModule::TimeUntilNextProcess() {
diff --git a/webrtc/video/vie_sync_module.h b/webrtc/video/vie_sync_module.h
index 48c9410..779eb00 100644
--- a/webrtc/video/vie_sync_module.h
+++ b/webrtc/video/vie_sync_module.h
@@ -33,12 +33,10 @@
   explicit ViESyncModule(VideoCodingModule* vcm);
   ~ViESyncModule();
 
-  int ConfigureSync(int voe_channel_id,
-                    VoEVideoSync* voe_sync_interface,
-                    RtpRtcp* video_rtcp_module,
-                    RtpReceiver* video_receiver);
-
-  int VoiceChannel();
+  void ConfigureSync(int voe_channel_id,
+                     VoEVideoSync* voe_sync_interface,
+                     RtpRtcp* video_rtcp_module,
+                     RtpReceiver* video_receiver);
 
   // Implements Module.
   int64_t TimeUntilNextProcess() override;