Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
xr_traverser.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2022 Roc Streaming authors
3
*
4
* This Source Code Form is subject to the terms of the Mozilla Public
5
* License, v. 2.0. If a copy of the MPL was not distributed with this
6
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
*/
8
9
//! @file roc_rtcp/xr_traverser.h
10
//! @brief XR Traverser.
11
12
#ifndef ROC_RTCP_XR_TRAVERSER_H_
13
#define ROC_RTCP_XR_TRAVERSER_H_
14
15
#include "
roc_core/slice.h
"
16
#include "
roc_core/stddefs.h
"
17
#include "
roc_rtcp/headers.h
"
18
19
namespace
roc
{
20
namespace
rtcp
{
21
22
//! XR packet traverser.
23
class
XrTraverser
{
24
public
:
25
//! Packet iterator.
26
class
Iterator {
27
public
:
28
//! Iterator state.
29
enum
State
{
30
BEGIN
,
//!< Iterator created.
31
RRTR_BLOCK
,
//!< RRTR block (receiver reference time).
32
DLRR_BLOCK
,
//!< DLRR block (delay since last receiver report).
33
MEASUREMENT_INFO_BLOCK
,
//!< Measurement information block.
34
DELAY_METRICS_BLOCK
,
//!< Delay metrics block.
35
QUEUE_METRICS_BLOCK
,
//!< Queue metrics block.
36
END
//!< Parsed whole packet.
37
};
38
39
//! Advance iterator.
40
State
next
();
41
42
//! Check if there were any parsing errors.
43
bool
error
()
const
;
44
45
//! Get RRTR block (receiver reference time).
46
//! @pre Can be used if next() returned RRTR_BLOCK.
47
const
header::XrRrtrBlock
&
get_rrtr
()
const
;
48
49
//! Get DLRR block (delay since last receiver report).
50
//! @pre Can be used if next() returned DLRR_BLOCK.
51
const
header::XrDlrrBlock
&
get_dlrr
()
const
;
52
53
//! Get measurement info block.
54
//! @pre Can be used if next() returned RRTR_MEASUREMENT_INFO_BLOCK
55
const
header::XrMeasurementInfoBlock
&
get_measurement_info
()
const
;
56
57
//! Get delay metrics block.
58
//! @pre Can be used if next() returned DELAY_METRICS_BLOCK
59
const
header::XrDelayMetricsBlock
&
get_delay_metrics
()
const
;
60
61
//! Get queue metrics block.
62
//! @pre Can be used if next() returned QUEUE_METRICS_BLOCK
63
const
header::XrQueueMetricsBlock
&
get_queue_metrics
()
const
;
64
65
private
:
66
friend
class
XrTraverser;
67
68
explicit
Iterator(
const
XrTraverser& traverser);
69
void
next_block_();
70
bool
check_rrtr_();
71
bool
check_dlrr_();
72
bool
check_measurement_info_();
73
bool
check_delay_metrics_();
74
bool
check_queue_metrics_();
75
76
State
state_;
77
const
core::Slice<uint8_t>
buf_;
78
size_t
cur_pos_;
79
const
header::XrBlockHeader
* cur_blk_header_;
80
size_t
cur_blk_len_;
81
bool
error_;
82
};
83
84
//! Initialize traverser.
85
//! It will parse and iterate provided buffer.
86
explicit
XrTraverser
(
const
core::Slice<uint8_t>
& buf);
87
88
//! Parse packet from buffer.
89
bool
parse
();
90
91
//! Construct iterator.
92
//! @pre Can be used if parse() returned true.
93
Iterator
iter
()
const
;
94
95
//! Get number of XR blocks in packet.
96
size_t
blocks_count
()
const
;
97
98
//! Get XR packet.
99
const
header::XrPacket
&
packet
()
const
;
100
101
private
:
102
core::Slice<uint8_t>
buf_;
103
bool
parsed_;
104
size_t
blocks_count_;
105
};
106
107
}
// namespace rtcp
108
}
// namespace roc
109
110
#endif
// ROC_RTCP_XR_TRAVERSER_H_
roc::core::Slice
Slice.
Definition
slice.h:55
roc::rtcp::XrTraverser::Iterator
Packet iterator.
Definition
xr_traverser.h:26
roc::rtcp::XrTraverser::Iterator::next
State next()
Advance iterator.
roc::rtcp::XrTraverser::Iterator::get_measurement_info
const header::XrMeasurementInfoBlock & get_measurement_info() const
Get measurement info block.
roc::rtcp::XrTraverser::Iterator::get_dlrr
const header::XrDlrrBlock & get_dlrr() const
Get DLRR block (delay since last receiver report).
roc::rtcp::XrTraverser::Iterator::error
bool error() const
Check if there were any parsing errors.
roc::rtcp::XrTraverser::Iterator::get_delay_metrics
const header::XrDelayMetricsBlock & get_delay_metrics() const
Get delay metrics block.
roc::rtcp::XrTraverser::Iterator::get_queue_metrics
const header::XrQueueMetricsBlock & get_queue_metrics() const
Get queue metrics block.
roc::rtcp::XrTraverser::Iterator::State
State
Iterator state.
Definition
xr_traverser.h:29
roc::rtcp::XrTraverser::Iterator::DLRR_BLOCK
@ DLRR_BLOCK
DLRR block (delay since last receiver report).
Definition
xr_traverser.h:32
roc::rtcp::XrTraverser::Iterator::DELAY_METRICS_BLOCK
@ DELAY_METRICS_BLOCK
Delay metrics block.
Definition
xr_traverser.h:34
roc::rtcp::XrTraverser::Iterator::BEGIN
@ BEGIN
Iterator created.
Definition
xr_traverser.h:30
roc::rtcp::XrTraverser::Iterator::RRTR_BLOCK
@ RRTR_BLOCK
RRTR block (receiver reference time).
Definition
xr_traverser.h:31
roc::rtcp::XrTraverser::Iterator::END
@ END
Parsed whole packet.
Definition
xr_traverser.h:36
roc::rtcp::XrTraverser::Iterator::MEASUREMENT_INFO_BLOCK
@ MEASUREMENT_INFO_BLOCK
Measurement information block.
Definition
xr_traverser.h:33
roc::rtcp::XrTraverser::Iterator::QUEUE_METRICS_BLOCK
@ QUEUE_METRICS_BLOCK
Queue metrics block.
Definition
xr_traverser.h:35
roc::rtcp::XrTraverser::Iterator::get_rrtr
const header::XrRrtrBlock & get_rrtr() const
Get RRTR block (receiver reference time).
roc::rtcp::XrTraverser::parse
bool parse()
Parse packet from buffer.
roc::rtcp::XrTraverser::blocks_count
size_t blocks_count() const
Get number of XR blocks in packet.
roc::rtcp::XrTraverser::iter
Iterator iter() const
Construct iterator.
roc::rtcp::XrTraverser::XrTraverser
XrTraverser(const core::Slice< uint8_t > &buf)
Initialize traverser. It will parse and iterate provided buffer.
roc::rtcp::XrTraverser::packet
const header::XrPacket & packet() const
Get XR packet.
roc::rtcp::header::XrBlockHeader
XR Block Header.
Definition
headers.h:1100
roc::rtcp::header::XrDelayMetricsBlock
XR Delay Metrics Block.
Definition
headers.h:1515
roc::rtcp::header::XrDlrrBlock
XR DLRR Report block.
Definition
headers.h:1303
roc::rtcp::header::XrMeasurementInfoBlock
XR Measurement Info Report Block.
Definition
headers.h:1373
roc::rtcp::header::XrPacket
RTCP Extended Report Packet.
Definition
headers.h:1035
roc::rtcp::header::XrQueueMetricsBlock
XR Queue Metrics Block.
Definition
headers.h:1668
roc::rtcp::header::XrRrtrBlock
XR Receiver Reference Time Report block.
Definition
headers.h:1174
roc::rtcp
RTCP protocol support.
roc
Root namespace.
headers.h
RTCP headers.
slice.h
Slice.
stddefs.h
Commonly used types and functions.
roc_rtcp
xr_traverser.h
Generated by
1.17.0