UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
RecvReportWidget Class Reference

#include <recv_report.hpp>

Inheritance diagram for RecvReportWidget:
Inheritance graph
Collaboration diagram for RecvReportWidget:
Collaboration graph

Classes

struct  RecvReport
 

Public Member Functions

 RecvReportWidget (QWidget *parent=nullptr)
 
 ~RecvReportWidget ()=default
 
void parseLine (std::string_view line)
 
void reset ()
 
void updateVal ()
 

Private Slots

void timeout ()
 

Private Attributes

QElapsedTimer elapsedTimer
 
SSRC_container< RecvReport, decltype(elapsedTimer.elapsed())> reports
 
const int timeout_msec = 15000
 
QTimer timer
 

Detailed Description

Definition at line 13 of file recv_report.hpp.

Constructor & Destructor Documentation

◆ RecvReportWidget()

RecvReportWidget::RecvReportWidget ( QWidget * parent = nullptr)

Definition at line 9 of file recv_report.cpp.

9 : QProgressBar(parent){
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}
const int timeout_msec
QElapsedTimer elapsedTimer
const char * parent
Definition settings.cpp:198

References elapsedTimer, reset(), timeout(), timeout_msec, and timer.

Here is the call graph for this function:

◆ ~RecvReportWidget()

RecvReportWidget::~RecvReportWidget ( )
default

Member Function Documentation

◆ parseLine()

void RecvReportWidget::parseLine ( std::string_view line)

Definition at line 30 of file recv_report.cpp.

30 {
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}
SSRC_container< RecvReport, decltype(elapsedTimer.elapsed())> reports
bool sv_is_prefix(std::string_view haystack, std::string_view needle)
static struct @51 loss[MAX_HISTORY]

References elapsedTimer, loss, RecvReportWidget::RecvReport::lost, reports, RecvReportWidget::RecvReport::rtt_usec, sv_is_prefix(), RecvReportWidget::RecvReport::total, and updateVal().

Here is the call graph for this function:

◆ reset()

void RecvReportWidget::reset ( )

Definition at line 19 of file recv_report.cpp.

19 {
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}

References reports, and timer.

Referenced by RecvReportWidget().

◆ timeout

void RecvReportWidget::timeout ( )
privateslot

Definition at line 77 of file recv_report.cpp.

77 {
78 setValue(0);
79 setFormat("Receiver report timed out");
80 setToolTip("Receiver reports stopped arriving");
81}

Referenced by RecvReportWidget().

◆ updateVal()

void RecvReportWidget::updateVal ( )

Definition at line 50 of file recv_report.cpp.

50 {
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}

References elapsedTimer, loss, reports, timeout_msec, and timer.

Referenced by parseLine().

Member Data Documentation

◆ elapsedTimer

QElapsedTimer RecvReportWidget::elapsedTimer
private

Definition at line 28 of file recv_report.hpp.

Referenced by RecvReportWidget(), parseLine(), and updateVal().

◆ reports

SSRC_container<RecvReport, decltype(elapsedTimer.elapsed())> RecvReportWidget::reports
private

Definition at line 35 of file recv_report.hpp.

Referenced by parseLine(), reset(), and updateVal().

◆ timeout_msec

const int RecvReportWidget::timeout_msec = 15000
private

Definition at line 37 of file recv_report.hpp.

Referenced by RecvReportWidget(), and updateVal().

◆ timer

QTimer RecvReportWidget::timer
private

Definition at line 27 of file recv_report.hpp.

Referenced by RecvReportWidget(), reset(), and updateVal().


The documentation for this class was generated from the following files: