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}
This commit is contained in:
@ -387,17 +387,9 @@ int NetEqImpl::FilteredCurrentDelayMs() const {
|
||||
int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {
|
||||
MutexLock lock(&mutex_);
|
||||
assert(decoder_database_.get());
|
||||
const size_t total_samples_in_buffers =
|
||||
packet_buffer_->NumSamplesInBuffer(decoder_frame_length_) +
|
||||
sync_buffer_->FutureLength();
|
||||
assert(controller_.get());
|
||||
stats->preferred_buffer_size_ms = controller_->TargetLevelMs();
|
||||
stats->jitter_peaks_found = controller_->PeakFound();
|
||||
stats_->GetNetworkStatistics(fs_hz_, total_samples_in_buffers,
|
||||
decoder_frame_length_, stats);
|
||||
*stats = CurrentNetworkStatisticsInternal();
|
||||
stats_->GetNetworkStatistics(decoder_frame_length_, stats);
|
||||
// Compensate for output delay chain.
|
||||
stats->current_buffer_size_ms += output_delay_chain_ms_;
|
||||
stats->preferred_buffer_size_ms += output_delay_chain_ms_;
|
||||
stats->mean_waiting_time_ms += output_delay_chain_ms_;
|
||||
stats->median_waiting_time_ms += output_delay_chain_ms_;
|
||||
stats->min_waiting_time_ms += output_delay_chain_ms_;
|
||||
@ -405,6 +397,31 @@ int NetEqImpl::NetworkStatistics(NetEqNetworkStatistics* stats) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
NetEqNetworkStatistics NetEqImpl::CurrentNetworkStatistics() const {
|
||||
MutexLock lock(&mutex_);
|
||||
return CurrentNetworkStatisticsInternal();
|
||||
}
|
||||
|
||||
NetEqNetworkStatistics NetEqImpl::CurrentNetworkStatisticsInternal() const {
|
||||
assert(decoder_database_.get());
|
||||
NetEqNetworkStatistics stats;
|
||||
const size_t total_samples_in_buffers =
|
||||
packet_buffer_->NumSamplesInBuffer(decoder_frame_length_) +
|
||||
sync_buffer_->FutureLength();
|
||||
|
||||
assert(controller_.get());
|
||||
stats.preferred_buffer_size_ms = controller_->TargetLevelMs();
|
||||
stats.jitter_peaks_found = controller_->PeakFound();
|
||||
RTC_DCHECK_GT(fs_hz_, 0);
|
||||
stats.current_buffer_size_ms =
|
||||
static_cast<uint16_t>(total_samples_in_buffers * 1000 / fs_hz_);
|
||||
|
||||
// Compensate for output delay chain.
|
||||
stats.current_buffer_size_ms += output_delay_chain_ms_;
|
||||
stats.preferred_buffer_size_ms += output_delay_chain_ms_;
|
||||
return stats;
|
||||
}
|
||||
|
||||
NetEqLifetimeStatistics NetEqImpl::GetLifetimeStatistics() const {
|
||||
MutexLock lock(&mutex_);
|
||||
return stats_->GetLifetimeStatistics();
|
||||
|
||||
Reference in New Issue
Block a user