| 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;
|
|
|
|
|