Add parallel stats interface with optional stats to APM.

This new parallel GetStatistics function uses Optionals to indicate if stats are valid or not, and no longer relies on default values. It also takes an argument to indicate if receive streams are present, and if not several stats will not be set.

Bug: b/67926135
Change-Id: I175de1c65c414bea6ec9ca8b0b16f07cb2308d9f
Reviewed-on: https://webrtc-review.googlesource.com/17942
Commit-Queue: Ivo Creusen <ivoc@webrtc.org>
Reviewed-by: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20789}
This commit is contained in:
Ivo Creusen
2017-11-20 13:07:16 +01:00
committed by Commit Bot
parent 0ce0988503
commit ae02609645
9 changed files with 383 additions and 43 deletions

View File

@ -20,6 +20,7 @@
#include <string.h>
#include <vector>
#include "api/optional.h"
#include "modules/audio_processing/beamformer/array_util.h"
#include "modules/audio_processing/include/config.h"
#include "rtc_base/arraysize.h"
@ -563,9 +564,45 @@ class AudioProcessing : public rtc::RefCountInterface {
float residual_echo_likelihood_recent_max = -1.0f;
};
// This version of the stats uses Optionals, it will replace the regular
// AudioProcessingStatistics struct.
struct AudioProcessingStats {
AudioProcessingStats();
AudioProcessingStats(const AudioProcessingStats& other);
~AudioProcessingStats();
// AEC Statistics.
// ERL = 10log_10(P_far / P_echo)
rtc::Optional<double> echo_return_loss;
// ERLE = 10log_10(P_echo / P_out)
rtc::Optional<double> echo_return_loss_enhancement;
// Fraction of time that the AEC linear filter is divergent, in a 1-second
// non-overlapped aggregation window.
rtc::Optional<double> divergent_filter_fraction;
// The delay metrics consists of the delay median and standard deviation. It
// also consists of the fraction of delay estimates that can make the echo
// cancellation perform poorly. The values are aggregated until the first
// call to |GetStatistics()| and afterwards aggregated and updated every
// second. Note that if there are several clients pulling metrics from
// |GetStatistics()| during a session the first call from any of them will
// change to one second aggregation window for all.
rtc::Optional<int32_t> delay_median_ms;
rtc::Optional<int32_t> delay_standard_deviation_ms;
// Residual echo detector likelihood.
rtc::Optional<double> residual_echo_likelihood;
// Maximum residual echo likelihood from the last time period.
rtc::Optional<double> residual_echo_likelihood_recent_max;
};
// TODO(ivoc): Make this pure virtual when all subclasses have been updated.
virtual AudioProcessingStatistics GetStatistics() const;
// This returns the stats as optionals and it will replace the regular
// GetStatistics.
virtual AudioProcessingStats GetStatistics(bool has_remote_tracks) const;
// These provide access to the component interfaces and should never return
// NULL. The pointers will be valid for the lifetime of the APM instance.
// The memory for these objects is entirely managed internally.