diff --git a/webrtc/modules/video_coding/main/source/receiver.cc b/webrtc/modules/video_coding/main/source/receiver.cc index 5155ee5b4..2595fb2b2 100644 --- a/webrtc/modules/video_coding/main/source/receiver.cc +++ b/webrtc/modules/video_coding/main/source/receiver.cc @@ -420,6 +420,8 @@ int VCMReceiver::SetMinReceiverDelay(int desired_delay_ms) { jitter_buffer_.SetMaxJitterEstimate(desired_delay_ms); max_video_delay_ms_ = desired_delay_ms + kMaxVideoDelayMs; timing_->SetMaxVideoDelay(max_video_delay_ms_); + // Initializing timing to the desired delay. + timing_->SetRequiredDelay(desired_delay_ms); return 0; } diff --git a/webrtc/modules/video_coding/main/source/timing.cc b/webrtc/modules/video_coding/main/source/timing.cc index 2a381bde1..114622348 100644 --- a/webrtc/modules/video_coding/main/source/timing.cc +++ b/webrtc/modules/video_coding/main/source/timing.cc @@ -108,6 +108,10 @@ VCMTiming::SetRequiredDelay(uint32_t requiredDelayMs) "Desired jitter buffer level: %u ms", requiredDelayMs); } _requiredDelayMs = requiredDelayMs; + // When in initial state, set current delay to minimum delay. + if (_currentDelayMs == 0) { + _currentDelayMs = _requiredDelayMs; + } } } @@ -270,7 +274,6 @@ VCMTiming::RenderTimeMsInternal(uint32_t frameTimestamp, int64_t nowMs) const { estimatedCompleteTimeMs = nowMs; } - return estimatedCompleteTimeMs + _currentDelayMs; } diff --git a/webrtc/modules/video_coding/main/source/timing.h b/webrtc/modules/video_coding/main/source/timing.h index 74bec724a..ae0bd57ac 100644 --- a/webrtc/modules/video_coding/main/source/timing.h +++ b/webrtc/modules/video_coding/main/source/timing.h @@ -95,19 +95,19 @@ protected: uint32_t TargetDelayInternal() const; private: - CriticalSectionWrapper* _critSect; - int32_t _vcmId; - Clock* _clock; - int32_t _timingId; - bool _master; - VCMTimestampExtrapolator* _tsExtrapolator; - VCMCodecTimer _codecTimer; - uint32_t _renderDelayMs; - uint32_t _minTotalDelayMs; - uint32_t _requiredDelayMs; - uint32_t _currentDelayMs; - uint32_t _prevFrameTimestamp; - int _maxVideoDelayMs; + CriticalSectionWrapper* _critSect; + int32_t _vcmId; + Clock* _clock; + int32_t _timingId; + bool _master; + VCMTimestampExtrapolator* _tsExtrapolator; + VCMCodecTimer _codecTimer; + uint32_t _renderDelayMs; + uint32_t _minTotalDelayMs; + uint32_t _requiredDelayMs; + uint32_t _currentDelayMs; + uint32_t _prevFrameTimestamp; + int _maxVideoDelayMs; }; } // namespace webrtc