UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
recv_report.cpp
Go to the documentation of this file.
1#include <QString>
2#include <QtGlobal>
3#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
4#include <QStyleFactory>
5#endif
6#include "recv_report.hpp"
8
10 elapsedTimer.start();
11 reset();
12 QObject::connect(&timer, &QTimer::timeout, this, &RecvReportWidget::timeout);
13 timer.setInterval(timeout_msec);
14#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
15 setStyle(QStyleFactory::create("Fusion")); //mac style progressbars have no text
16#endif
17}
18
20 reports.clear();
21 timer.stop();
22 setRange(0, 100);
23 setValue(0);
24 setFormat("No receiver report");
25 setTextVisible(true);
26 setToolTip("No RTCP receiver report. Note that this does not necessarily mean"
27 " that the receiver isn't receiving.");
28}
29
30void RecvReportWidget::parseLine(std::string_view line){
31 if(!sv_is_prefix(line, "Receiver of 0x"))
32 return;
33
34 auto tmp = std::string(line);
35 int ssrc = 0;
36 int rtt = 0;
37 float loss = 0;
38 int packets;
39 sscanf(tmp.c_str(), "Receiver of 0x%08x reports RTT=%d usec, loss %f%% (out of %d)", &ssrc, &rtt, &loss, &packets);
40
41 RecvReport report;
42 report.total = packets;
43 report.lost = packets * (loss / 100.f);
44 report.rtt_usec = rtt;
45
46 reports.insert(ssrc, report, elapsedTimer.elapsed());
47 updateVal();
48}
49
51 reports.remove_timed_out(timeout_msec, elapsedTimer.elapsed());
52
53 int total = 0;
54 int lost = 0;
55
56 QString tooltip;
57 for(const auto& r : reports.get()){
58 total += r.item.total;
59 lost += r.item.lost;
60 tooltip += QString::number(r.ssrc, 16) +
61 ": RTT=" + QString::number(r.item.rtt_usec) + "us\n";
62 }
63
64 if(tooltip.endsWith('\n'))
65 tooltip.chop(1);
66
67 if(total < 1) total = 1;
68
69 float loss = (static_cast<float>(lost) / total) * 100.f;
70
71 setFormat("Receiver reports %p% received");
72 setValue(100.f - loss);
73 setToolTip(tooltip);
74 timer.start();
75}
76
78 setValue(0);
79 setFormat("Receiver report timed out");
80 setToolTip("Receiver reports stopped arriving");
81}
const int timeout_msec
SSRC_container< RecvReport, decltype(elapsedTimer.elapsed())> reports
void parseLine(std::string_view line)
QElapsedTimer elapsedTimer
RecvReportWidget(QWidget *parent=nullptr)
const char * parent
Definition settings.cpp:198
bool sv_is_prefix(std::string_view haystack, std::string_view needle)
static struct @51 loss[MAX_HISTORY]