diff --git a/webrtc/api/rtcstatscollector.cc b/webrtc/api/rtcstatscollector.cc index 9998d9aafe..5289c4820b 100644 --- a/webrtc/api/rtcstatscollector.cc +++ b/webrtc/api/rtcstatscollector.cc @@ -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( - audio_processor_stats.echo_return_loss); - audio_track_stats->echo_return_loss_enhancement = static_cast( - audio_processor_stats.echo_return_loss_enhancement); + if (audio_processor_stats.echo_return_loss != -100) { + audio_track_stats->echo_return_loss = static_cast( + audio_processor_stats.echo_return_loss); + } + if (audio_processor_stats.echo_return_loss_enhancement != -100) { + audio_track_stats->echo_return_loss_enhancement = static_cast( + audio_processor_stats.echo_return_loss_enhancement); + } } report->AddStats(std::move(audio_track_stats)); } diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc index 278d945378..6d0b56fc0f 100644 --- a/webrtc/api/rtcstatscollector_unittest.cc +++ b/webrtc/api/rtcstatscollector_unittest.cc @@ -1211,6 +1211,46 @@ TEST_F(RTCStatsCollectorTest, RTCMediaStreamTrackStats>()); } +TEST_F(RTCStatsCollectorTest, + CollectRTCMediaStreamStatsAndRTCMediaStreamTrackStats_Audio_Defaults) { + rtc::scoped_refptr local_streams = + StreamCollection::Create(); + EXPECT_CALL(test_->pc(), local_streams()) + .WillRepeatedly(Return(local_streams)); + + rtc::scoped_refptr 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 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 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 local_streams =