Delete master_timing argument to VCMTiming. Makes construction simpler, and allows the ts_extrapolator_ pointer to be marked const. Followup to https://webrtc-review.googlesource.com/c/src/+/190721 Bug: webrtc:12102 Change-Id: I2abeb960935b5470509f654a4a9d5121c8001900 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/190981 Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#32535}
diff --git a/modules/video_coding/timing.cc b/modules/video_coding/timing.cc index f1c66b8..eddac4f 100644 --- a/modules/video_coding/timing.cc +++ b/modules/video_coding/timing.cc
@@ -21,11 +21,11 @@ namespace webrtc { -VCMTiming::VCMTiming(Clock* clock, VCMTiming* master_timing) +VCMTiming::VCMTiming(Clock* clock) : clock_(clock), - master_(false), - ts_extrapolator_(), - codec_timer_(new VCMCodecTimer()), + ts_extrapolator_(std::make_unique<TimestampExtrapolator>( + clock_->TimeInMilliseconds())), + codec_timer_(std::make_unique<VCMCodecTimer>()), render_delay_ms_(kDefaultRenderDelayMs), min_playout_delay_ms_(0), max_playout_delay_ms_(10000), @@ -37,24 +37,12 @@ low_latency_renderer_enabled_("enabled", true) { ParseFieldTrial({&low_latency_renderer_enabled_}, field_trial::FindFullName("WebRTC-LowLatencyRenderer")); - if (master_timing == NULL) { - master_ = true; - ts_extrapolator_ = new TimestampExtrapolator(clock_->TimeInMilliseconds()); - } else { - ts_extrapolator_ = master_timing->ts_extrapolator_; - } -} - -VCMTiming::~VCMTiming() { - if (master_) { - delete ts_extrapolator_; - } } void VCMTiming::Reset() { MutexLock lock(&mutex_); ts_extrapolator_->Reset(clock_->TimeInMilliseconds()); - codec_timer_.reset(new VCMCodecTimer()); + codec_timer_ = std::make_unique<VCMCodecTimer>(); render_delay_ms_ = kDefaultRenderDelayMs; min_playout_delay_ms_ = 0; jitter_delay_ms_ = 0; @@ -190,6 +178,8 @@ // Render as soon as possible or with low-latency renderer algorithm. return 0; } + // Note that TimestampExtrapolator::ExtrapolateLocalTime is not a const + // method; it mutates the object's wraparound state. int64_t estimated_complete_time_ms = ts_extrapolator_->ExtrapolateLocalTime(frame_timestamp); if (estimated_complete_time_ms == -1) {
diff --git a/modules/video_coding/timing.h b/modules/video_coding/timing.h index 69352de..736b5e9 100644 --- a/modules/video_coding/timing.h +++ b/modules/video_coding/timing.h
@@ -19,6 +19,7 @@ #include "rtc_base/experiments/field_trial_parser.h" #include "rtc_base/synchronization/mutex.h" #include "rtc_base/thread_annotations.h" +#include "rtc_base/time/timestamp_extrapolator.h" namespace webrtc { @@ -27,10 +28,8 @@ class VCMTiming { public: - // The primary timing component should be passed - // if this is the dual timing component. - explicit VCMTiming(Clock* clock, VCMTiming* master_timing = NULL); - virtual ~VCMTiming(); + explicit VCMTiming(Clock* clock); + virtual ~VCMTiming() = default; // Resets the timing to the initial state. void Reset(); @@ -117,8 +116,7 @@ private: mutable Mutex mutex_; Clock* const clock_; - bool master_ RTC_GUARDED_BY(mutex_); - TimestampExtrapolator* ts_extrapolator_ RTC_GUARDED_BY(mutex_) + const std::unique_ptr<TimestampExtrapolator> ts_extrapolator_ RTC_PT_GUARDED_BY(mutex_); std::unique_ptr<VCMCodecTimer> codec_timer_ RTC_GUARDED_BY(mutex_) RTC_PT_GUARDED_BY(mutex_);