Fix standard GetStats to not modify NetEq state.
Add a get_and_clear_legacy_stats flag to AudioReceiveStream::GetStats,
to distinguish calls from standard GetStats and legacy GetStats.
Add const method NetEq::CurrentNetworkStatistics to get current
values of stateless NetEq stats. Standard GetStats will then call this
method instead of NetEq::NetworkStatistics.
Bug: webrtc:11622
Change-Id: I3833a246a9e39b18c99657a738da22c6e2bd5f5e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/183600
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Ivo Creusen <ivoc@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#32092}
diff --git a/modules/audio_coding/acm2/acm_receiver.cc b/modules/audio_coding/acm2/acm_receiver.cc
index 33142c7..5600883 100644
--- a/modules/audio_coding/acm2/acm_receiver.cc
+++ b/modules/audio_coding/acm2/acm_receiver.cc
@@ -244,26 +244,45 @@
return std::make_pair(last_decoder_->payload_type, last_decoder_->sdp_format);
}
-void AcmReceiver::GetNetworkStatistics(NetworkStatistics* acm_stat) const {
+void AcmReceiver::GetNetworkStatistics(
+ NetworkStatistics* acm_stat,
+ bool get_and_clear_legacy_stats /* = true */) const {
NetEqNetworkStatistics neteq_stat;
- // NetEq function always returns zero, so we don't check the return value.
- neteq_->NetworkStatistics(&neteq_stat);
+ if (get_and_clear_legacy_stats) {
+ // NetEq function always returns zero, so we don't check the return value.
+ neteq_->NetworkStatistics(&neteq_stat);
+ acm_stat->currentPacketLossRate = neteq_stat.packet_loss_rate;
+ acm_stat->currentExpandRate = neteq_stat.expand_rate;
+ acm_stat->currentSpeechExpandRate = neteq_stat.speech_expand_rate;
+ acm_stat->currentPreemptiveRate = neteq_stat.preemptive_rate;
+ acm_stat->currentAccelerateRate = neteq_stat.accelerate_rate;
+ acm_stat->currentSecondaryDecodedRate = neteq_stat.secondary_decoded_rate;
+ acm_stat->currentSecondaryDiscardedRate =
+ neteq_stat.secondary_discarded_rate;
+ acm_stat->addedSamples = neteq_stat.added_zero_samples;
+ acm_stat->meanWaitingTimeMs = neteq_stat.mean_waiting_time_ms;
+ acm_stat->medianWaitingTimeMs = neteq_stat.median_waiting_time_ms;
+ acm_stat->minWaitingTimeMs = neteq_stat.min_waiting_time_ms;
+ acm_stat->maxWaitingTimeMs = neteq_stat.max_waiting_time_ms;
+ } else {
+ neteq_stat = neteq_->CurrentNetworkStatistics();
+ acm_stat->currentPacketLossRate = 0;
+ acm_stat->currentExpandRate = 0;
+ acm_stat->currentSpeechExpandRate = 0;
+ acm_stat->currentPreemptiveRate = 0;
+ acm_stat->currentAccelerateRate = 0;
+ acm_stat->currentSecondaryDecodedRate = 0;
+ acm_stat->currentSecondaryDiscardedRate = 0;
+ acm_stat->addedSamples = 0;
+ acm_stat->meanWaitingTimeMs = -1;
+ acm_stat->medianWaitingTimeMs = -1;
+ acm_stat->minWaitingTimeMs = -1;
+ acm_stat->maxWaitingTimeMs = 1;
+ }
acm_stat->currentBufferSize = neteq_stat.current_buffer_size_ms;
acm_stat->preferredBufferSize = neteq_stat.preferred_buffer_size_ms;
acm_stat->jitterPeaksFound = neteq_stat.jitter_peaks_found ? true : false;
- acm_stat->currentPacketLossRate = neteq_stat.packet_loss_rate;
- acm_stat->currentExpandRate = neteq_stat.expand_rate;
- acm_stat->currentSpeechExpandRate = neteq_stat.speech_expand_rate;
- acm_stat->currentPreemptiveRate = neteq_stat.preemptive_rate;
- acm_stat->currentAccelerateRate = neteq_stat.accelerate_rate;
- acm_stat->currentSecondaryDecodedRate = neteq_stat.secondary_decoded_rate;
- acm_stat->currentSecondaryDiscardedRate = neteq_stat.secondary_discarded_rate;
- acm_stat->addedSamples = neteq_stat.added_zero_samples;
- acm_stat->meanWaitingTimeMs = neteq_stat.mean_waiting_time_ms;
- acm_stat->medianWaitingTimeMs = neteq_stat.median_waiting_time_ms;
- acm_stat->minWaitingTimeMs = neteq_stat.min_waiting_time_ms;
- acm_stat->maxWaitingTimeMs = neteq_stat.max_waiting_time_ms;
NetEqLifetimeStatistics neteq_lifetime_stat = neteq_->GetLifetimeStatistics();
acm_stat->totalSamplesReceived = neteq_lifetime_stat.total_samples_received;