Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
writer.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2015 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_fec/writer.h
10
//! @brief FEC writer.
11
12
#ifndef ROC_FEC_WRITER_H_
13
#define ROC_FEC_WRITER_H_
14
15
#include "
roc_core/array.h
"
16
#include "
roc_core/iarena.h
"
17
#include "
roc_core/noncopyable.h
"
18
#include "
roc_core/slice.h
"
19
#include "
roc_fec/iblock_encoder.h
"
20
#include "
roc_packet/icomposer.h
"
21
#include "
roc_packet/iwriter.h
"
22
#include "
roc_packet/packet.h
"
23
#include "
roc_packet/packet_factory.h
"
24
25
namespace
roc
{
26
namespace
fec
{
27
28
//! FEC writer parameters.
29
struct
WriterConfig {
30
//! Number of data packets in block.
31
size_t
n_source_packets
;
32
33
//! Number of FEC packets in block.
34
size_t
n_repair_packets
;
35
36
WriterConfig()
37
:
n_source_packets
(18)
38
,
n_repair_packets
(10) {
39
}
40
};
41
42
//! FEC writer.
43
class
Writer
:
public
packet::IWriter
,
public
core::NonCopyable
<> {
44
public
:
45
//! Initialize.
46
//!
47
//! @b Parameters
48
//! - @p config contains FEC scheme parameters
49
//! - @p encoder is used to encode repair packets
50
//! - @p writer is used to write source and repair packets
51
//! - @p source_composer is used to format source packets
52
//! - @p repair_composer is used to format repair packets
53
//! - @p packet_factory is used to allocate repair packets
54
//! - @p buffer_factory is used to allocate buffers for repair packets
55
//! - @p arena is used to initialize a packet array
56
Writer
(
const
WriterConfig
& config,
57
packet::FecScheme
fec_scheme,
58
IBlockEncoder
& encoder,
59
packet::IWriter
& writer,
60
packet::IComposer
& source_composer,
61
packet::IComposer
& repair_composer,
62
packet::PacketFactory
& packet_factory,
63
core::IArena
& arena);
64
65
//! Check if object is successfully constructed.
66
bool
is_valid
()
const
;
67
68
//! Check if writer is still working.
69
bool
is_alive
()
const
;
70
71
//! Set number of source packets per block.
72
bool
resize
(
size_t
sblen,
size_t
rblen);
73
74
//! Write packet.
75
//! @remarks
76
//! - writes the given source packet to the output writer
77
//! - generates repair packets and also writes them to the output writer
78
virtual
ROC_ATTR_NODISCARD
status::StatusCode
write
(
const
packet::PacketPtr
&);
79
80
private
:
81
bool
begin_block_(
const
packet::PacketPtr
& pp);
82
void
end_block_();
83
void
next_block_();
84
85
bool
apply_sizes_(
size_t
sblen,
size_t
rblen,
size_t
payload_size);
86
87
status::StatusCode
write_source_packet_(
const
packet::PacketPtr
&);
88
void
make_repair_packets_();
89
packet::PacketPtr
make_repair_packet_(
packet::seqnum_t
n);
90
void
encode_repair_packets_();
91
void
compose_repair_packets_();
92
status::StatusCode
write_repair_packets_();
93
void
fill_packet_fec_fields_(
const
packet::PacketPtr
&
packet
,
packet::seqnum_t
n);
94
95
void
validate_fec_packet_(
const
packet::PacketPtr
&);
96
bool
validate_source_packet_(
const
packet::PacketPtr
&);
97
98
size_t
cur_sblen_;
99
size_t
next_sblen_;
100
101
size_t
cur_rblen_;
102
size_t
next_rblen_;
103
104
size_t
cur_payload_size_;
105
106
IBlockEncoder
& encoder_;
107
packet::IWriter
& writer_;
108
109
packet::IComposer
& source_composer_;
110
packet::IComposer
& repair_composer_;
111
112
packet::PacketFactory
& packet_factory_;
113
114
core::Array<packet::PacketPtr>
repair_block_;
115
116
bool
first_packet_;
117
118
packet::blknum_t
cur_sbn_;
119
packet::seqnum_t
cur_block_repair_sn_;
120
121
size_t
cur_packet_;
122
123
const
packet::FecScheme
fec_scheme_;
124
125
bool
valid_;
126
bool
alive_;
127
};
128
129
}
// namespace fec
130
}
// namespace roc
131
132
#endif
// ROC_FEC_WRITER_H_
array.h
Dynamic array.
ROC_ATTR_NODISCARD
#define ROC_ATTR_NODISCARD
Emit warning if function result is not checked.
Definition
attributes.h:31
roc::core::Array
Dynamic array.
Definition
array.h:40
roc::core::IArena
Memory arena interface.
Definition
iarena.h:23
roc::core::NonCopyable
Base class for non-copyable objects.
Definition
noncopyable.h:23
roc::fec::IBlockEncoder
FEC block encoder interface.
Definition
iblock_encoder.h:22
roc::fec::Writer::is_alive
bool is_alive() const
Check if writer is still working.
roc::fec::Writer::is_valid
bool is_valid() const
Check if object is successfully constructed.
roc::fec::Writer::resize
bool resize(size_t sblen, size_t rblen)
Set number of source packets per block.
roc::fec::Writer::Writer
Writer(const WriterConfig &config, packet::FecScheme fec_scheme, IBlockEncoder &encoder, packet::IWriter &writer, packet::IComposer &source_composer, packet::IComposer &repair_composer, packet::PacketFactory &packet_factory, core::IArena &arena)
Initialize.
roc::fec::Writer::write
virtual ROC_ATTR_NODISCARD status::StatusCode write(const packet::PacketPtr &)
Write packet.
roc::packet::IComposer
Packet composer interface.
Definition
icomposer.h:22
roc::packet::IWriter
Packet writer interface.
Definition
iwriter.h:23
roc::packet::PacketFactory
Packet factory.
Definition
packet_factory.h:36
iarena.h
Memory arena interface.
iblock_encoder.h
FEC block encoder interface.
icomposer.h
Packet composer interface.
iwriter.h
Packet writer interface.
roc::fec
FEC support.
roc::packet
Network packets and packet processing.
roc::packet::PacketPtr
core::SharedPtr< Packet > PacketPtr
Packet smart pointer.
Definition
packet.h:34
roc::packet::seqnum_t
uint16_t seqnum_t
Packet sequence number.
Definition
units.h:78
roc::packet::blknum_t
uint16_t blknum_t
FEC packet block number.
Definition
units.h:130
roc::packet::FecScheme
FecScheme
FECFRAME scheme.
Definition
fec.h:23
roc
Root namespace.
noncopyable.h
Non-copyable object.
packet.h
Packet.
packet_factory.h
Packet factory.
slice.h
Slice.
roc::status::StatusCode
StatusCode
Status code.
Definition
status_code.h:19
roc::fec::WriterConfig
FEC writer parameters.
Definition
writer.h:29
roc::fec::WriterConfig::n_repair_packets
size_t n_repair_packets
Number of FEC packets in block.
Definition
writer.h:34
roc::fec::WriterConfig::n_source_packets
size_t n_source_packets
Number of data packets in block.
Definition
writer.h:31
roc_fec
writer.h
Generated by
1.17.0