diff --git a/webrtc/video/video_receive_stream.cc b/webrtc/video/video_receive_stream.cc index 4546ab7a86..1ed047b31e 100644 --- a/webrtc/video/video_receive_stream.cc +++ b/webrtc/video/video_receive_stream.cc @@ -178,6 +178,7 @@ VideoReceiveStream::VideoReceiveStream( 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 @@ VideoReceiveStream::VideoReceiveStream( 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 @@ void VideoReceiveStream::SetSyncChannel(VoiceEngine* voice_engine, 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 ee25cf7d38..5510945818 100644 --- a/webrtc/video/video_receive_stream.h +++ b/webrtc/video/video_receive_stream.h @@ -100,6 +100,7 @@ class VideoReceiveStream : public webrtc::VideoReceiveStream, 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 b41e21b380..b9e8357585 100644 --- a/webrtc/video/vie_channel.cc +++ b/webrtc/video/vie_channel.cc @@ -95,7 +95,6 @@ ViEChannel::ViEChannel(Transport* transport, 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 @@ int32_t ViEChannel::Init() { vcm_->RegisterReceiveStatisticsCallback(this); vcm_->RegisterDecoderTimingCallback(this); vcm_->SetRenderDelay(kDefaultRenderDelayMs); - module_process_thread_->RegisterModule(&vie_sync_); } return 0; } @@ -178,8 +176,6 @@ ViEChannel::~ViEChannel() { vie_receiver_.GetReceiveStatistics()); if (sender_) { send_payload_router_->SetSendingRtpModules(std::vector()); - } 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 @@ std::vector ViEChannel::CreateRtpRtcpModules( 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 320ce7c1fc..8e9cc1b08d 100644 --- a/webrtc/video/vie_channel.h +++ b/webrtc/video/vie_channel.h @@ -211,10 +211,6 @@ class ViEChannel : public VCMFrameTypeCallback, 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 @@ class ViEChannel : public VCMFrameTypeCallback, VideoCodingModule* const vcm_; ViEReceiver vie_receiver_; - ViESyncModule vie_sync_; // Helper to report call statistics. rtc::scoped_ptr stats_observer_; diff --git a/webrtc/video/vie_sync_module.cc b/webrtc/video/vie_sync_module.cc index 0a6bc8e9c7..dc924fb62f 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(VideoCodingModule* vcm) 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 @@ int ViESyncModule::ConfigureSync(int voe_channel_id, 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 48c9410c4b..779eb00a45 100644 --- a/webrtc/video/vie_sync_module.h +++ b/webrtc/video/vie_sync_module.h @@ -33,12 +33,10 @@ class ViESyncModule : public Module { 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;