Remove VoEVideoSync interface.

The removed tests are covered by cases in call_perf_tests.

BUG=webrtc:4690

Review-Url: https://codereview.webrtc.org/2672583002
Cr-Commit-Position: refs/heads/master@{#16621}
diff --git a/webrtc/audio/audio_receive_stream.cc b/webrtc/audio/audio_receive_stream.cc
index 05d6edf..2fe199f 100644
--- a/webrtc/audio/audio_receive_stream.cc
+++ b/webrtc/audio/audio_receive_stream.cc
@@ -260,11 +260,7 @@
     return rtc::Optional<Syncable::Info>();
   }
 
-  int jitter_buffer_delay_ms = 0;
-  int playout_buffer_delay_ms = 0;
-  channel_proxy_->GetDelayEstimate(&jitter_buffer_delay_ms,
-                                   &playout_buffer_delay_ms);
-  info.current_delay_ms = jitter_buffer_delay_ms + playout_buffer_delay_ms;
+  info.current_delay_ms = channel_proxy_->GetDelayEstimate();
   return rtc::Optional<Syncable::Info>(info);
 }
 
diff --git a/webrtc/modules/audio_coding/include/audio_coding_module.h b/webrtc/modules/audio_coding/include/audio_coding_module.h
index cd99579..7843fb8 100644
--- a/webrtc/modules/audio_coding/include/audio_coding_module.h
+++ b/webrtc/modules/audio_coding/include/audio_coding_module.h
@@ -637,7 +637,8 @@
   //
   virtual int SetMaximumPlayoutDelay(int time_ms) = 0;
 
-  //
+  // TODO(kwiberg): Consider if this is needed anymore, now that voe::Channel
+  //                doesn't use it.
   // The shortest latency, in milliseconds, required by jitter buffer. This
   // is computed based on inter-arrival times and playout mode of NetEq. The
   // actual delay is the maximum of least-required-delay and the minimum-delay
diff --git a/webrtc/test/mock_voe_channel_proxy.h b/webrtc/test/mock_voe_channel_proxy.h
index ea51154..7932473 100644
--- a/webrtc/test/mock_voe_channel_proxy.h
+++ b/webrtc/test/mock_voe_channel_proxy.h
@@ -76,8 +76,6 @@
   MOCK_METHOD0(DisassociateSendChannel, void());
   MOCK_CONST_METHOD2(GetRtpRtcp, void(RtpRtcp** rtp_rtcp,
                                       RtpReceiver** rtp_receiver));
-  MOCK_CONST_METHOD2(GetDelayEstimate, void(int* jitter_buffer_delay_ms,
-                                            int* playout_buffer_delay_ms));
   MOCK_CONST_METHOD0(GetPlayoutTimestamp, uint32_t());
   MOCK_METHOD1(SetMinimumPlayoutDelay, void(int delay_ms));
   MOCK_CONST_METHOD1(GetRecCodec, bool(CodecInst* codec_inst));
diff --git a/webrtc/test/mock_voice_engine.h b/webrtc/test/mock_voice_engine.h
index cd0b7d2..6177304 100644
--- a/webrtc/test/mock_voice_engine.h
+++ b/webrtc/test/mock_voice_engine.h
@@ -289,22 +289,6 @@
                int(int channel, bool& enable, int& redPayloadtype));
   MOCK_METHOD3(SetNACKStatus, int(int channel, bool enable, int maxNoPackets));
 
-  // VoEVideoSync
-  MOCK_METHOD1(GetPlayoutBufferSize, int(int& buffer_ms));
-  MOCK_METHOD2(SetMinimumPlayoutDelay, int(int channel, int delay_ms));
-  MOCK_METHOD3(GetDelayEstimate,
-               int(int channel,
-                   int* jitter_buffer_delay_ms,
-                   int* playout_buffer_delay_ms));
-  MOCK_CONST_METHOD1(GetLeastRequiredDelayMs, int(int channel));
-  MOCK_METHOD2(SetInitTimestamp, int(int channel, unsigned int timestamp));
-  MOCK_METHOD2(SetInitSequenceNumber, int(int channel, short sequenceNumber));
-  MOCK_METHOD2(GetPlayoutTimestamp, int(int channel, unsigned int& timestamp));
-  MOCK_METHOD3(GetRtpRtcp,
-               int(int channel,
-                   RtpRtcp** rtpRtcpModule,
-                   RtpReceiver** rtp_receiver));
-
   // VoEVolumeControl
   MOCK_METHOD1(SetSpeakerVolume, int(unsigned int volume));
   MOCK_METHOD1(GetSpeakerVolume, int(unsigned int& volume));
diff --git a/webrtc/voice_engine/BUILD.gn b/webrtc/voice_engine/BUILD.gn
index 028e4d1..e2755f3 100644
--- a/webrtc/voice_engine/BUILD.gn
+++ b/webrtc/voice_engine/BUILD.gn
@@ -83,7 +83,6 @@
     "include/voe_neteq_stats.h",
     "include/voe_network.h",
     "include/voe_rtp_rtcp.h",
-    "include/voe_video_sync.h",
     "include/voe_volume_control.h",
     "monitor_module.cc",
     "monitor_module.h",
@@ -115,8 +114,6 @@
     "voe_network_impl.h",
     "voe_rtp_rtcp_impl.cc",
     "voe_rtp_rtcp_impl.h",
-    "voe_video_sync_impl.cc",
-    "voe_video_sync_impl.h",
     "voe_volume_control_impl.cc",
     "voe_volume_control_impl.h",
     "voice_engine_defines.h",
@@ -376,7 +373,6 @@
         "test/auto_test/standard/rtp_rtcp_before_streaming_test.cc",
         "test/auto_test/standard/rtp_rtcp_extensions.cc",
         "test/auto_test/standard/rtp_rtcp_test.cc",
-        "test/auto_test/standard/video_sync_test.cc",
         "test/auto_test/standard/voe_base_misc_test.cc",
         "test/auto_test/standard/volume_test.cc",
         "test/auto_test/voe_conference_test.cc",
diff --git a/webrtc/voice_engine/channel.cc b/webrtc/voice_engine/channel.cc
index d69654f..006e3db 100644
--- a/webrtc/voice_engine/channel.cc
+++ b/webrtc/voice_engine/channel.cc
@@ -1150,16 +1150,16 @@
 int32_t Channel::StartSend() {
   WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
                "Channel::StartSend()");
-  // Resume the previous sequence number which was reset by StopSend().
-  // This needs to be done before |sending| is set to true.
-  if (send_sequence_number_)
-    SetInitSequenceNumber(send_sequence_number_);
-
   if (channel_state_.Get().sending) {
     return 0;
   }
   channel_state_.SetSending(true);
 
+  // Resume the previous sequence number which was reset by StopSend(). This
+  // needs to be done before |sending| is set to true on the RTP/RTCP module.
+  if (send_sequence_number_) {
+    _rtpRtcpModule->SetSequenceNumber(send_sequence_number_);
+  }
   _rtpRtcpModule->SetSendingMediaStatus(true);
   if (_rtpRtcpModule->SetSendingStatus(true) != 0) {
     _engineStatisticsPtr->SetLastError(
@@ -2740,23 +2740,9 @@
   audio_coding_->GetDecodingCallStatistics(stats);
 }
 
-bool Channel::GetDelayEstimate(int* jitter_buffer_delay_ms,
-                               int* playout_buffer_delay_ms) const {
-  rtc::CritScope lock(&video_sync_lock_);
-  *jitter_buffer_delay_ms = audio_coding_->FilteredCurrentDelayMs();
-  *playout_buffer_delay_ms = playout_delay_ms_;
-  return true;
-}
-
 uint32_t Channel::GetDelayEstimate() const {
-  int jitter_buffer_delay_ms = 0;
-  int playout_buffer_delay_ms = 0;
-  GetDelayEstimate(&jitter_buffer_delay_ms, &playout_buffer_delay_ms);
-  return jitter_buffer_delay_ms + playout_buffer_delay_ms;
-}
-
-int Channel::LeastRequiredDelayMs() const {
-  return audio_coding_->LeastRequiredDelayMs();
+  rtc::CritScope lock(&video_sync_lock_);
+  return audio_coding_->FilteredCurrentDelayMs() + playout_delay_ms_;
 }
 
 int Channel::SetMinimumPlayoutDelay(int delayMs) {
@@ -2794,30 +2780,6 @@
   return 0;
 }
 
-int Channel::SetInitTimestamp(unsigned int timestamp) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::SetInitTimestamp()");
-  if (channel_state_.Get().sending) {
-    _engineStatisticsPtr->SetLastError(VE_SENDING, kTraceError,
-                                       "SetInitTimestamp() already sending");
-    return -1;
-  }
-  _rtpRtcpModule->SetStartTimestamp(timestamp);
-  return 0;
-}
-
-int Channel::SetInitSequenceNumber(short sequenceNumber) {
-  WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_instanceId, _channelId),
-               "Channel::SetInitSequenceNumber()");
-  if (channel_state_.Get().sending) {
-    _engineStatisticsPtr->SetLastError(
-        VE_SENDING, kTraceError, "SetInitSequenceNumber() already sending");
-    return -1;
-  }
-  _rtpRtcpModule->SetSequenceNumber(sequenceNumber);
-  return 0;
-}
-
 int Channel::GetRtpRtcp(RtpRtcp** rtpRtcpModule,
                         RtpReceiver** rtp_receiver) const {
   *rtpRtcpModule = _rtpRtcpModule.get();
diff --git a/webrtc/voice_engine/channel.h b/webrtc/voice_engine/channel.h
index d53cc06..03b19cc 100644
--- a/webrtc/voice_engine/channel.h
+++ b/webrtc/voice_engine/channel.h
@@ -258,17 +258,10 @@
   int GetNetworkStatistics(NetworkStatistics& stats);
   void GetDecodingCallStatistics(AudioDecodingCallStats* stats) const;
 
-  // VoEVideoSync
-  bool GetDelayEstimate(int* jitter_buffer_delay_ms,
-                        int* playout_buffer_delay_ms) const;
+  // Audio+Video Sync
   uint32_t GetDelayEstimate() const;
-  int LeastRequiredDelayMs() const;
   int SetMinimumPlayoutDelay(int delayMs);
   int GetPlayoutTimestamp(unsigned int& timestamp);
-  int SetInitTimestamp(unsigned int timestamp);
-  int SetInitSequenceNumber(short sequenceNumber);
-
-  // VoEVideoSyncExtended
   int GetRtpRtcp(RtpRtcp** rtpRtcpModule, RtpReceiver** rtp_receiver) const;
 
   // DTMF
diff --git a/webrtc/voice_engine/channel_proxy.cc b/webrtc/voice_engine/channel_proxy.cc
index a58b2e1..4e690fb 100644
--- a/webrtc/voice_engine/channel_proxy.cc
+++ b/webrtc/voice_engine/channel_proxy.cc
@@ -23,22 +23,24 @@
 ChannelProxy::ChannelProxy(const ChannelOwner& channel_owner) :
     channel_owner_(channel_owner) {
   RTC_CHECK(channel_owner_.channel());
+  module_process_thread_checker_.DetachFromThread();
 }
 
 ChannelProxy::~ChannelProxy() {}
 
 void ChannelProxy::SetRTCPStatus(bool enable) {
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetRTCPStatus(enable);
 }
 
 void ChannelProxy::SetLocalSSRC(uint32_t ssrc) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->SetLocalSSRC(ssrc);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::SetRTCP_CNAME(const std::string& c_name) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   // Note: VoERTP_RTCP::SetRTCP_CNAME() accepts a char[256] array.
   std::string c_name_limited = c_name.substr(0, 255);
   int error = channel()->SetRTCP_CNAME(c_name_limited.c_str());
@@ -46,29 +48,29 @@
 }
 
 void ChannelProxy::SetNACKStatus(bool enable, int max_packets) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetNACKStatus(enable, max_packets);
 }
 
 void ChannelProxy::SetSendAudioLevelIndicationStatus(bool enable, int id) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->SetSendAudioLevelIndicationStatus(enable, id);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::SetReceiveAudioLevelIndicationStatus(bool enable, int id) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->SetReceiveAudioLevelIndicationStatus(enable, id);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::EnableSendTransportSequenceNumber(int id) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->EnableSendTransportSequenceNumber(id);
 }
 
 void ChannelProxy::EnableReceiveTransportSequenceNumber(int id) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->EnableReceiveTransportSequenceNumber(id);
 }
 
@@ -77,7 +79,7 @@
     TransportFeedbackObserver* transport_feedback_observer,
     PacketRouter* packet_router,
     RtcpBandwidthObserver* bandwidth_observer) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->RegisterSenderCongestionControlObjects(
       rtp_packet_sender, transport_feedback_observer, packet_router,
       bandwidth_observer);
@@ -85,17 +87,17 @@
 
 void ChannelProxy::RegisterReceiverCongestionControlObjects(
     PacketRouter* packet_router) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->RegisterReceiverCongestionControlObjects(packet_router);
 }
 
 void ChannelProxy::ResetCongestionControlObjects() {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->ResetCongestionControlObjects();
 }
 
 CallStatistics ChannelProxy::GetRTCPStatistics() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   CallStatistics stats = {0};
   int error = channel()->GetRTPStatistics(stats);
   RTC_DCHECK_EQ(0, error);
@@ -103,7 +105,7 @@
 }
 
 std::vector<ReportBlock> ChannelProxy::GetRemoteRTCPReportBlocks() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   std::vector<webrtc::ReportBlock> blocks;
   int error = channel()->GetRemoteRTCPReportBlocks(&blocks);
   RTC_DCHECK_EQ(0, error);
@@ -111,7 +113,7 @@
 }
 
 NetworkStatistics ChannelProxy::GetNetworkStatistics() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   NetworkStatistics stats = {0};
   int error = channel()->GetNetworkStatistics(stats);
   RTC_DCHECK_EQ(0, error);
@@ -119,14 +121,14 @@
 }
 
 AudioDecodingCallStats ChannelProxy::GetDecodingCallStatistics() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   AudioDecodingCallStats stats;
   channel()->GetDecodingCallStatistics(&stats);
   return stats;
 }
 
 int32_t ChannelProxy::GetSpeechOutputLevelFullRange() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   uint32_t level = 0;
   int error = channel()->GetSpeechOutputLevelFullRange(level);
   RTC_DCHECK_EQ(0, error);
@@ -134,53 +136,55 @@
 }
 
 uint32_t ChannelProxy::GetDelayEstimate() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread() ||
+             module_process_thread_checker_.CalledOnValidThread());
   return channel()->GetDelayEstimate();
 }
 
 bool ChannelProxy::SetSendTelephoneEventPayloadType(int payload_type,
                                                     int payload_frequency) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SetSendTelephoneEventPayloadType(payload_type,
                                                      payload_frequency) == 0;
 }
 
 bool ChannelProxy::SendTelephoneEventOutband(int event, int duration_ms) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SendTelephoneEventOutband(event, duration_ms) == 0;
 }
 
 void ChannelProxy::SetBitrate(int bitrate_bps, int64_t probing_interval_ms) {
-  // May be called on different threads and needs to be handled by the channel.
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread() ||
+             module_process_thread_checker_.CalledOnValidThread());
   channel()->SetBitRate(bitrate_bps, probing_interval_ms);
 }
 
 void ChannelProxy::SetRecPayloadType(int payload_type,
                                      const SdpAudioFormat& format) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   const int result = channel()->SetRecPayloadType(payload_type, format);
   RTC_DCHECK_EQ(0, result);
 }
 
 void ChannelProxy::SetSink(std::unique_ptr<AudioSinkInterface> sink) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetSink(std::move(sink));
 }
 
 void ChannelProxy::SetInputMute(bool muted) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->SetInputMute(muted);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::RegisterExternalTransport(Transport* transport) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->RegisterExternalTransport(transport);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::DeRegisterExternalTransport() {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->DeRegisterExternalTransport();
 }
 
@@ -198,35 +202,35 @@
 
 const rtc::scoped_refptr<AudioDecoderFactory>&
     ChannelProxy::GetAudioDecoderFactory() const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->GetAudioDecoderFactory();
 }
 
 void ChannelProxy::SetChannelOutputVolumeScaling(float scaling) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   int error = channel()->SetChannelOutputVolumeScaling(scaling);
   RTC_DCHECK_EQ(0, error);
 }
 
 void ChannelProxy::SetRtcEventLog(RtcEventLog* event_log) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetRtcEventLog(event_log);
 }
 
 void ChannelProxy::EnableAudioNetworkAdaptor(const std::string& config_string) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   bool ret = channel()->EnableAudioNetworkAdaptor(config_string);
   RTC_DCHECK(ret);
 ;}
 
 void ChannelProxy::DisableAudioNetworkAdaptor() {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->DisableAudioNetworkAdaptor();
 }
 
 void ChannelProxy::SetReceiverFrameLengthRange(int min_frame_length_ms,
                                                int max_frame_length_ms) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetReceiverFrameLengthRange(min_frame_length_ms,
                                          max_frame_length_ms);
 }
@@ -234,51 +238,42 @@
 AudioMixer::Source::AudioFrameInfo ChannelProxy::GetAudioFrameWithInfo(
     int sample_rate_hz,
     AudioFrame* audio_frame) {
-  RTC_DCHECK_RUNS_SERIALIZED(&race_checker_);
+  RTC_DCHECK_RUNS_SERIALIZED(&audio_thread_race_checker_);
   return channel()->GetAudioFrameWithInfo(sample_rate_hz, audio_frame);
 }
 
 int ChannelProxy::NeededFrequency() const {
+  RTC_DCHECK_RUNS_SERIALIZED(&audio_thread_race_checker_);
   return static_cast<int>(channel()->NeededFrequency(-1));
 }
 
 void ChannelProxy::SetTransportOverhead(int transport_overhead_per_packet) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetTransportOverhead(transport_overhead_per_packet);
 }
 
 void ChannelProxy::AssociateSendChannel(
     const ChannelProxy& send_channel_proxy) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->set_associate_send_channel(send_channel_proxy.channel_owner_);
 }
 
 void ChannelProxy::DisassociateSendChannel() {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->set_associate_send_channel(ChannelOwner(nullptr));
 }
 
 void ChannelProxy::GetRtpRtcp(RtpRtcp** rtp_rtcp,
                               RtpReceiver** rtp_receiver) const {
-  // Called on Call's module_process_thread_.
+  RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
   RTC_DCHECK(rtp_rtcp);
   RTC_DCHECK(rtp_receiver);
   int error = channel()->GetRtpRtcp(rtp_rtcp, rtp_receiver);
   RTC_DCHECK_EQ(0, error);
 }
 
-void ChannelProxy::GetDelayEstimate(int* jitter_buffer_delay_ms,
-                                    int* playout_buffer_delay_ms) const {
-  // Called on Call's module_process_thread_.
-  RTC_DCHECK(jitter_buffer_delay_ms);
-  RTC_DCHECK(playout_buffer_delay_ms);
-  bool error = channel()->GetDelayEstimate(jitter_buffer_delay_ms,
-                                           playout_buffer_delay_ms);
-  RTC_DCHECK(error);
-}
-
 uint32_t ChannelProxy::GetPlayoutTimestamp() const {
-  // Called on video capture thread.
+  RTC_DCHECK_RUNS_SERIALIZED(&video_capture_thread_race_checker_);
   unsigned int timestamp = 0;
   int error = channel()->GetPlayoutTimestamp(timestamp);
   RTC_DCHECK(!error || timestamp == 0);
@@ -286,7 +281,7 @@
 }
 
 void ChannelProxy::SetMinimumPlayoutDelay(int delay_ms) {
-  // Called on Call's module_process_thread_.
+  RTC_DCHECK(module_process_thread_checker_.CalledOnValidThread());
   // Limit to range accepted by both VoE and ACM, so we're at least getting as
   // close as possible, instead of failing.
   delay_ms = std::max(0, std::min(delay_ms, 10000));
@@ -295,42 +290,42 @@
 }
 
 void ChannelProxy::SetRtcpRttStats(RtcpRttStats* rtcp_rtt_stats) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   channel()->SetRtcpRttStats(rtcp_rtt_stats);
 }
 
 bool ChannelProxy::GetRecCodec(CodecInst* codec_inst) const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->GetRecCodec(*codec_inst) == 0;
 }
 
 bool ChannelProxy::GetSendCodec(CodecInst* codec_inst) const {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->GetSendCodec(*codec_inst) == 0;
 }
 
 bool ChannelProxy::SetVADStatus(bool enable) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SetVADStatus(enable, VADNormal, false) == 0;
 }
 
 bool ChannelProxy::SetCodecFECStatus(bool enable) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SetCodecFECStatus(enable) == 0;
 }
 
 bool ChannelProxy::SetOpusDtx(bool enable) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SetOpusDtx(enable) == 0;
 }
 
 bool ChannelProxy::SetOpusMaxPlaybackRate(int frequency_hz) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   return channel()->SetOpusMaxPlaybackRate(frequency_hz) == 0;
 }
 
 bool ChannelProxy::SetSendCodec(const CodecInst& codec_inst) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   // Validation code copied from VoECodecImpl::SetSendCodec().
   if ((STR_CASE_CMP(codec_inst.plname, "L16") == 0) &&
       (codec_inst.pacsize >= 960)) {
@@ -352,7 +347,7 @@
 
 bool ChannelProxy::SetSendCNPayloadType(int type,
                                         PayloadFrequencies frequency) {
-  RTC_DCHECK(thread_checker_.CalledOnValidThread());
+  RTC_DCHECK(worker_thread_checker_.CalledOnValidThread());
   // Validation code copied from VoECodecImpl::SetSendCNPayloadType().
   if (type < 96 || type > 127) {
     // Only allow dynamic range: 96 to 127
diff --git a/webrtc/voice_engine/channel_proxy.h b/webrtc/voice_engine/channel_proxy.h
index 966abc4..b70dcc4 100644
--- a/webrtc/voice_engine/channel_proxy.h
+++ b/webrtc/voice_engine/channel_proxy.h
@@ -105,8 +105,6 @@
   virtual void DisassociateSendChannel();
   virtual void GetRtpRtcp(RtpRtcp** rtp_rtcp,
                           RtpReceiver** rtp_receiver) const;
-  virtual void GetDelayEstimate(int* jitter_buffer_delay_ms,
-                                int* playout_buffer_delay_ms) const;
   virtual uint32_t GetPlayoutTimestamp() const;
   virtual void SetMinimumPlayoutDelay(int delay_ms);
   virtual void SetRtcpRttStats(RtcpRttStats* rtcp_rtt_stats);
@@ -122,8 +120,18 @@
  private:
   Channel* channel() const;
 
-  rtc::ThreadChecker thread_checker_;
-  rtc::RaceChecker race_checker_;
+  // Thread checkers document and lock usage of some methods on voe::Channel to
+  // specific threads we know about. The goal is to eventually split up
+  // voe::Channel into parts with single-threaded semantics, and thereby reduce
+  // the need for locks.
+  rtc::ThreadChecker worker_thread_checker_;
+  rtc::ThreadChecker module_process_thread_checker_;
+  // Methods accessed from audio and video threads are checked for sequential-
+  // only access. We don't necessarily own and control these threads, so thread
+  // checkers cannot be used. E.g. Chromium may transfer "ownership" from one
+  // audio thread to another, but access is still sequential.
+  rtc::RaceChecker audio_thread_race_checker_;
+  rtc::RaceChecker video_capture_thread_race_checker_;
   ChannelOwner channel_owner_;
 
   RTC_DISALLOW_COPY_AND_ASSIGN(ChannelProxy);
diff --git a/webrtc/voice_engine/include/voe_video_sync.h b/webrtc/voice_engine/include/voe_video_sync.h
deleted file mode 100644
index 655ba63..0000000
--- a/webrtc/voice_engine/include/voe_video_sync.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-// This sub-API supports the following functionalities:
-//
-//  - RTP header modification (time stamp and sequence number fields).
-//  - Playout delay tuning to synchronize the voice with video.
-//  - Playout delay monitoring.
-//
-// Usage example, omitting error checking:
-//
-//  using namespace webrtc;
-//  VoiceEngine* voe = VoiceEngine::Create();
-//  VoEBase* base = VoEBase::GetInterface(voe);
-//  VoEVideoSync* vsync  = VoEVideoSync::GetInterface(voe);
-//  base->Init();
-//  ...
-//  int buffer_ms(0);
-//  vsync->GetPlayoutBufferSize(buffer_ms);
-//  ...
-//  base->Terminate();
-//  base->Release();
-//  vsync->Release();
-//  VoiceEngine::Delete(voe);
-//
-#ifndef WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_H
-#define WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_H
-
-#include "webrtc/common_types.h"
-
-namespace webrtc {
-
-class RtpReceiver;
-class RtpRtcp;
-class VoiceEngine;
-
-class WEBRTC_DLLEXPORT VoEVideoSync {
- public:
-  // Factory for the VoEVideoSync sub-API. Increases an internal
-  // reference counter if successful. Returns NULL if the API is not
-  // supported or if construction fails.
-  static VoEVideoSync* GetInterface(VoiceEngine* voiceEngine);
-
-  // Releases the VoEVideoSync sub-API and decreases an internal
-  // reference counter. Returns the new reference count. This value should
-  // be zero for all sub-API:s before the VoiceEngine object can be safely
-  // deleted.
-  virtual int Release() = 0;
-
-  // Gets the current sound card buffer size (playout delay).
-  virtual int GetPlayoutBufferSize(int& buffer_ms) = 0;
-
-  // Sets a minimum target delay for the jitter buffer. This delay is
-  // maintained by the jitter buffer, unless channel condition (jitter in
-  // inter-arrival times) dictates a higher required delay. The overall
-  // jitter buffer delay is max of |delay_ms| and the latency that NetEq
-  // computes based on inter-arrival times and its playout mode.
-  virtual int SetMinimumPlayoutDelay(int channel, int delay_ms) = 0;
-
-  // Gets the |jitter_buffer_delay_ms| (including the algorithmic delay), and
-  // the |playout_buffer_delay_ms| for a specified |channel|.
-  virtual int GetDelayEstimate(int channel,
-                               int* jitter_buffer_delay_ms,
-                               int* playout_buffer_delay_ms) = 0;
-
-  // Returns the least required jitter buffer delay. This is computed by the
-  // the jitter buffer based on the inter-arrival time of RTP packets and
-  // playout mode. NetEq maintains this latency unless a higher value is
-  // requested by calling SetMinimumPlayoutDelay().
-  virtual int GetLeastRequiredDelayMs(int channel) const = 0;
-
-  // Manual initialization of the RTP timestamp.
-  virtual int SetInitTimestamp(int channel, unsigned int timestamp) = 0;
-
-  // Manual initialization of the RTP sequence number.
-  virtual int SetInitSequenceNumber(int channel, short sequenceNumber) = 0;
-
-  // Get the received RTP timestamp
-  virtual int GetPlayoutTimestamp(int channel, unsigned int& timestamp) = 0;
-
-  virtual int GetRtpRtcp(int channel,
-                         RtpRtcp** rtpRtcpModule,
-                         RtpReceiver** rtp_receiver) = 0;
-
- protected:
-  VoEVideoSync() {}
-  virtual ~VoEVideoSync() {}
-};
-
-}  // namespace webrtc
-
-#endif  // #ifndef WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_H
diff --git a/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc b/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
index 3c55830..79474d7 100644
--- a/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
+++ b/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.cc
@@ -23,7 +23,6 @@
   voe_apm_ = webrtc::VoEAudioProcessing::GetInterface(voice_engine_);
   voe_network_ = webrtc::VoENetwork::GetInterface(voice_engine_);
   voe_file_ = webrtc::VoEFile::GetInterface(voice_engine_);
-  voe_vsync_ = webrtc::VoEVideoSync::GetInterface(voice_engine_);
   voe_hardware_ = webrtc::VoEHardware::GetInterface(voice_engine_);
   voe_neteq_stats_ = webrtc::VoENetEqStats::GetInterface(voice_engine_);
 }
@@ -36,7 +35,6 @@
   voe_apm_->Release();
   voe_network_->Release();
   voe_file_->Release();
-  voe_vsync_->Release();
   voe_hardware_->Release();
   voe_neteq_stats_->Release();
 
diff --git a/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h b/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h
index 63bb6c0..e9f5a50 100644
--- a/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h
+++ b/webrtc/voice_engine/test/auto_test/fixtures/before_initialization_fixture.h
@@ -24,7 +24,6 @@
 #include "webrtc/voice_engine/include/voe_neteq_stats.h"
 #include "webrtc/voice_engine/include/voe_network.h"
 #include "webrtc/voice_engine/include/voe_rtp_rtcp.h"
-#include "webrtc/voice_engine/include/voe_video_sync.h"
 #include "webrtc/voice_engine/include/voe_volume_control.h"
 #include "webrtc/voice_engine/test/auto_test/voe_test_common.h"
 
@@ -56,7 +55,6 @@
   webrtc::VoEAudioProcessing* voe_apm_;
   webrtc::VoENetwork*         voe_network_;
   webrtc::VoEFile*            voe_file_;
-  webrtc::VoEVideoSync*       voe_vsync_;
   webrtc::VoEHardware*        voe_hardware_;
   webrtc::VoENetEqStats*      voe_neteq_stats_;
 };
diff --git a/webrtc/voice_engine/test/auto_test/standard/video_sync_test.cc b/webrtc/voice_engine/test/auto_test/standard/video_sync_test.cc
deleted file mode 100644
index 0aacd53..0000000
--- a/webrtc/voice_engine/test/auto_test/standard/video_sync_test.cc
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include <math.h>
-
-#include <numeric>
-#include <vector>
-
-#include "webrtc/voice_engine/test/auto_test/fixtures/after_streaming_fixture.h"
-
-#ifdef WEBRTC_IOS
-  const int kMinimumReasonableDelayEstimateMs = 30;
-#else
-  const int kMinimumReasonableDelayEstimateMs = 45;
-#endif  // !WEBRTC_IOS
-
-class VideoSyncTest : public AfterStreamingFixture {
- protected:
-  // This test will verify that delay estimates converge (e.g. the standard
-  // deviation for the last five seconds' estimates is less than 20) without
-  // manual observation. The test runs for 15 seconds, sampling once per second.
-  // All samples are checked so they are greater than |min_estimate|.
-  int CollectEstimatesDuring15Seconds(int min_estimate) {
-    Sleep(1000);
-
-    std::vector<int> all_delay_estimates;
-    for (int second = 0; second < 15; second++) {
-      int jitter_buffer_delay_ms = 0;
-      int playout_buffer_delay_ms = 0;
-      EXPECT_EQ(0, voe_vsync_->GetDelayEstimate(channel_,
-                                                &jitter_buffer_delay_ms,
-                                                &playout_buffer_delay_ms));
-
-      EXPECT_GT(jitter_buffer_delay_ms, min_estimate) <<
-          "The delay estimate can not conceivably get lower than " <<
-          min_estimate << " ms, it's unrealistic.";
-
-      all_delay_estimates.push_back(jitter_buffer_delay_ms);
-      Sleep(1000);
-    }
-
-    return ComputeStandardDeviation(
-        all_delay_estimates.begin() + 10, all_delay_estimates.end());
-  }
-
-  void CheckEstimatesConvergeReasonablyWell(int min_estimate) {
-    float standard_deviation = CollectEstimatesDuring15Seconds(min_estimate);
-    EXPECT_LT(standard_deviation, 30.0f);
-  }
-
-  // Computes the standard deviation by first estimating the sample variance
-  // with an unbiased estimator.
-  float ComputeStandardDeviation(std::vector<int>::const_iterator start,
-                               std::vector<int>::const_iterator end) const {
-    int num_elements = end - start;
-    int mean = std::accumulate(start, end, 0) / num_elements;
-    assert(num_elements > 1);
-
-    float variance = 0;
-    for (; start != end; ++start) {
-      variance += (*start - mean) * (*start - mean) / (num_elements - 1);
-    }
-    return sqrt(variance);
-  }
-};
-
-TEST_F(VideoSyncTest,
-       CanNotGetPlayoutTimestampWhilePlayingWithoutSettingItFirst) {
-  unsigned int ignored;
-  EXPECT_EQ(-1, voe_vsync_->GetPlayoutTimestamp(channel_, ignored));
-}
-
-TEST_F(VideoSyncTest, CannotSetInitTimestampWhilePlaying) {
-  EXPECT_EQ(-1, voe_vsync_->SetInitTimestamp(channel_, 12345));
-}
-
-TEST_F(VideoSyncTest, CannotSetInitSequenceNumberWhilePlaying) {
-  EXPECT_EQ(-1, voe_vsync_->SetInitSequenceNumber(channel_, 123));
-}
-
-TEST_F(VideoSyncTest, CanSetInitTimestampWhileStopped) {
-  EXPECT_EQ(0, voe_base_->StopSend(channel_));
-  EXPECT_EQ(0, voe_vsync_->SetInitTimestamp(channel_, 12345));
-}
-
-TEST_F(VideoSyncTest, CanSetInitSequenceNumberWhileStopped) {
-  EXPECT_EQ(0, voe_base_->StopSend(channel_));
-  EXPECT_EQ(0, voe_vsync_->SetInitSequenceNumber(channel_, 123));
-}
-
-// TODO(phoglund): pending investigation in
-// http://code.google.com/p/webrtc/issues/detail?id=438
-TEST_F(VideoSyncTest,
-       DISABLED_DelayEstimatesStabilizeDuring15sAndAreNotTooLow) {
-  EXPECT_EQ(0, voe_base_->StopSend(channel_));
-  EXPECT_EQ(0, voe_vsync_->SetInitTimestamp(channel_, 12345));
-  EXPECT_EQ(0, voe_vsync_->SetInitSequenceNumber(channel_, 123));
-  EXPECT_EQ(0, voe_base_->StartSend(channel_));
-
-  CheckEstimatesConvergeReasonablyWell(kMinimumReasonableDelayEstimateMs);
-}
-
-// TODO(phoglund): pending investigation in
-// http://code.google.com/p/webrtc/issues/detail?id=438
-TEST_F(VideoSyncTest,
-       DISABLED_DelayEstimatesStabilizeAfterNetEqMinDelayChanges45s) {
-  EXPECT_EQ(0, voe_base_->StopSend(channel_));
-  EXPECT_EQ(0, voe_vsync_->SetInitTimestamp(channel_, 12345));
-  EXPECT_EQ(0, voe_vsync_->SetInitSequenceNumber(channel_, 123));
-  EXPECT_EQ(0, voe_base_->StartSend(channel_));
-
-  CheckEstimatesConvergeReasonablyWell(kMinimumReasonableDelayEstimateMs);
-  EXPECT_EQ(0, voe_vsync_->SetMinimumPlayoutDelay(channel_, 200));
-  CheckEstimatesConvergeReasonablyWell(kMinimumReasonableDelayEstimateMs);
-  EXPECT_EQ(0, voe_vsync_->SetMinimumPlayoutDelay(channel_, 0));
-  CheckEstimatesConvergeReasonablyWell(kMinimumReasonableDelayEstimateMs);
-}
-
-TEST_F(VideoSyncTest, CanGetPlayoutBufferSize) {
-  int ignored;
-  EXPECT_EQ(0, voe_vsync_->GetPlayoutBufferSize(ignored));
-}
diff --git a/webrtc/voice_engine/test/auto_test/voe_standard_test.cc b/webrtc/voice_engine/test/auto_test/voe_standard_test.cc
index 451082c..1c3a492 100644
--- a/webrtc/voice_engine/test/auto_test/voe_standard_test.cc
+++ b/webrtc/voice_engine/test/auto_test/voe_standard_test.cc
@@ -50,8 +50,6 @@
     TEST_LOG("  Network\n");
   if (_rtp_rtcp)
     TEST_LOG("  RTP_RTCP\n");
-  if (_videoSync)
-    TEST_LOG("  VideoSync\n");
   if (_volumeControl)
     TEST_LOG("  VolumeControl\n");
   if (_apm)
@@ -72,8 +70,6 @@
     TEST_LOG("  Network\n");
   if (!_rtp_rtcp)
     TEST_LOG("  RTP_RTCP\n");
-  if (!_videoSync)
-    TEST_LOG("  VideoSync\n");
   if (!_volumeControl)
     TEST_LOG("  VolumeControl\n");
   if (!_apm)
diff --git a/webrtc/voice_engine/test/auto_test/voe_standard_test.h b/webrtc/voice_engine/test/auto_test/voe_standard_test.h
index 6109603..5370ba4 100644
--- a/webrtc/voice_engine/test/auto_test/voe_standard_test.h
+++ b/webrtc/voice_engine/test/auto_test/voe_standard_test.h
@@ -36,7 +36,6 @@
       _netEqStats(false),
       _network(false),
       _rtp_rtcp(false),
-      _videoSync(false),
       _volumeControl(false),
       _apm(false) {
       _codec = true;
@@ -45,7 +44,6 @@
       _netEqStats = true;
       _network = true;
       _rtp_rtcp = true;
-      _videoSync = true;
       _volumeControl = true;
       _apm = true;
   }
@@ -55,7 +53,7 @@
  private:
   bool _base, _codec;
   bool _file, _hardware;
-  bool _netEqStats, _network, _rtp_rtcp, _videoSync, _volumeControl, _apm;
+  bool _netEqStats, _network, _rtp_rtcp, _volumeControl, _apm;
 };
 
 }  // namespace voetest
diff --git a/webrtc/voice_engine/test/auto_test/voe_test_defines.h b/webrtc/voice_engine/test/auto_test/voe_test_defines.h
index 5d433d6..1db5ee1 100644
--- a/webrtc/voice_engine/test/auto_test/voe_test_defines.h
+++ b/webrtc/voice_engine/test/auto_test/voe_test_defines.h
@@ -24,7 +24,6 @@
 #define _TEST_AUDIO_PROCESSING_
 #define _TEST_FILE_
 #define _TEST_NETWORK_
-#define _TEST_VIDEO_SYNC_
 #define _TEST_NETEQ_STATS_
 
 #define TESTED_AUDIO_LAYER kAudioPlatformDefault
diff --git a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc b/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc
index 72d53b9..8f933f4 100644
--- a/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc
+++ b/webrtc/voice_engine/test/cmd_test/voe_cmd_test.cc
@@ -34,7 +34,6 @@
 #include "webrtc/voice_engine/include/voe_neteq_stats.h"
 #include "webrtc/voice_engine/include/voe_network.h"
 #include "webrtc/voice_engine/include/voe_rtp_rtcp.h"
-#include "webrtc/voice_engine/include/voe_video_sync.h"
 #include "webrtc/voice_engine/include/voe_volume_control.h"
 #include "webrtc/voice_engine/test/channel_transport/channel_transport.h"
 
@@ -58,7 +57,6 @@
 VoEAudioProcessing* apm = NULL;
 VoENetwork* netw = NULL;
 VoEFile* file = NULL;
-VoEVideoSync* vsync = NULL;
 VoEHardware* hardware = NULL;
 VoENetEqStats* neteqst = NULL;
 
@@ -129,7 +127,6 @@
   rtp_rtcp = VoERTP_RTCP::GetInterface(m_voe);
   netw = VoENetwork::GetInterface(m_voe);
   file = VoEFile::GetInterface(m_voe);
-  vsync = VoEVideoSync::GetInterface(m_voe);
   hardware = VoEHardware::GetInterface(m_voe);
   neteqst = VoENetEqStats::GetInterface(m_voe);
 
@@ -195,9 +192,6 @@
   if (file)
     file->Release();
 
-  if (vsync)
-    vsync->Release();
-
   if (hardware)
     hardware->Release();
 
diff --git a/webrtc/voice_engine/voe_video_sync_impl.cc b/webrtc/voice_engine/voe_video_sync_impl.cc
deleted file mode 100644
index e82cbb3..0000000
--- a/webrtc/voice_engine/voe_video_sync_impl.cc
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "webrtc/voice_engine/voe_video_sync_impl.h"
-
-#include "webrtc/system_wrappers/include/trace.h"
-#include "webrtc/voice_engine/channel.h"
-#include "webrtc/voice_engine/include/voe_errors.h"
-#include "webrtc/voice_engine/voice_engine_impl.h"
-
-namespace webrtc {
-
-VoEVideoSync* VoEVideoSync::GetInterface(VoiceEngine* voiceEngine) {
-  if (NULL == voiceEngine) {
-    return NULL;
-  }
-  VoiceEngineImpl* s = static_cast<VoiceEngineImpl*>(voiceEngine);
-  s->AddRef();
-  return s;
-}
-
-VoEVideoSyncImpl::VoEVideoSyncImpl(voe::SharedData* shared) : _shared(shared) {
-  WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "VoEVideoSyncImpl::VoEVideoSyncImpl() - ctor");
-}
-
-VoEVideoSyncImpl::~VoEVideoSyncImpl() {
-  WEBRTC_TRACE(kTraceMemory, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "VoEVideoSyncImpl::~VoEVideoSyncImpl() - dtor");
-}
-
-int VoEVideoSyncImpl::GetPlayoutTimestamp(int channel,
-                                          unsigned int& timestamp) {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channel_ptr = ch.channel();
-  if (channel_ptr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "GetPlayoutTimestamp() failed to locate channel");
-    return -1;
-  }
-  return channel_ptr->GetPlayoutTimestamp(timestamp);
-}
-
-int VoEVideoSyncImpl::SetInitTimestamp(int channel, unsigned int timestamp) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "SetInitTimestamp(channel=%d, timestamp=%lu)", channel,
-               timestamp);
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "SetInitTimestamp() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->SetInitTimestamp(timestamp);
-}
-
-int VoEVideoSyncImpl::SetInitSequenceNumber(int channel, short sequenceNumber) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "SetInitSequenceNumber(channel=%d, sequenceNumber=%hd)", channel,
-               sequenceNumber);
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "SetInitSequenceNumber() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->SetInitSequenceNumber(sequenceNumber);
-}
-
-int VoEVideoSyncImpl::SetMinimumPlayoutDelay(int channel, int delayMs) {
-  WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
-               "SetMinimumPlayoutDelay(channel=%d, delayMs=%d)", channel,
-               delayMs);
-
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "SetMinimumPlayoutDelay() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->SetMinimumPlayoutDelay(delayMs);
-}
-
-int VoEVideoSyncImpl::GetDelayEstimate(int channel,
-                                       int* jitter_buffer_delay_ms,
-                                       int* playout_buffer_delay_ms) {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "GetDelayEstimate() failed to locate channel");
-    return -1;
-  }
-  if (!channelPtr->GetDelayEstimate(jitter_buffer_delay_ms,
-                                    playout_buffer_delay_ms)) {
-    return -1;
-  }
-  return 0;
-}
-
-int VoEVideoSyncImpl::GetPlayoutBufferSize(int& bufferMs) {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  AudioDeviceModule::BufferType type(AudioDeviceModule::kFixedBufferSize);
-  uint16_t sizeMS(0);
-  if (_shared->audio_device()->PlayoutBuffer(&type, &sizeMS) != 0) {
-    _shared->SetLastError(VE_AUDIO_DEVICE_MODULE_ERROR, kTraceError,
-                          "GetPlayoutBufferSize() failed to read buffer size");
-    return -1;
-  }
-  bufferMs = sizeMS;
-  return 0;
-}
-
-int VoEVideoSyncImpl::GetRtpRtcp(int channel,
-                                 RtpRtcp** rtpRtcpModule,
-                                 RtpReceiver** rtp_receiver) {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channelPtr = ch.channel();
-  if (channelPtr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "GetPlayoutTimestamp() failed to locate channel");
-    return -1;
-  }
-  return channelPtr->GetRtpRtcp(rtpRtcpModule, rtp_receiver);
-}
-
-int VoEVideoSyncImpl::GetLeastRequiredDelayMs(int channel) const {
-  if (!_shared->statistics().Initialized()) {
-    _shared->SetLastError(VE_NOT_INITED, kTraceError);
-    return -1;
-  }
-  voe::ChannelOwner ch = _shared->channel_manager().GetChannel(channel);
-  voe::Channel* channel_ptr = ch.channel();
-  if (channel_ptr == NULL) {
-    _shared->SetLastError(VE_CHANNEL_NOT_VALID, kTraceError,
-                          "GetLeastRequiredDelayMs() failed to locate channel");
-    return -1;
-  }
-  return channel_ptr->LeastRequiredDelayMs();
-}
-
-}  // namespace webrtc
diff --git a/webrtc/voice_engine/voe_video_sync_impl.h b/webrtc/voice_engine/voe_video_sync_impl.h
deleted file mode 100644
index 8b367ee..0000000
--- a/webrtc/voice_engine/voe_video_sync_impl.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_IMPL_H
-#define WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_IMPL_H
-
-#include "webrtc/voice_engine/include/voe_video_sync.h"
-
-#include "webrtc/voice_engine/shared_data.h"
-
-namespace webrtc {
-
-class VoEVideoSyncImpl : public VoEVideoSync {
- public:
-  int GetPlayoutBufferSize(int& bufferMs) override;
-
-  int SetMinimumPlayoutDelay(int channel, int delayMs) override;
-
-  int GetDelayEstimate(int channel,
-                       int* jitter_buffer_delay_ms,
-                       int* playout_buffer_delay_ms) override;
-
-  int GetLeastRequiredDelayMs(int channel) const override;
-
-  int SetInitTimestamp(int channel, unsigned int timestamp) override;
-
-  int SetInitSequenceNumber(int channel, short sequenceNumber) override;
-
-  int GetPlayoutTimestamp(int channel, unsigned int& timestamp) override;
-
-  int GetRtpRtcp(int channel,
-                 RtpRtcp** rtpRtcpModule,
-                 RtpReceiver** rtp_receiver) override;
-
- protected:
-  VoEVideoSyncImpl(voe::SharedData* shared);
-  ~VoEVideoSyncImpl() override;
-
- private:
-  voe::SharedData* _shared;
-};
-
-}  // namespace webrtc
-
-#endif  // WEBRTC_VOICE_ENGINE_VOE_VIDEO_SYNC_IMPL_H
diff --git a/webrtc/voice_engine/voice_engine_impl.h b/webrtc/voice_engine/voice_engine_impl.h
index ae1edcb..36ea439 100644
--- a/webrtc/voice_engine/voice_engine_impl.h
+++ b/webrtc/voice_engine/voice_engine_impl.h
@@ -23,7 +23,6 @@
 #include "webrtc/voice_engine/voe_neteq_stats_impl.h"
 #include "webrtc/voice_engine/voe_network_impl.h"
 #include "webrtc/voice_engine/voe_rtp_rtcp_impl.h"
-#include "webrtc/voice_engine/voe_video_sync_impl.h"
 #include "webrtc/voice_engine/voe_volume_control_impl.h"
 
 namespace webrtc {
@@ -40,7 +39,6 @@
                         public VoENetEqStatsImpl,
                         public VoENetworkImpl,
                         public VoERTP_RTCPImpl,
-                        public VoEVideoSyncImpl,
                         public VoEVolumeControlImpl,
                         public VoEBaseImpl {
  public:
@@ -53,7 +51,6 @@
         VoENetEqStatsImpl(this),
         VoENetworkImpl(this),
         VoERTP_RTCPImpl(this),
-        VoEVideoSyncImpl(this),
         VoEVolumeControlImpl(this),
         VoEBaseImpl(this),
         _ref_count(0) {}