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

#include <recv_loss.hpp>

Inheritance diagram for RecvLossWidget:
Inheritance graph
Collaboration diagram for RecvLossWidget:
Collaboration graph

Classes

struct  SSRC_report
 

Public Member Functions

 RecvLossWidget (QWidget *parent=nullptr)
 
 ~RecvLossWidget ()=default
 
void parseLine (std::string_view)
 
void reset ()
 

Private Slots

void timeout ()
 

Private Member Functions

void addReport (int ssrc, int received, int total)
 
void updateVal ()
 

Private Attributes

QElapsedTimer elapsedTimer
 
SSRC_container< SSRC_report, decltype(elapsedTimer.elapsed())> reports
 
QTimer timer
 

Static Private Attributes

static const int timeout_msec = 15000
 

Detailed Description

Definition at line 13 of file recv_loss.hpp.

Constructor & Destructor Documentation

◆ RecvLossWidget()

RecvLossWidget::RecvLossWidget ( QWidget * parent = nullptr)

Definition at line 8 of file recv_loss.cpp.

8 : QProgressBar(parent){
9 elapsedTimer.start();
10 reset();
11 QObject::connect(&timer, &QTimer::timeout, this, &RecvLossWidget::timeout);
12 timer.setInterval(timeout_msec);
13#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
14 setStyle(QStyleFactory::create("Fusion")); //mac style progressbars have no text
15#endif
16}
static const int timeout_msec
Definition recv_loss.hpp:26
QElapsedTimer elapsedTimer
Definition recv_loss.hpp:28
const char * parent
Definition settings.cpp:198

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

Here is the call graph for this function:

◆ ~RecvLossWidget()

RecvLossWidget::~RecvLossWidget ( )
default

Member Function Documentation

◆ addReport()

void RecvLossWidget::addReport ( int ssrc,
int received,
int total )
private

Definition at line 56 of file recv_loss.cpp.

56 {
57 SSRC_report rep;
58 rep.received = received;
59 rep.total = total;
60 reports.insert(ssrc, rep, elapsedTimer.elapsed());
61}
SSRC_container< SSRC_report, decltype(elapsedTimer.elapsed())> reports
Definition recv_loss.hpp:34

References elapsedTimer, RecvLossWidget::SSRC_report::received, reports, and RecvLossWidget::SSRC_report::total.

Referenced by parseLine().

◆ parseLine()

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

Definition at line 29 of file recv_loss.cpp.

29 {
30 if(!sv_is_prefix(line, "SSRC "))
31 return;
32
33 auto tmp = line;
34 tokenize(tmp, ' '); //"SSRC"
35 auto ssrc_sv = tokenize(tmp, ' '); //actual ssrc
36 if(ssrc_sv.substr(0, 2) == "0x")
37 ssrc_sv.remove_prefix(2);
38 auto packet_counts = tokenize(tmp, ' '); //received/total
39
40 auto received_sv = tokenize(packet_counts, '/');
41 auto total_sv = tokenize(packet_counts, '/');
42
43 int ssrc;
44 int received;
45 int total;
46
47 if(!parse_num(received_sv, received)
48 || !parse_num(total_sv, total)
49 || !parse_num(ssrc_sv, ssrc, 16))
50 return;
51
52 addReport(ssrc, received, total);
53 updateVal();
54}
void addReport(int ssrc, int received, int total)
Definition recv_loss.cpp:56
std::string_view tokenize(std::string_view &str, char delim, char quot)
Tokenizer for string_view.
bool parse_num(std::string_view sv, T &res, int base=10)
bool sv_is_prefix(std::string_view haystack, std::string_view needle)

References addReport(), parse_num(), sv_is_prefix(), tokenize(), and updateVal().

Here is the call graph for this function:

◆ reset()

void RecvLossWidget::reset ( )

Definition at line 18 of file recv_loss.cpp.

18 {
19 timer.stop();
20 setRange(0, 100);
21 setValue(0);
22 setFormat("Nothing received");
23 setTextVisible(true);
24 setToolTip("Nothing received");
25
26 reports.clear();
27}

References reports, and timer.

Referenced by RecvLossWidget(), and UltragridWindow::UltragridWindow().

◆ timeout

void RecvLossWidget::timeout ( )
privateslot

Definition at line 90 of file recv_loss.cpp.

90 {
91 setValue(0);
92 setFormat("Nothing received");
93 setToolTip("Nothing received");
94}

Referenced by RecvLossWidget().

◆ updateVal()

void RecvLossWidget::updateVal ( )
private

Definition at line 63 of file recv_loss.cpp.

63 {
64 int received = 0;
65 int total = 0;
66
67 reports.remove_timed_out(timeout_msec, elapsedTimer.elapsed());
68
69 QString tooltip;
70 for(auto& r : reports.get()){
71 received += r.item.received;
72 total += r.item.total;
73 tooltip += QString::number(r.ssrc, 16) + ": "
74 + QString::number(r.item.received) + '/' + QString::number(r.item.total) + '\n';
75 }
76
77 if(tooltip.endsWith('\n'))
78 tooltip.chop(1);
79
80 if(total < 1)
81 total = 1;
82
83 float ratio = ((float) received / total) * 100.f;
84 setFormat("Received %p% of packets");
85 setValue(ratio);
86 setToolTip(tooltip);
87 timer.start();
88}

References elapsedTimer, reports, timeout_msec, and timer.

Referenced by parseLine().

Member Data Documentation

◆ elapsedTimer

QElapsedTimer RecvLossWidget::elapsedTimer
private

Definition at line 28 of file recv_loss.hpp.

Referenced by RecvLossWidget(), addReport(), and updateVal().

◆ reports

SSRC_container<SSRC_report, decltype(elapsedTimer.elapsed())> RecvLossWidget::reports
private

Definition at line 34 of file recv_loss.hpp.

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

◆ timeout_msec

const int RecvLossWidget::timeout_msec = 15000
staticprivate

Definition at line 26 of file recv_loss.hpp.

Referenced by RecvLossWidget(), and updateVal().

◆ timer

QTimer RecvLossWidget::timer
private

Definition at line 27 of file recv_loss.hpp.

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


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