Skip RTCMediaStreamTrackStats.echoReturnLoss[Enhancement] default value.

Due to the Chromium implementation[1] of GetAudioProcesssingStats,
echoReturnLoss and echoReturnLossEnhancement could default to -100 when
no value was available. This should be improved by using rtc::Optional
or AudioProcessorInterface::GetStats being able to return false, but
this requires a bunch of refactoring.

In the meantime we "blacklist" the value -100 which is a nonsense value
anyway. In that case echoReturnLoss[Enhancement] is correctly left
undefined.

[1] https://cs.chromium.org/chromium/src/content/renderer/media/media_stream_audio_processor_options.cc?sq=package:chromium&dr=C&rcl=1481530670&l=461

BUG=chromium:669877

Review-Url: https://codereview.webrtc.org/2573443002
Cr-Commit-Position: refs/heads/master@{#15611}
This commit is contained in:
hbos 2016-12-14 07:58:22 -08:00 committed by Commit bot
parent c3c2f31852
commit 9a394f0649
2 changed files with 48 additions and 4 deletions

View File

@ -317,10 +317,14 @@ void ProduceMediaStreamAndTrackStats(
if (audio_track->GetAudioProcessor()) {
AudioProcessorInterface::AudioProcessorStats audio_processor_stats;
audio_track->GetAudioProcessor()->GetStats(&audio_processor_stats);
audio_track_stats->echo_return_loss = static_cast<double>(
audio_processor_stats.echo_return_loss);
audio_track_stats->echo_return_loss_enhancement = static_cast<double>(
audio_processor_stats.echo_return_loss_enhancement);
if (audio_processor_stats.echo_return_loss != -100) {
audio_track_stats->echo_return_loss = static_cast<double>(
audio_processor_stats.echo_return_loss);
}
if (audio_processor_stats.echo_return_loss_enhancement != -100) {
audio_track_stats->echo_return_loss_enhancement = static_cast<double>(
audio_processor_stats.echo_return_loss_enhancement);
}
}
report->AddStats(std::move(audio_track_stats));
}

View File

@ -1211,6 +1211,46 @@ TEST_F(RTCStatsCollectorTest,
RTCMediaStreamTrackStats>());
}
TEST_F(RTCStatsCollectorTest,
CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio_Defaults) {
rtc::scoped_refptr<StreamCollection> local_streams =
StreamCollection::Create();
EXPECT_CALL(test_->pc(), local_streams())
.WillRepeatedly(Return(local_streams));
rtc::scoped_refptr<MediaStream> local_stream =
MediaStream::Create("LocalStreamLabel");
local_streams->AddStream(local_stream);
// Local audio track
AudioProcessorInterface::AudioProcessorStats local_audio_processor_stats;
local_audio_processor_stats.echo_return_loss = -100;
local_audio_processor_stats.echo_return_loss_enhancement = -100;
rtc::scoped_refptr<FakeAudioTrackForStats> local_audio_track =
FakeAudioTrackForStats::Create(
"LocalAudioTrackID",
MediaStreamTrackInterface::TrackState::kEnded,
32767,
new FakeAudioProcessorForStats(local_audio_processor_stats));
local_stream->AddTrack(local_audio_track);
rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
RTCMediaStreamTrackStats expected_local_audio_track(
"RTCMediaStreamTrack_LocalAudioTrackID", report->timestamp_us());
expected_local_audio_track.track_identifier = local_audio_track->id();
expected_local_audio_track.remote_source = false;
expected_local_audio_track.ended = true;
expected_local_audio_track.detached = false;
expected_local_audio_track.audio_level = 1.0;
// Should be undefined: |expected_local_audio_track.echo_return_loss| and
// |expected_local_audio_track.echo_return_loss_enhancement|.
EXPECT_TRUE(report->Get(expected_local_audio_track.id()));
EXPECT_EQ(expected_local_audio_track,
report->Get(expected_local_audio_track.id())->cast_to<
RTCMediaStreamTrackStats>());
}
TEST_F(RTCStatsCollectorTest,
CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Video) {
rtc::scoped_refptr<StreamCollection> local_streams =