Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
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
19namespace roc {
20namespace rtcp {
21
22//! XR packet traverser.
24public:
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 DRLL_BLOCK, //!< DLRR block (delay since last receiver report).
33 END //!< Parsed whole packet.
34 };
35
36 //! Advance iterator.
38
39 //! Get RRTR block (receiver reference time).
40 //! @pre Can be used if next() returned RRTR_BLOCK.
42
43 //! Get DLRR block (delay since last receiver report).
44 //! @pre Can be used if next() returned DLRR_BLOCK.
46
47 private:
48 friend class XrTraverser;
49
50 explicit Iterator(const XrTraverser& traverser);
51
52 State state_;
54 uint8_t* pcur_;
55 };
56
57 //! Initialize traverser.
58 //! It will parse and iterate provided buffer.
59 explicit XrTraverser(const core::Slice<uint8_t>& data);
60
61 //! Parse packet from buffer.
62 bool parse();
63
64 //! Construct iterator.
65 //! @pre Can be used if parse() returned true.
66 Iterator iter() const;
67
68 //! Get number of XR blocks in packet.
69 size_t blocks_count() const;
70
71 //! Get XR packet.
72 const header::XrPacket& packet() const;
73
74private:
75 const core::Slice<uint8_t> data_;
76 bool parsed_;
77 size_t packet_len_;
78 size_t blocks_count_;
79};
80
81} // namespace rtcp
82} // namespace roc
83
84#endif // ROC_RTCP_XR_TRAVERSER_H_
State next()
Advance iterator.
const header::XrDlrrBlock & get_dlrr() const
Get DLRR block (delay since last receiver report).
@ RRTR_BLOCK
RRTR block (receiver reference time).
@ END
Parsed whole packet.
@ DRLL_BLOCK
DLRR block (delay since last receiver report).
const header::XrRrtrBlock & get_rrtr() const
Get RRTR block (receiver reference time).
XR packet traverser.
bool parse()
Parse packet from buffer.
size_t blocks_count() const
Get number of XR blocks in packet.
Iterator iter() const
Construct iterator.
XrTraverser(const core::Slice< uint8_t > &data)
Initialize traverser. It will parse and iterate provided buffer.
const header::XrPacket & packet() const
Get XR packet.
XR DLRR Report block.
Definition headers.h:1234
RTCP Extended Report Packet.
Definition headers.h:980
XR Receiver Reference Time Report block.
Definition headers.h:1114
Root namespace.
RTCP headers.
Slice.
Commonly used types and functions.