Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(844)

Unified Diff: webrtc/tools/event_log_visualizer/analyzer.cc

Issue 2346363003: Added graph for plotting the audio level from an Rtc event log. (Closed)
Patch Set: Addressed comments by hlundin and terelius. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/tools/event_log_visualizer/analyzer.h ('k') | webrtc/tools/event_log_visualizer/main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/tools/event_log_visualizer/analyzer.cc
diff --git a/webrtc/tools/event_log_visualizer/analyzer.cc b/webrtc/tools/event_log_visualizer/analyzer.cc
index eab4dcf798623e75c2a1e80d27c865915a9108fb..260975b4b530f96bfff06f3f0b3eeff66e7e1526 100644
--- a/webrtc/tools/event_log_visualizer/analyzer.cc
+++ b/webrtc/tools/event_log_visualizer/analyzer.cc
@@ -100,6 +100,22 @@ void RegisterHeaderExtensions(
}
}
+// Return default values for header extensions, to use on streams without stored
+// mapping data. Currently this only applies to audio streams, since the mapping
+// is not stored in the event log.
+// TODO(ivoc): Remove this once this mapping is stored in the event log for
+// audio streams. Tracking bug: webrtc:6399
+webrtc::RtpHeaderExtensionMap GetDefaultHeaderExtensionMap() {
+ webrtc::RtpHeaderExtensionMap default_map;
+ default_map.Register(
+ webrtc::StringToRtpExtensionType(webrtc::RtpExtension::kAudioLevelUri),
+ webrtc::RtpExtension::kAudioLevelDefaultId);
+ default_map.Register(
+ webrtc::StringToRtpExtensionType(webrtc::RtpExtension::kAbsSendTimeUri),
+ webrtc::RtpExtension::kAbsSendTimeDefaultId);
+ return default_map;
+}
+
constexpr float kLeftMargin = 0.01f;
constexpr float kRightMargin = 0.02f;
constexpr float kBottomMargin = 0.02f;
@@ -281,6 +297,11 @@ EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log)
size_t header_length;
size_t total_length;
+ // Make a default extension map for streams without configuration information.
+ // TODO(ivoc): Once configuration of audio streams is stored in the event log,
+ // this can be removed. Tracking bug: webrtc:6399
+ RtpHeaderExtensionMap default_extension_map = GetDefaultHeaderExtensionMap();
+
for (size_t i = 0; i < parsed_log_.GetNumberOfEvents(); i++) {
ParsedRtcEventLog::EventType event_type = parsed_log_.GetEventType(i);
if (event_type != ParsedRtcEventLog::VIDEO_RECEIVER_CONFIG_EVENT &&
@@ -352,6 +373,12 @@ EventLogAnalyzer::EventLogAnalyzer(const ParsedRtcEventLog& log)
if (extension_maps.count(stream) == 1) {
RtpHeaderExtensionMap* extension_map = &extension_maps[stream];
rtp_parser.Parse(&parsed_header, extension_map);
+ } else {
+ // Use the default extension map.
+ // TODO(ivoc): Once configuration of audio streams is stored in the
+ // event log, this can be removed.
+ // Tracking bug: webrtc:6399
+ rtp_parser.Parse(&parsed_header, &default_extension_map);
}
uint64_t timestamp = parsed_log_.GetTimestamp(i);
rtp_packets_[stream].push_back(
@@ -482,6 +509,11 @@ std::string EventLogAnalyzer::GetStreamName(StreamId stream_id) const {
}
if (IsRtxSsrc(stream_id))
name << "RTX ";
+ if (stream_id.GetDirection() == kIncomingPacket) {
+ name << "(In) ";
+ } else {
+ name << "(Out) ";
+ }
name << SsrcToString(stream_id.GetSsrc());
return name.str();
}
@@ -600,6 +632,39 @@ void EventLogAnalyzer::CreatePlayoutGraph(Plot* plot) {
plot->SetTitle("Audio playout");
}
+// For audio SSRCs, plot the audio level.
+void EventLogAnalyzer::CreateAudioLevelGraph(Plot* plot) {
+ std::map<StreamId, TimeSeries> time_series;
+
+ for (auto& kv : rtp_packets_) {
+ StreamId stream_id = kv.first;
+ const std::vector<LoggedRtpPacket>& packet_stream = kv.second;
+ // TODO(ivoc): When audio send/receive configs are stored in the event
+ // log, a check should be added here to only process audio
+ // streams. Tracking bug: webrtc:6399
+ for (auto& packet : packet_stream) {
+ if (packet.header.extension.hasAudioLevel) {
+ float x = static_cast<float>(packet.timestamp - begin_time_) / 1000000;
+ // The audio level is stored in -dBov (so e.g. -10 dBov is stored as 10)
+ // Here we convert it to dBov.
+ float y = static_cast<float>(-packet.header.extension.audioLevel);
+ time_series[stream_id].points.emplace_back(TimeSeriesPoint(x, y));
+ }
+ }
+ }
+
+ for (auto& series : time_series) {
+ series.second.label = GetStreamName(series.first);
+ series.second.style = LINE_GRAPH;
+ plot->series_list_.push_back(std::move(series.second));
+ }
+
+ plot->SetXAxis(0, call_duration_s_, "Time (s)", kLeftMargin, kRightMargin);
+ plot->SetYAxis(-127, 0, "Audio playout level (dBov)", kBottomMargin,
+ kTopMargin);
+ plot->SetTitle("Audio level");
+}
+
// For each SSRC, plot the time between the consecutive playouts.
void EventLogAnalyzer::CreateSequenceNumberGraph(Plot* plot) {
for (auto& kv : rtp_packets_) {
« no previous file with comments | « webrtc/tools/event_log_visualizer/analyzer.h ('k') | webrtc/tools/event_log_visualizer/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698