Make VCMJitterBuffer::SetNackMode(kNack, -1, -1) the only mode
Bug: webrtc:7408
Change-Id: I9d9e4f97c7705b42c9575167710a3e79781b83e8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/130220
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Philip Eliasson <philipel@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27568}
diff --git a/modules/video_coding/jitter_buffer.cc b/modules/video_coding/jitter_buffer.cc
index bd9ffb1..933b976 100644
--- a/modules/video_coding/jitter_buffer.cc
+++ b/modules/video_coding/jitter_buffer.cc
@@ -36,10 +36,6 @@
// Use this rtt if no value has been reported.
static const int64_t kDefaultRtt = 200;
-// Request a keyframe if no continuous frame has been received for this
-// number of milliseconds and NACKs are disabled.
-static const int64_t kMaxDiscontinuousFramesTime = 1000;
-
typedef std::pair<uint32_t, VCMFrameBuffer*> FrameListPair;
bool IsKeyFrame(FrameListPair pair) {
@@ -234,9 +230,6 @@
jitter_estimate_(clock),
inter_frame_delay_(clock_->TimeInMilliseconds()),
rtt_ms_(kDefaultRtt),
- nack_mode_(kNoNack),
- low_rtt_nack_threshold_ms_(-1),
- high_rtt_nack_threshold_ms_(-1),
missing_sequence_numbers_(SequenceNumberLessThan()),
latest_received_sequence_number_(0),
max_nack_list_size_(0),
@@ -391,8 +384,7 @@
// Frame pulled out from jitter buffer, update the jitter estimate.
const bool retransmitted = (frame->GetNackCount() > 0);
if (retransmitted) {
- if (WaitForRetransmissions())
- jitter_estimate_.FrameNacked();
+ jitter_estimate_.FrameNacked();
} else if (frame->size() > 0) {
// Ignore retransmitted and empty frames.
if (waiting_for_completion_.latest_packet_time >= 0) {
@@ -589,11 +581,6 @@
FindAndInsertContinuousFrames(*frame);
} else {
incomplete_frames_.InsertFrame(frame);
- // If NACKs are enabled, keyframes are triggered by |GetNackList|.
- if (nack_mode_ == kNoNack && NonContinuousOrIncompleteDuration() >
- 90 * kMaxDiscontinuousFramesTime) {
- return kFlushIndicator;
- }
}
break;
}
@@ -604,11 +591,6 @@
return kNoError;
} else {
incomplete_frames_.InsertFrame(frame);
- // If NACKs are enabled, keyframes are triggered by |GetNackList|.
- if (nack_mode_ == kNoNack && NonContinuousOrIncompleteDuration() >
- 90 * kMaxDiscontinuousFramesTime) {
- return kFlushIndicator;
- }
}
break;
}
@@ -702,15 +684,7 @@
uint32_t VCMJitterBuffer::EstimatedJitterMs() {
rtc::CritScope cs(&crit_sect_);
- // Compute RTT multiplier for estimation.
- // low_rtt_nackThresholdMs_ == -1 means no FEC.
- double rtt_mult = 1.0f;
- if (low_rtt_nack_threshold_ms_ >= 0 &&
- rtt_ms_ >= low_rtt_nack_threshold_ms_) {
- // For RTTs above low_rtt_nack_threshold_ms_ we don't apply extra delay
- // when waiting for retransmissions.
- rtt_mult = 0.0f;
- }
+ const double rtt_mult = 1.0f;
return jitter_estimate_.GetJitterEstimate(rtt_mult);
}
@@ -718,32 +692,6 @@
rtc::CritScope cs(&crit_sect_);
rtt_ms_ = rtt_ms;
jitter_estimate_.UpdateRtt(rtt_ms);
- if (!WaitForRetransmissions())
- jitter_estimate_.ResetNackCount();
-}
-
-void VCMJitterBuffer::SetNackMode(VCMNackMode mode,
- int64_t low_rtt_nack_threshold_ms,
- int64_t high_rtt_nack_threshold_ms) {
- rtc::CritScope cs(&crit_sect_);
- nack_mode_ = mode;
- if (mode == kNoNack) {
- missing_sequence_numbers_.clear();
- }
- assert(low_rtt_nack_threshold_ms >= -1 && high_rtt_nack_threshold_ms >= -1);
- assert(high_rtt_nack_threshold_ms == -1 ||
- low_rtt_nack_threshold_ms <= high_rtt_nack_threshold_ms);
- assert(low_rtt_nack_threshold_ms > -1 || high_rtt_nack_threshold_ms == -1);
- low_rtt_nack_threshold_ms_ = low_rtt_nack_threshold_ms;
- high_rtt_nack_threshold_ms_ = high_rtt_nack_threshold_ms;
- // Don't set a high start rtt if high_rtt_nack_threshold_ms_ is used, to not
- // disable NACK in |kNack| mode.
- if (rtt_ms_ == kDefaultRtt && high_rtt_nack_threshold_ms_ != -1) {
- rtt_ms_ = 0;
- }
- if (!WaitForRetransmissions()) {
- jitter_estimate_.ResetNackCount();
- }
}
void VCMJitterBuffer::SetNackSettings(size_t max_nack_list_size,
@@ -757,11 +705,6 @@
max_incomplete_time_ms_ = max_incomplete_time_ms;
}
-VCMNackMode VCMJitterBuffer::nack_mode() const {
- rtc::CritScope cs(&crit_sect_);
- return nack_mode_;
-}
-
int VCMJitterBuffer::NonContinuousOrIncompleteDuration() {
if (incomplete_frames_.empty()) {
return 0;
@@ -787,9 +730,6 @@
std::vector<uint16_t> VCMJitterBuffer::GetNackList(bool* request_key_frame) {
rtc::CritScope cs(&crit_sect_);
*request_key_frame = false;
- if (nack_mode_ == kNoNack) {
- return std::vector<uint16_t>();
- }
if (last_decoded_state_.in_initial_state()) {
VCMFrameBuffer* next_frame = NextFrame();
const bool first_frame_is_key =
@@ -854,9 +794,6 @@
}
bool VCMJitterBuffer::UpdateNackList(uint16_t sequence_number) {
- if (nack_mode_ == kNoNack) {
- return true;
- }
// Make sure we don't add packets which are already too old to be decoded.
if (!last_decoded_state_.in_initial_state()) {
latest_received_sequence_number_ = LatestSequenceNumber(
@@ -1065,20 +1002,6 @@
}
}
-bool VCMJitterBuffer::WaitForRetransmissions() {
- if (nack_mode_ == kNoNack) {
- // NACK disabled -> don't wait for retransmissions.
- return false;
- }
- // Evaluate if the RTT is higher than |high_rtt_nack_threshold_ms_|, and in
- // that case we don't wait for retransmissions.
- if (high_rtt_nack_threshold_ms_ >= 0 &&
- rtt_ms_ >= high_rtt_nack_threshold_ms_) {
- return false;
- }
- return true;
-}
-
void VCMJitterBuffer::RecycleFrameBuffer(VCMFrameBuffer* frame) {
frame->Reset();
free_frames_.push_back(frame);