| Index: webrtc/video/rtp_streams_synchronizer.cc
 | 
| diff --git a/webrtc/video/vie_sync_module.cc b/webrtc/video/rtp_streams_synchronizer.cc
 | 
| similarity index 65%
 | 
| rename from webrtc/video/vie_sync_module.cc
 | 
| rename to webrtc/video/rtp_streams_synchronizer.cc
 | 
| index 2e62ff8143938d3591925056657b8a84bfbb082e..75dd8cd1b3ad4571cc36b2608c754bdb7104f941 100644
 | 
| --- a/webrtc/video/vie_sync_module.cc
 | 
| +++ b/webrtc/video/rtp_streams_synchronizer.cc
 | 
| @@ -8,7 +8,7 @@
 | 
|   *  be found in the AUTHORS file in the root of the source tree.
 | 
|   */
 | 
|  
 | 
| -#include "webrtc/video/vie_sync_module.h"
 | 
| +#include "webrtc/video/rtp_streams_synchronizer.h"
 | 
|  
 | 
|  #include "webrtc/base/checks.h"
 | 
|  #include "webrtc/base/logging.h"
 | 
| @@ -25,17 +25,17 @@
 | 
|  namespace webrtc {
 | 
|  namespace {
 | 
|  int UpdateMeasurements(StreamSynchronization::Measurements* stream,
 | 
| -                       const RtpRtcp& rtp_rtcp, const RtpReceiver& receiver) {
 | 
| -  if (!receiver.Timestamp(&stream->latest_timestamp))
 | 
| +                       RtpRtcp* rtp_rtcp, RtpReceiver* receiver) {
 | 
| +  if (!receiver->Timestamp(&stream->latest_timestamp))
 | 
|      return -1;
 | 
| -  if (!receiver.LastReceivedTimeMs(&stream->latest_receive_time_ms))
 | 
| +  if (!receiver->LastReceivedTimeMs(&stream->latest_receive_time_ms))
 | 
|      return -1;
 | 
|  
 | 
|    uint32_t ntp_secs = 0;
 | 
|    uint32_t ntp_frac = 0;
 | 
|    uint32_t rtp_timestamp = 0;
 | 
| -  if (rtp_rtcp.RemoteNTP(&ntp_secs, &ntp_frac, nullptr, nullptr,
 | 
| -                         &rtp_timestamp) != 0) {
 | 
| +  if (rtp_rtcp->RemoteNTP(&ntp_secs, &ntp_frac, nullptr, nullptr,
 | 
| +                          &rtp_timestamp) != 0) {
 | 
|      return -1;
 | 
|    }
 | 
|  
 | 
| @@ -49,57 +49,69 @@ int UpdateMeasurements(StreamSynchronization::Measurements* stream,
 | 
|  }
 | 
|  }  // namespace
 | 
|  
 | 
| -ViESyncModule::ViESyncModule(vcm::VideoReceiver* video_receiver)
 | 
| -    : video_receiver_(video_receiver),
 | 
| -      clock_(Clock::GetRealTimeClock()),
 | 
| -      rtp_receiver_(nullptr),
 | 
| -      video_rtp_rtcp_(nullptr),
 | 
| +RtpStreamsSynchronizer::RtpStreamsSynchronizer(
 | 
| +    vcm::VideoReceiver* video_receiver,
 | 
| +    RtpStreamReceiver* rtp_stream_receiver)
 | 
| +    : clock_(Clock::GetRealTimeClock()),
 | 
| +      video_receiver_(video_receiver),
 | 
| +      video_rtp_receiver_(rtp_stream_receiver->GetRtpReceiver()),
 | 
| +      video_rtp_rtcp_(rtp_stream_receiver->rtp_rtcp()),
 | 
|        voe_channel_id_(-1),
 | 
|        voe_sync_interface_(nullptr),
 | 
| -      last_sync_time_(rtc::TimeNanos()),
 | 
| -      sync_() {}
 | 
| -
 | 
| -ViESyncModule::~ViESyncModule() {
 | 
| +      audio_rtp_receiver_(nullptr),
 | 
| +      audio_rtp_rtcp_(nullptr),
 | 
| +      sync_(),
 | 
| +      last_sync_time_(rtc::TimeNanos()) {
 | 
| +  process_thread_checker_.DetachFromThread();
 | 
|  }
 | 
|  
 | 
| -void ViESyncModule::ConfigureSync(int voe_channel_id,
 | 
| -                                  VoEVideoSync* voe_sync_interface,
 | 
| -                                  RtpRtcp* video_rtcp_module,
 | 
| -                                  RtpReceiver* rtp_receiver) {
 | 
| +void RtpStreamsSynchronizer::ConfigureSync(int voe_channel_id,
 | 
| +                                           VoEVideoSync* voe_sync_interface) {
 | 
|    if (voe_channel_id != -1)
 | 
|      RTC_DCHECK(voe_sync_interface);
 | 
| -  rtc::CritScope lock(&data_cs_);
 | 
| -  // Prevent expensive no-ops.
 | 
| +
 | 
| +  rtc::CritScope lock(&crit_);
 | 
|    if (voe_channel_id_ == voe_channel_id &&
 | 
| -      voe_sync_interface_ == voe_sync_interface &&
 | 
| -      rtp_receiver_ == rtp_receiver && video_rtp_rtcp_ == video_rtcp_module) {
 | 
| +      voe_sync_interface_ == voe_sync_interface) {
 | 
| +    // This prevents expensive no-ops.
 | 
|      return;
 | 
|    }
 | 
|    voe_channel_id_ = voe_channel_id;
 | 
|    voe_sync_interface_ = voe_sync_interface;
 | 
| -  rtp_receiver_ = rtp_receiver;
 | 
| -  video_rtp_rtcp_ = video_rtcp_module;
 | 
| -  sync_.reset(
 | 
| -      new StreamSynchronization(video_rtp_rtcp_->SSRC(), voe_channel_id));
 | 
| +
 | 
| +  audio_rtp_rtcp_ = nullptr;
 | 
| +  audio_rtp_receiver_ = nullptr;
 | 
| +  sync_.reset(nullptr);
 | 
| +
 | 
| +  if (voe_channel_id_ != -1) {
 | 
| +    voe_sync_interface_->GetRtpRtcp(voe_channel_id_, &audio_rtp_rtcp_,
 | 
| +                                    &audio_rtp_receiver_);
 | 
| +    RTC_DCHECK(audio_rtp_rtcp_);
 | 
| +    RTC_DCHECK(audio_rtp_receiver_);
 | 
| +    sync_.reset(new StreamSynchronization(video_rtp_rtcp_->SSRC(),
 | 
| +                                          voe_channel_id_));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
| -int64_t ViESyncModule::TimeUntilNextProcess() {
 | 
| +int64_t RtpStreamsSynchronizer::TimeUntilNextProcess() {
 | 
| +  RTC_DCHECK_RUN_ON(&process_thread_checker_);
 | 
|    const int64_t kSyncIntervalMs = 1000;
 | 
|    return kSyncIntervalMs -
 | 
|        (rtc::TimeNanos() - last_sync_time_) / rtc::kNumNanosecsPerMillisec;
 | 
|  }
 | 
|  
 | 
| -void ViESyncModule::Process() {
 | 
| -  rtc::CritScope lock(&data_cs_);
 | 
| -  last_sync_time_ = rtc::TimeNanos();
 | 
| +void RtpStreamsSynchronizer::Process() {
 | 
| +  RTC_DCHECK_RUN_ON(&process_thread_checker_);
 | 
|  
 | 
|    const int current_video_delay_ms = video_receiver_->Delay();
 | 
| +  last_sync_time_ = rtc::TimeNanos();
 | 
|  
 | 
| +  rtc::CritScope lock(&crit_);
 | 
|    if (voe_channel_id_ == -1) {
 | 
|      return;
 | 
|    }
 | 
| -  assert(video_rtp_rtcp_ && voe_sync_interface_);
 | 
| -  assert(sync_.get());
 | 
| +  RTC_DCHECK(voe_sync_interface_);
 | 
| +  RTC_DCHECK(sync_.get());
 | 
|  
 | 
|    int audio_jitter_buffer_delay_ms = 0;
 | 
|    int playout_buffer_delay_ms = 0;
 | 
| @@ -111,22 +123,13 @@ void ViESyncModule::Process() {
 | 
|    const int current_audio_delay_ms = audio_jitter_buffer_delay_ms +
 | 
|        playout_buffer_delay_ms;
 | 
|  
 | 
| -  RtpRtcp* voice_rtp_rtcp = nullptr;
 | 
| -  RtpReceiver* voice_receiver = nullptr;
 | 
| -  if (voe_sync_interface_->GetRtpRtcp(voe_channel_id_, &voice_rtp_rtcp,
 | 
| -                                      &voice_receiver) != 0) {
 | 
| -    return;
 | 
| -  }
 | 
| -  assert(voice_rtp_rtcp);
 | 
| -  assert(voice_receiver);
 | 
| -
 | 
| -  if (UpdateMeasurements(&video_measurement_, *video_rtp_rtcp_,
 | 
| -                         *rtp_receiver_) != 0) {
 | 
| +  if (UpdateMeasurements(&video_measurement_, video_rtp_rtcp_,
 | 
| +                         video_rtp_receiver_) != 0) {
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| -  if (UpdateMeasurements(&audio_measurement_, *voice_rtp_rtcp,
 | 
| -                         *voice_receiver) != 0) {
 | 
| +  if (UpdateMeasurements(&audio_measurement_, audio_rtp_rtcp_,
 | 
| +                         audio_rtp_receiver_) != 0) {
 | 
|      return;
 | 
|    }
 | 
|  
 | 
| @@ -158,9 +161,9 @@ void ViESyncModule::Process() {
 | 
|    video_receiver_->SetMinimumPlayoutDelay(target_video_delay_ms);
 | 
|  }
 | 
|  
 | 
| -bool ViESyncModule::GetStreamSyncOffsetInMs(const VideoFrame& frame,
 | 
| -                                            int64_t* stream_offset_ms) const {
 | 
| -  rtc::CritScope lock(&data_cs_);
 | 
| +bool RtpStreamsSynchronizer::GetStreamSyncOffsetInMs(
 | 
| +    const VideoFrame& frame, int64_t* stream_offset_ms) const {
 | 
| +  rtc::CritScope lock(&crit_);
 | 
|    if (voe_channel_id_ == -1)
 | 
|      return false;
 | 
|  
 | 
| 
 |