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}
This commit is contained in:
@ -36,10 +36,6 @@ static const uint32_t kSsCleanupIntervalSec = 60;
|
||||
// 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 @@ VCMJitterBuffer::VCMJitterBuffer(Clock* clock,
|
||||
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 @@ VCMEncodedFrame* VCMJitterBuffer::ExtractAndSetDecode(uint32_t timestamp) {
|
||||
// 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 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
|
||||
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 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
|
||||
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 @@ void VCMJitterBuffer::FindAndInsertContinuousFramesWithState(
|
||||
|
||||
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 @@ void VCMJitterBuffer::UpdateRtt(int64_t rtt_ms) {
|
||||
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 @@ void VCMJitterBuffer::SetNackSettings(size_t max_nack_list_size,
|
||||
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 @@ uint16_t VCMJitterBuffer::EstimatedLowSequenceNumber(
|
||||
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 @@ VCMFrameBuffer* VCMJitterBuffer::NextFrame() const {
|
||||
}
|
||||
|
||||
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 @@ void VCMJitterBuffer::UpdateJitterEstimate(int64_t latest_packet_time_ms,
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
Reference in New Issue
Block a user