Add a placeholder stat for logging the estimated residual echo likelihood.
The stat is currently always set to zero until the residual echo detector has landed. BUG=webrtc:6525 Review-Url: https://codereview.webrtc.org/2431443003 Cr-Commit-Position: refs/heads/master@{#14721}
This commit is contained in:
@ -46,6 +46,7 @@ class AudioSendStream {
|
||||
int32_t echo_delay_std_ms = -1;
|
||||
int32_t echo_return_loss = -100;
|
||||
int32_t echo_return_loss_enhancement = -100;
|
||||
float residual_echo_likelihood = -1.0f;
|
||||
bool typing_noise_detected = false;
|
||||
};
|
||||
|
||||
|
||||
@ -195,8 +195,9 @@ class AudioProcessorInterface : public rtc::RefCountInterface {
|
||||
echo_return_loss(0),
|
||||
echo_return_loss_enhancement(0),
|
||||
echo_delay_median_ms(0),
|
||||
aec_quality_min(0.0),
|
||||
echo_delay_std_ms(0),
|
||||
aec_quality_min(0.0),
|
||||
residual_echo_likelihood(0.0f),
|
||||
aec_divergent_filter_fraction(0.0) {}
|
||||
~AudioProcessorStats() {}
|
||||
|
||||
@ -204,8 +205,9 @@ class AudioProcessorInterface : public rtc::RefCountInterface {
|
||||
int echo_return_loss;
|
||||
int echo_return_loss_enhancement;
|
||||
int echo_delay_median_ms;
|
||||
float aec_quality_min;
|
||||
int echo_delay_std_ms;
|
||||
float aec_quality_min;
|
||||
float residual_echo_likelihood;
|
||||
float aec_divergent_filter_fraction;
|
||||
};
|
||||
|
||||
|
||||
@ -103,7 +103,8 @@ void SetAudioProcessingStats(StatsReport* report,
|
||||
int echo_return_loss_enhancement,
|
||||
int echo_delay_median_ms,
|
||||
float aec_quality_min,
|
||||
int echo_delay_std_ms) {
|
||||
int echo_delay_std_ms,
|
||||
float residual_echo_likelihood) {
|
||||
report->AddBoolean(StatsReport::kStatsValueNameTypingNoiseState,
|
||||
typing_noise_detected);
|
||||
if (aec_quality_min >= 0.0f) {
|
||||
@ -123,6 +124,10 @@ void SetAudioProcessingStats(StatsReport* report,
|
||||
report->AddInt(StatsReport::kStatsValueNameEchoReturnLoss, echo_return_loss);
|
||||
report->AddInt(StatsReport::kStatsValueNameEchoReturnLossEnhancement,
|
||||
echo_return_loss_enhancement);
|
||||
if (residual_echo_likelihood >= 0.0f) {
|
||||
report->AddFloat(StatsReport::kStatsValueNameResidualEchoLikelihood,
|
||||
residual_echo_likelihood);
|
||||
}
|
||||
}
|
||||
|
||||
void ExtractStats(const cricket::VoiceReceiverInfo& info, StatsReport* report) {
|
||||
@ -181,7 +186,8 @@ void ExtractStats(const cricket::VoiceSenderInfo& info, StatsReport* report) {
|
||||
SetAudioProcessingStats(
|
||||
report, info.typing_noise_detected, info.echo_return_loss,
|
||||
info.echo_return_loss_enhancement, info.echo_delay_median_ms,
|
||||
info.aec_quality_min, info.echo_delay_std_ms);
|
||||
info.aec_quality_min, info.echo_delay_std_ms,
|
||||
info.residual_echo_likelihood);
|
||||
|
||||
RTC_DCHECK_GE(info.audio_level, 0);
|
||||
const IntForAdd ints[] = {
|
||||
@ -926,7 +932,8 @@ void StatsCollector::UpdateReportFromAudioTrack(AudioTrackInterface* track,
|
||||
SetAudioProcessingStats(
|
||||
report, stats.typing_noise_detected, stats.echo_return_loss,
|
||||
stats.echo_return_loss_enhancement, stats.echo_delay_median_ms,
|
||||
stats.aec_quality_min, stats.echo_delay_std_ms);
|
||||
stats.aec_quality_min, stats.echo_delay_std_ms,
|
||||
stats.residual_echo_likelihood);
|
||||
|
||||
report->AddFloat(StatsReport::kStatsValueNameAecDivergentFilterFraction,
|
||||
stats.aec_divergent_filter_fraction);
|
||||
|
||||
@ -402,8 +402,13 @@ void VerifyVoiceSenderInfoReport(const StatsReport* report,
|
||||
&value_in_report));
|
||||
EXPECT_EQ(rtc::ToString<int>(sinfo.echo_return_loss_enhancement),
|
||||
value_in_report);
|
||||
EXPECT_TRUE(GetValue(
|
||||
report, StatsReport::kStatsValueNameAudioInputLevel, &value_in_report));
|
||||
EXPECT_TRUE(GetValue(report,
|
||||
StatsReport::kStatsValueNameResidualEchoLikelihood,
|
||||
&value_in_report));
|
||||
EXPECT_EQ(rtc::ToString<float>(sinfo.residual_echo_likelihood),
|
||||
value_in_report);
|
||||
EXPECT_TRUE(GetValue(report, StatsReport::kStatsValueNameAudioInputLevel,
|
||||
&value_in_report));
|
||||
EXPECT_EQ(rtc::ToString<int>(sinfo.audio_level), value_in_report);
|
||||
EXPECT_TRUE(GetValue(
|
||||
report, StatsReport::kStatsValueNameTypingNoiseState, &value_in_report));
|
||||
|
||||
@ -568,6 +568,8 @@ const char* StatsReport::Value::display_name() const {
|
||||
return "googRemoteCandidateType";
|
||||
case kStatsValueNameRemoteCertificateId:
|
||||
return "remoteCertificateId";
|
||||
case kStatsValueNameResidualEchoLikelihood:
|
||||
return "googResidualEchoLikelihood";
|
||||
case kStatsValueNameRetransmitBitrate:
|
||||
return "googRetransmitBitrate";
|
||||
case kStatsValueNameRtt:
|
||||
|
||||
@ -198,6 +198,7 @@ class StatsReport {
|
||||
kStatsValueNameRemoteCandidateType,
|
||||
kStatsValueNameRemoteCertificateId,
|
||||
kStatsValueNameRenderDelayMs,
|
||||
kStatsValueNameResidualEchoLikelihood,
|
||||
kStatsValueNameRetransmitBitrate,
|
||||
kStatsValueNameRtt,
|
||||
kStatsValueNameSecondaryDecodedRate,
|
||||
|
||||
@ -267,6 +267,9 @@ webrtc::AudioSendStream::Stats AudioSendStream::GetStats() const {
|
||||
stats.echo_return_loss_enhancement = erle;
|
||||
}
|
||||
|
||||
// TODO(ivoc): Hook this up to the residual echo detector.
|
||||
stats.residual_echo_likelihood = 0.0f;
|
||||
|
||||
internal::AudioState* audio_state =
|
||||
static_cast<internal::AudioState*>(audio_state_.get());
|
||||
stats.typing_noise_detected = audio_state->typing_noise_detected();
|
||||
|
||||
@ -41,6 +41,7 @@ const int kEchoDelayMedian = 254;
|
||||
const int kEchoDelayStdDev = -3;
|
||||
const int kEchoReturnLoss = -65;
|
||||
const int kEchoReturnLossEnhancement = 101;
|
||||
const float kResidualEchoLikelihood = 0.0f;
|
||||
const unsigned int kSpeechInputLevel = 96;
|
||||
const CallStatistics kCallStats = {
|
||||
1345, 1678, 1901, 1234, 112, 13456, 17890, 1567, -1890, -1123};
|
||||
@ -283,6 +284,7 @@ TEST(AudioSendStreamTest, GetStats) {
|
||||
EXPECT_EQ(kEchoDelayStdDev, stats.echo_delay_std_ms);
|
||||
EXPECT_EQ(kEchoReturnLoss, stats.echo_return_loss);
|
||||
EXPECT_EQ(kEchoReturnLossEnhancement, stats.echo_return_loss_enhancement);
|
||||
EXPECT_EQ(kResidualEchoLikelihood, stats.residual_echo_likelihood);
|
||||
EXPECT_FALSE(stats.typing_noise_detected);
|
||||
}
|
||||
|
||||
|
||||
@ -597,6 +597,7 @@ struct VoiceSenderInfo : public MediaSenderInfo {
|
||||
echo_delay_std_ms(0),
|
||||
echo_return_loss(0),
|
||||
echo_return_loss_enhancement(0),
|
||||
residual_echo_likelihood(0.0f),
|
||||
typing_noise_detected(false) {
|
||||
}
|
||||
|
||||
@ -608,6 +609,7 @@ struct VoiceSenderInfo : public MediaSenderInfo {
|
||||
int echo_delay_std_ms;
|
||||
int echo_return_loss;
|
||||
int echo_return_loss_enhancement;
|
||||
float residual_echo_likelihood;
|
||||
bool typing_noise_detected;
|
||||
};
|
||||
|
||||
|
||||
@ -2431,6 +2431,7 @@ bool WebRtcVoiceMediaChannel::GetStats(VoiceMediaInfo* info) {
|
||||
sinfo.echo_delay_std_ms = stats.echo_delay_std_ms;
|
||||
sinfo.echo_return_loss = stats.echo_return_loss;
|
||||
sinfo.echo_return_loss_enhancement = stats.echo_return_loss_enhancement;
|
||||
sinfo.residual_echo_likelihood = stats.residual_echo_likelihood;
|
||||
sinfo.typing_noise_detected = (send_ ? stats.typing_noise_detected : false);
|
||||
info->senders.push_back(sinfo);
|
||||
}
|
||||
|
||||
@ -413,6 +413,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
|
||||
stats.echo_delay_std_ms = 567;
|
||||
stats.echo_return_loss = 890;
|
||||
stats.echo_return_loss_enhancement = 1234;
|
||||
stats.residual_echo_likelihood = 0.432f;
|
||||
stats.typing_noise_detected = true;
|
||||
return stats;
|
||||
}
|
||||
@ -440,6 +441,7 @@ class WebRtcVoiceEngineTestFake : public testing::Test {
|
||||
EXPECT_EQ(info.echo_return_loss, stats.echo_return_loss);
|
||||
EXPECT_EQ(info.echo_return_loss_enhancement,
|
||||
stats.echo_return_loss_enhancement);
|
||||
EXPECT_EQ(info.residual_echo_likelihood, stats.residual_echo_likelihood);
|
||||
EXPECT_EQ(info.typing_noise_detected,
|
||||
stats.typing_noise_detected && is_sending);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user