Only generate codec stats for the voice send and receive codec
also refactor the code to have FillSendCodecStats/FillReceiveCodecStats
methods for similarity with the video engine code.
BUG=webrtc:14808
Change-Id: Ib0687f36a4b4a71c849e0b4918e50592d7772ff8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/290891
Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Commit-Queue: Philipp Hancke <phancke@microsoft.com>
Cr-Commit-Position: refs/heads/main@{#39172}
diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc
index 65aa0dc..c8da7c4 100644
--- a/media/engine/webrtc_voice_engine.cc
+++ b/media/engine/webrtc_voice_engine.cc
@@ -2326,15 +2326,11 @@
info->senders.push_back(sinfo);
}
- // Get codec info
- for (const AudioCodec& codec : send_codecs_) {
- webrtc::RtpCodecParameters codec_params = codec.ToCodecParameters();
- info->send_codecs.insert(
- std::make_pair(codec_params.payload_type, std::move(codec_params)));
- }
+ FillSendCodecStats(info);
return true;
}
+
bool WebRtcVoiceMediaChannel::GetReceiveStats(VoiceMediaReceiveInfo* info,
bool get_and_clear_legacy_stats) {
TRACE_EVENT0("webrtc", "WebRtcVoiceMediaChannel::GetReceiveStats");
@@ -2439,17 +2435,41 @@
info->receivers.push_back(rinfo);
}
- // Get codec info
- for (const AudioCodec& codec : recv_codecs_) {
- webrtc::RtpCodecParameters codec_params = codec.ToCodecParameters();
- info->receive_codecs.insert(
- std::make_pair(codec_params.payload_type, std::move(codec_params)));
- }
+ FillReceiveCodecStats(info);
+
info->device_underrun_count = engine_->adm()->GetPlayoutUnderrunCount();
return true;
}
+void WebRtcVoiceMediaChannel::FillSendCodecStats(
+ VoiceMediaSendInfo* voice_media_info) {
+ for (const auto& sender : voice_media_info->senders) {
+ auto codec = absl::c_find_if(send_codecs_, [&sender](const AudioCodec& c) {
+ return sender.codec_payload_type && *sender.codec_payload_type == c.id;
+ });
+ if (codec != send_codecs_.end()) {
+ voice_media_info->send_codecs.insert(
+ std::make_pair(codec->id, codec->ToCodecParameters()));
+ }
+ }
+}
+
+void WebRtcVoiceMediaChannel::FillReceiveCodecStats(
+ VoiceMediaReceiveInfo* voice_media_info) {
+ for (const auto& receiver : voice_media_info->receivers) {
+ auto codec =
+ absl::c_find_if(recv_codecs_, [&receiver](const AudioCodec& c) {
+ return receiver.codec_payload_type &&
+ *receiver.codec_payload_type == c.id;
+ });
+ if (codec != recv_codecs_.end()) {
+ voice_media_info->receive_codecs.insert(
+ std::make_pair(codec->id, codec->ToCodecParameters()));
+ }
+ }
+}
+
void WebRtcVoiceMediaChannel::SetRawAudioSink(
uint32_t ssrc,
std::unique_ptr<webrtc::AudioSinkInterface> sink) {
diff --git a/media/engine/webrtc_voice_engine.h b/media/engine/webrtc_voice_engine.h
index 96e07cd..8b62c67 100644
--- a/media/engine/webrtc_voice_engine.h
+++ b/media/engine/webrtc_voice_engine.h
@@ -335,7 +335,11 @@
unsignaled_frame_decryptor_;
rtc::scoped_refptr<webrtc::FrameTransformerInterface>
unsignaled_frame_transformer_;
+
+ void FillSendCodecStats(VoiceMediaSendInfo* voice_media_info);
+ void FillReceiveCodecStats(VoiceMediaReceiveInfo* voice_media_info);
};
+
} // namespace cricket
#endif // MEDIA_ENGINE_WEBRTC_VOICE_ENGINE_H_
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc
index adc6e64..795ffc0 100644
--- a/media/engine/webrtc_voice_engine_unittest.cc
+++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -603,7 +603,7 @@
stats.packets_lost = 9012;
stats.fraction_lost = 34.56f;
stats.codec_name = "codec_name_send";
- stats.codec_payload_type = 42;
+ stats.codec_payload_type = 0;
stats.jitter_ms = 12;
stats.rtt_ms = 345;
stats.audio_level = 678;
@@ -679,7 +679,7 @@
stats.packets_rcvd = 768;
stats.packets_lost = 101;
stats.codec_name = "codec_name_recv";
- stats.codec_payload_type = 42;
+ stats.codec_payload_type = 0;
stats.jitter_ms = 901;
stats.jitter_buffer_ms = 234;
stats.jitter_buffer_preferred_ms = 567;
@@ -2347,6 +2347,7 @@
SetSendParameters(send_parameters_);
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
SetAudioSendStreamStats();
+ SetAudioReceiveStreamStats();
// Check stats for the added streams.
{
@@ -2367,7 +2368,7 @@
// We have added one receive stream. We should see empty stats.
EXPECT_EQ(receive_info.receivers.size(), 1u);
- EXPECT_EQ(receive_info.receivers[0].ssrc(), 0u);
+ EXPECT_EQ(receive_info.receivers[0].ssrc(), 123u);
}
// Remove the kSsrcY stream. No receiver stats.
@@ -2525,6 +2526,7 @@
EXPECT_CALL(*adm_, GetPlayoutUnderrunCount()).WillOnce(Return(0));
cricket::VoiceMediaSendInfo send_info;
cricket::VoiceMediaReceiveInfo receive_info;
+ SetAudioReceiveStreamStats();
EXPECT_EQ(true, channel_->GetSendStats(&send_info));
EXPECT_EQ(true, channel_->GetReceiveStats(
&receive_info, /*get_and_clear_legacy_stats=*/true));