[ekiga] Fix statistics
- From: Eugen Dedu <ededu src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [ekiga] Fix statistics
- Date: Mon, 27 Jul 2015 18:24:58 +0000 (UTC)
commit 80f105e995015aceaee373c7f2e9777b3e40d2ce
Author: Eugen Dedu <eugen dedu univ-fcomte fr>
Date: Mon Jul 27 20:23:51 2015 +0200
Fix statistics
Also, use the last second for statistics, not since the beginning of the
communication.
lib/engine/components/opal/opal-call.cpp | 90 ++++++++++++------------------
lib/engine/components/opal/opal-call.h | 6 ++-
lib/engine/protocol/rtcp-statistics.h | 4 +
3 files changed, 44 insertions(+), 56 deletions(-)
---
diff --git a/lib/engine/components/opal/opal-call.cpp b/lib/engine/components/opal/opal-call.cpp
index a3093db..57ca82f 100644
--- a/lib/engine/components/opal/opal-call.cpp
+++ b/lib/engine/components/opal/opal-call.cpp
@@ -318,23 +318,36 @@ Opal::Call::get_statistics ()
if (connection == NULL)
return statistics;
- OpalMediaStatistics re_a_statistics;
- OpalMediaStatistics tr_a_statistics;
- OpalMediaStatistics re_v_statistics;
- OpalMediaStatistics tr_v_statistics;
-
- OpalMediaStreamPtr stream = connection->GetMediaStream (OpalMediaType::Audio (), false); // Transmission
- if (stream)
- stream->GetStatistics (tr_a_statistics);
- stream = connection->GetMediaStream (OpalMediaType::Audio (), true); // Reception
- if (stream)
- stream->GetStatistics (re_a_statistics);
- stream = connection->GetMediaStream (OpalMediaType::Video (), false); // Transmission
- if (stream)
- stream->GetStatistics (tr_v_statistics);
- stream = connection->GetMediaStream (OpalMediaType::Video (), true); // Reception
- if (stream)
- stream->GetStatistics (re_v_statistics);
+ OpalMediaStreamPtr stream;
+ stream = connection->GetMediaStream (OpalMediaType::Audio (), false); // transmission
+ if (stream) {
+ tr_a_statistics.Update (*stream);
+ // GetBitRate is the average bit rate on the last second
+ statistics.transmitted_audio_bandwidth = tr_a_statistics.GetBitRate () / 1024;
+ statistics.jitter = tr_a_statistics.m_averageJitter;
+ }
+
+ stream = connection->GetMediaStream (OpalMediaType::Audio (), true); // reception
+ if (stream) {
+ re_a_statistics.Update (*stream);
+ statistics.received_audio_bandwidth = re_a_statistics.GetBitRate () / 1024;
+ statistics.remote_jitter = re_a_statistics.m_averageJitter;
+ }
+
+ stream = connection->GetMediaStream (OpalMediaType::Video (), false); // transmission
+ if (stream) {
+ tr_v_statistics.Update (*stream);
+ statistics.transmitted_video_bandwidth = tr_v_statistics.GetBitRate () / 1024;
+ // GetFrameRate is the average frame rate on the last second
+ statistics.transmitted_fps = tr_v_statistics.GetFrameRate ();
+ }
+
+ stream = connection->GetMediaStream (OpalMediaType::Video (), true); // reception
+ if (stream) {
+ re_v_statistics.Update (*stream);
+ statistics.received_video_bandwidth = re_v_statistics.GetBitRate () / 1024;
+ statistics.received_fps = re_v_statistics.GetFrameRate ();
+ }
for (PINDEX i = 0 ; KnownCodecs[i][0] ; i++) {
if (tr_a_statistics.m_mediaFormat == KnownCodecs[i][0])
@@ -347,45 +360,12 @@ Opal::Call::get_statistics ()
statistics.received_video_codec = gettext (KnownCodecs[i][1]);
}
- if (tr_a_statistics.m_startTime.IsValid ()) {
- PTimeInterval t = (PTime () - tr_a_statistics.m_startTime);
- if (t.GetSeconds () > 0)
- statistics.transmitted_audio_bandwidth = tr_a_statistics.m_totalBytes / t.GetSeconds () * 8 / 1024;
- statistics.jitter = tr_a_statistics.m_averageJitter;
- }
-
- if (re_a_statistics.m_startTime.IsValid ()) {
- PTimeInterval t = (PTime () - re_a_statistics.m_startTime);
- if (t.GetSeconds () > 0)
- statistics.received_audio_bandwidth = re_a_statistics.m_totalBytes / t.GetSeconds () * 8 / 1024;
- statistics.remote_jitter = re_a_statistics.m_averageJitter;
- }
-
- if (tr_v_statistics.m_startTime.IsValid ()) {
- PTimeInterval t = (PTime () - tr_v_statistics.m_startTime);
- if (t.GetSeconds () > 0) {
- statistics.transmitted_video_bandwidth = tr_v_statistics.m_totalBytes / t.GetSeconds () * 8 / 1024;
- statistics.transmitted_fps = tr_v_statistics.m_totalFrames / t.GetSeconds ();
- }
- }
-
- if (re_v_statistics.m_startTime.IsValid ()) {
- PTimeInterval t = (PTime () - re_v_statistics.m_startTime);
- if (t.GetSeconds () > 0) {
- statistics.received_video_bandwidth = re_v_statistics.m_totalBytes / t.GetSeconds () * 8 / 1024;
- statistics.received_fps = re_v_statistics.m_totalFrames / t.GetSeconds ();
- }
- }
-
- unsigned tr_total_packets = tr_a_statistics.m_totalPackets + tr_v_statistics.m_totalPackets;
- unsigned tr_lost_packets = tr_a_statistics.m_packetsLost + tr_v_statistics.m_packetsLost;
- unsigned re_total_packets = re_a_statistics.m_totalPackets + re_v_statistics.m_totalPackets;
- unsigned re_lost_packets = re_a_statistics.m_packetsLost + re_v_statistics.m_packetsLost;
+ // 100 * number of lost packets / by number of packets, on the last second
+ if (re_a_statistics.GetPacketRate () + re_v_statistics.GetPacketRate () != 0)
+ statistics.lost_packets = 100 * (re_a_statistics.GetLossRate () + re_v_statistics.GetLossRate ()) /
(re_a_statistics.GetPacketRate () + re_v_statistics.GetPacketRate ());
+ if (tr_a_statistics.GetPacketRate () + tr_v_statistics.GetPacketRate () != 0)
+ statistics.remote_lost_packets = 100 * (tr_a_statistics.GetLossRate () + tr_v_statistics.GetLossRate ())
/ (tr_a_statistics.GetPacketRate () + tr_v_statistics.GetPacketRate ());
- if (tr_total_packets > 0 && tr_total_packets > tr_lost_packets)
- statistics.lost_packets = (unsigned) (100 * tr_lost_packets / tr_total_packets);
- if (re_total_packets > 0 && re_total_packets > re_lost_packets)
- statistics.lost_packets = (unsigned) (100 * re_lost_packets / re_total_packets);
return statistics;
}
diff --git a/lib/engine/components/opal/opal-call.h b/lib/engine/components/opal/opal-call.h
index 2d14232..0690e45 100644
--- a/lib/engine/components/opal/opal-call.h
+++ b/lib/engine/components/opal/opal-call.h
@@ -240,9 +240,13 @@ private:
bool outgoing;
-private:
PTime start_time;
RTCPStatistics statistics;
+ OpalMediaStatistics re_a_statistics;
+ OpalMediaStatistics tr_a_statistics;
+ OpalMediaStatistics re_v_statistics;
+ OpalMediaStatistics tr_v_statistics;
+
bool auto_answer;
PDECLARE_NOTIFIER(PTimer, Opal::Call, OnNoAnswerTimeout);
diff --git a/lib/engine/protocol/rtcp-statistics.h b/lib/engine/protocol/rtcp-statistics.h
index c5ed5b0..7211ac2 100644
--- a/lib/engine/protocol/rtcp-statistics.h
+++ b/lib/engine/protocol/rtcp-statistics.h
@@ -41,8 +41,12 @@ class RTCPStatistics {
public:
RTCPStatistics () :
+ transmitted_audio_bandwidth (0),
+ received_audio_bandwidth (0),
jitter (0),
remote_jitter (0),
+ transmitted_video_bandwidth (0),
+ received_video_bandwidth (0),
received_fps (0),
transmitted_fps (0),
lost_packets (0),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]