Index: webrtc/logging/rtc_event_log/rtc_event_log_parser.cc |
diff --git a/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc b/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc |
index f01895af70082197c2d3446442653d14a9013a13..d2cdcd5b5dda623aeee6444cfb909b1f7a336b31 100644 |
--- a/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc |
+++ b/webrtc/logging/rtc_event_log/rtc_event_log_parser.cc |
@@ -202,8 +202,7 @@ bool ParsedRtcEventLog::ParseStream(std::istream& stream) { |
EventType type = GetRuntimeEventType(event.type()); |
switch (type) { |
case VIDEO_RECEIVER_CONFIG_EVENT: { |
- rtclog::StreamConfig config; |
- GetVideoReceiveConfig(event, &config); |
+ rtclog::StreamConfig config = GetVideoReceiveConfig(event); |
streams_.emplace_back(config.remote_ssrc, MediaType::VIDEO, |
kIncomingPacket); |
streams_.emplace_back(config.local_ssrc, MediaType::VIDEO, |
@@ -211,18 +210,18 @@ bool ParsedRtcEventLog::ParseStream(std::istream& stream) { |
break; |
} |
case VIDEO_SENDER_CONFIG_EVENT: { |
- rtclog::StreamConfig config; |
- GetVideoSendConfig(event, &config); |
- streams_.emplace_back(config.local_ssrc, MediaType::VIDEO, |
- kOutgoingPacket); |
- |
- streams_.emplace_back(config.rtx_ssrc, MediaType::VIDEO, |
- kOutgoingPacket); |
+ std::vector<rtclog::StreamConfig> configs = GetVideoSendConfig(event); |
+ for (size_t i = 0; i < configs.size(); i++) { |
+ streams_.emplace_back(configs[i].local_ssrc, MediaType::VIDEO, |
+ kOutgoingPacket); |
+ |
+ streams_.emplace_back(configs[i].rtx_ssrc, MediaType::VIDEO, |
+ kOutgoingPacket); |
+ } |
break; |
} |
case AUDIO_RECEIVER_CONFIG_EVENT: { |
- rtclog::StreamConfig config; |
- GetAudioReceiveConfig(event, &config); |
+ rtclog::StreamConfig config = GetAudioReceiveConfig(event); |
streams_.emplace_back(config.remote_ssrc, MediaType::AUDIO, |
kIncomingPacket); |
streams_.emplace_back(config.local_ssrc, MediaType::AUDIO, |
@@ -230,8 +229,7 @@ bool ParsedRtcEventLog::ParseStream(std::istream& stream) { |
break; |
} |
case AUDIO_SENDER_CONFIG_EVENT: { |
- rtclog::StreamConfig config; |
- GetAudioSendConfig(event, &config); |
+ rtclog::StreamConfig config = GetAudioSendConfig(event); |
streams_.emplace_back(config.local_ssrc, MediaType::AUDIO, |
kOutgoingPacket); |
break; |
@@ -330,17 +328,15 @@ void ParsedRtcEventLog::GetRtcpPacket(size_t index, |
} |
} |
-void ParsedRtcEventLog::GetVideoReceiveConfig( |
- size_t index, |
- rtclog::StreamConfig* config) const { |
+rtclog::StreamConfig ParsedRtcEventLog::GetVideoReceiveConfig( |
+ size_t index) const { |
RTC_CHECK_LT(index, GetNumberOfEvents()); |
- GetVideoReceiveConfig(events_[index], config); |
+ return GetVideoReceiveConfig(events_[index]); |
} |
-void ParsedRtcEventLog::GetVideoReceiveConfig( |
- const rtclog::Event& event, |
- rtclog::StreamConfig* config) const { |
- RTC_CHECK(config != nullptr); |
+rtclog::StreamConfig ParsedRtcEventLog::GetVideoReceiveConfig( |
+ const rtclog::Event& event) const { |
+ rtclog::StreamConfig config; |
RTC_CHECK(event.has_type()); |
RTC_CHECK_EQ(event.type(), rtclog::Event::VIDEO_RECEIVER_CONFIG_EVENT); |
RTC_CHECK(event.has_video_receiver_config()); |
@@ -348,15 +344,15 @@ void ParsedRtcEventLog::GetVideoReceiveConfig( |
event.video_receiver_config(); |
// Get SSRCs. |
RTC_CHECK(receiver_config.has_remote_ssrc()); |
- config->remote_ssrc = receiver_config.remote_ssrc(); |
+ config.remote_ssrc = receiver_config.remote_ssrc(); |
RTC_CHECK(receiver_config.has_local_ssrc()); |
- config->local_ssrc = receiver_config.local_ssrc(); |
- config->rtx_ssrc = 0; |
+ config.local_ssrc = receiver_config.local_ssrc(); |
+ config.rtx_ssrc = 0; |
// Get RTCP settings. |
RTC_CHECK(receiver_config.has_rtcp_mode()); |
- config->rtcp_mode = GetRuntimeRtcpMode(receiver_config.rtcp_mode()); |
+ config.rtcp_mode = GetRuntimeRtcpMode(receiver_config.rtcp_mode()); |
RTC_CHECK(receiver_config.has_remb()); |
- config->remb = receiver_config.remb(); |
+ config.remb = receiver_config.remb(); |
// Get RTX map. |
std::map<uint32_t, const rtclog::RtxConfig> rtx_map; |
@@ -370,10 +366,10 @@ void ParsedRtcEventLog::GetVideoReceiveConfig( |
} |
// Get header extensions. |
- GetHeaderExtensions(&config->rtp_extensions, |
+ GetHeaderExtensions(&config.rtp_extensions, |
receiver_config.header_extensions()); |
// Get decoders. |
- config->codecs.clear(); |
+ config.codecs.clear(); |
for (int i = 0; i < receiver_config.decoders_size(); i++) { |
RTC_CHECK(receiver_config.decoders(i).has_name()); |
RTC_CHECK(receiver_config.decoders(i).has_payload_type()); |
@@ -381,74 +377,76 @@ void ParsedRtcEventLog::GetVideoReceiveConfig( |
auto rtx_it = rtx_map.find(receiver_config.decoders(i).payload_type()); |
if (rtx_it != rtx_map.end()) { |
rtx_payload_type = rtx_it->second.rtx_payload_type(); |
- if (config->rtx_ssrc != 0 && |
- config->rtx_ssrc != rtx_it->second.rtx_ssrc()) { |
+ if (config.rtx_ssrc != 0 && |
+ config.rtx_ssrc != rtx_it->second.rtx_ssrc()) { |
LOG(LS_WARNING) |
<< "RtcEventLog protobuf contained different SSRCs for " |
"different received RTX payload types. Will only use " |
"rtx_ssrc = " |
- << config->rtx_ssrc << "."; |
+ << config.rtx_ssrc << "."; |
} else { |
- config->rtx_ssrc = rtx_it->second.rtx_ssrc(); |
+ config.rtx_ssrc = rtx_it->second.rtx_ssrc(); |
} |
} |
- config->codecs.emplace_back(receiver_config.decoders(i).name(), |
- receiver_config.decoders(i).payload_type(), |
- rtx_payload_type); |
+ config.codecs.emplace_back(receiver_config.decoders(i).name(), |
+ receiver_config.decoders(i).payload_type(), |
+ rtx_payload_type); |
} |
+ return config; |
} |
-void ParsedRtcEventLog::GetVideoSendConfig(size_t index, |
- rtclog::StreamConfig* config) const { |
+std::vector<rtclog::StreamConfig> ParsedRtcEventLog::GetVideoSendConfig( |
+ size_t index) const { |
RTC_CHECK_LT(index, GetNumberOfEvents()); |
- GetVideoSendConfig(events_[index], config); |
+ return GetVideoSendConfig(events_[index]); |
} |
-void ParsedRtcEventLog::GetVideoSendConfig(const rtclog::Event& event, |
- rtclog::StreamConfig* config) const { |
- RTC_CHECK(config != nullptr); |
+ |
+std::vector<rtclog::StreamConfig> ParsedRtcEventLog::GetVideoSendConfig( |
+ const rtclog::Event& event) const { |
+ std::vector<rtclog::StreamConfig> configs; |
RTC_CHECK(event.has_type()); |
RTC_CHECK_EQ(event.type(), rtclog::Event::VIDEO_SENDER_CONFIG_EVENT); |
RTC_CHECK(event.has_video_sender_config()); |
const rtclog::VideoSendConfig& sender_config = event.video_sender_config(); |
- // Get SSRCs. |
- if (sender_config.ssrcs_size() > 0) { |
- config->local_ssrc = sender_config.ssrcs(0); |
- if (sender_config.ssrcs().size() > 1) { |
- LOG(WARNING) << "VideoSendConfig contains multiple ssrcs."; |
- } |
+ if (sender_config.rtx_ssrcs_size() > 0 && |
+ sender_config.ssrcs_size() != sender_config.rtx_ssrcs_size()) { |
+ LOG(WARNING) << "VideoSendConfig is configured for RTX but the number of " |
+ "SSRCs doesn't match the number of RTX SSRCs."; |
} |
- if (sender_config.rtx_ssrcs_size() > 0) { |
- RTC_CHECK(sender_config.has_rtx_payload_type()); |
- config->rtx_ssrc = sender_config.rtx_ssrcs(0); |
- if (sender_config.rtx_ssrcs_size() > 1) { |
- LOG(WARNING) << "VideoSendConfig contains multiple rtx ssrcs."; |
+ configs.resize(sender_config.ssrcs_size()); |
+ for (int i = 0; i < sender_config.ssrcs_size(); i++) { |
+ // Get SSRCs. |
+ configs[i].local_ssrc = sender_config.ssrcs(i); |
+ if (sender_config.rtx_ssrcs_size() > 0 && |
+ i < sender_config.rtx_ssrcs_size()) { |
+ RTC_CHECK(sender_config.has_rtx_payload_type()); |
+ configs[i].rtx_ssrc = sender_config.rtx_ssrcs(i); |
} |
+ // Get header extensions. |
+ GetHeaderExtensions(&configs[i].rtp_extensions, |
+ sender_config.header_extensions()); |
+ |
+ // Get the codec. |
+ RTC_CHECK(sender_config.has_encoder()); |
+ RTC_CHECK(sender_config.encoder().has_name()); |
+ RTC_CHECK(sender_config.encoder().has_payload_type()); |
+ configs[i].codecs.emplace_back( |
+ sender_config.encoder().name(), sender_config.encoder().payload_type(), |
+ sender_config.has_rtx_payload_type() ? sender_config.rtx_payload_type() |
+ : 0); |
} |
- // Get header extensions. |
- GetHeaderExtensions(&config->rtp_extensions, |
- sender_config.header_extensions()); |
- |
- // Get the codec. |
- RTC_CHECK(sender_config.has_encoder()); |
- RTC_CHECK(sender_config.encoder().has_name()); |
- RTC_CHECK(sender_config.encoder().has_payload_type()); |
- config->codecs.emplace_back( |
- sender_config.encoder().name(), sender_config.encoder().payload_type(), |
- sender_config.has_rtx_payload_type() ? sender_config.rtx_payload_type() |
- : 0); |
+ return configs; |
} |
-void ParsedRtcEventLog::GetAudioReceiveConfig( |
- size_t index, |
- rtclog::StreamConfig* config) const { |
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioReceiveConfig( |
+ size_t index) const { |
RTC_CHECK_LT(index, GetNumberOfEvents()); |
- GetAudioReceiveConfig(events_[index], config); |
+ return GetAudioReceiveConfig(events_[index]); |
} |
-void ParsedRtcEventLog::GetAudioReceiveConfig( |
- const rtclog::Event& event, |
- rtclog::StreamConfig* config) const { |
- RTC_CHECK(config != nullptr); |
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioReceiveConfig( |
+ const rtclog::Event& event) const { |
+ rtclog::StreamConfig config; |
RTC_CHECK(event.has_type()); |
RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_RECEIVER_CONFIG_EVENT); |
RTC_CHECK(event.has_audio_receiver_config()); |
@@ -456,33 +454,34 @@ void ParsedRtcEventLog::GetAudioReceiveConfig( |
event.audio_receiver_config(); |
// Get SSRCs. |
RTC_CHECK(receiver_config.has_remote_ssrc()); |
- config->remote_ssrc = receiver_config.remote_ssrc(); |
+ config.remote_ssrc = receiver_config.remote_ssrc(); |
RTC_CHECK(receiver_config.has_local_ssrc()); |
- config->local_ssrc = receiver_config.local_ssrc(); |
+ config.local_ssrc = receiver_config.local_ssrc(); |
// Get header extensions. |
- GetHeaderExtensions(&config->rtp_extensions, |
+ GetHeaderExtensions(&config.rtp_extensions, |
receiver_config.header_extensions()); |
+ return config; |
} |
-void ParsedRtcEventLog::GetAudioSendConfig(size_t index, |
- rtclog::StreamConfig* config) const { |
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioSendConfig(size_t index) const { |
RTC_CHECK_LT(index, GetNumberOfEvents()); |
- GetAudioSendConfig(events_[index], config); |
+ return GetAudioSendConfig(events_[index]); |
} |
-void ParsedRtcEventLog::GetAudioSendConfig(const rtclog::Event& event, |
- rtclog::StreamConfig* config) const { |
- RTC_CHECK(config != nullptr); |
+rtclog::StreamConfig ParsedRtcEventLog::GetAudioSendConfig( |
+ const rtclog::Event& event) const { |
+ rtclog::StreamConfig config; |
RTC_CHECK(event.has_type()); |
RTC_CHECK_EQ(event.type(), rtclog::Event::AUDIO_SENDER_CONFIG_EVENT); |
RTC_CHECK(event.has_audio_sender_config()); |
const rtclog::AudioSendConfig& sender_config = event.audio_sender_config(); |
// Get SSRCs. |
RTC_CHECK(sender_config.has_ssrc()); |
- config->local_ssrc = sender_config.ssrc(); |
+ config.local_ssrc = sender_config.ssrc(); |
// Get header extensions. |
- GetHeaderExtensions(&config->rtp_extensions, |
+ GetHeaderExtensions(&config.rtp_extensions, |
sender_config.header_extensions()); |
+ return config; |
} |
void ParsedRtcEventLog::GetAudioPlayout(size_t index, uint32_t* ssrc) const { |