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}
This commit is contained in:
Philipp Hancke 2023-01-18 13:38:19 +01:00 committed by WebRTC LUCI CQ
parent 41748c9188
commit 9ad10bc492
3 changed files with 41 additions and 15 deletions

View File

@ -2326,15 +2326,11 @@ bool WebRtcVoiceMediaChannel::GetSendStats(VoiceMediaSendInfo* info) {
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 @@ bool WebRtcVoiceMediaChannel::GetReceiveStats(VoiceMediaReceiveInfo* info,
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) {

View File

@ -335,7 +335,11 @@ class WebRtcVoiceMediaChannel final : public VoiceMediaChannel,
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_

View File

@ -603,7 +603,7 @@ class WebRtcVoiceEngineTestFake : public ::testing::TestWithParam<bool> {
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 @@ class WebRtcVoiceEngineTestFake : public ::testing::TestWithParam<bool> {
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 @@ TEST_P(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) {
SetSendParameters(send_parameters_);
EXPECT_TRUE(channel_->SetRecvParameters(recv_parameters_));
SetAudioSendStreamStats();
SetAudioReceiveStreamStats();
// Check stats for the added streams.
{
@ -2367,7 +2368,7 @@ TEST_P(WebRtcVoiceEngineTestFake, GetStatsWithMultipleSendStreams) {
// 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 @@ TEST_P(WebRtcVoiceEngineTestFake, GetStats) {
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));