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:
parent
41748c9188
commit
9ad10bc492
@ -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) {
|
||||
|
||||
@ -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_
|
||||
|
||||
@ -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));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user