Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
depacketizer.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_audio/depacketizer.h
10
//! @brief Depacketizer.
11
12
#ifndef ROC_AUDIO_DEPACKETIZER_H_
13
#define ROC_AUDIO_DEPACKETIZER_H_
14
15
#include "
roc_audio/iframe_decoder.h
"
16
#include "
roc_audio/iframe_reader.h
"
17
#include "
roc_audio/sample.h
"
18
#include "
roc_audio/sample_spec.h
"
19
#include "
roc_core/noncopyable.h
"
20
#include "
roc_core/rate_limiter.h
"
21
#include "
roc_packet/ireader.h
"
22
23
namespace
roc
{
24
namespace
audio
{
25
26
//! Depacketizer.
27
//! @remarks
28
//! Reads packets from a packet reader, decodes samples from packets using a
29
//! decoder, and produces an audio stream.
30
class
Depacketizer
:
public
IFrameReader
,
public
core::NonCopyable
<> {
31
public
:
32
//! Initialization.
33
//!
34
//! @b Parameters
35
//! - @p reader is used to read packets
36
//! - @p payload_decoder is used to extract samples from packets
37
//! - @p sample_spec describes output frames
38
//! - @p beep enables weird beeps instead of silence on packet loss
39
Depacketizer
(
packet::IReader
& reader,
40
IFrameDecoder
& payload_decoder,
41
const
SampleSpec
& sample_spec,
42
bool
beep);
43
44
//! Was depacketizer constructed without errors?
45
bool
is_valid
()
const
;
46
47
//! Did depacketizer catch first packet?
48
bool
is_started
()
const
;
49
50
//! Read audio frame.
51
virtual
bool
read
(
Frame
& frame);
52
53
//! Get next timestamp to be rendered.
54
//! @pre
55
//! is_started() should return true
56
packet::stream_timestamp_t
next_timestamp
()
const
;
57
58
private
:
59
struct
FrameInfo {
60
// Number of samples decoded from packets into the frame.
61
size_t
n_decoded_samples;
62
63
// Number of samples filled out in the frame.
64
size_t
n_filled_samples;
65
66
// Number of packets dropped during frame construction.
67
size_t
n_dropped_packets;
68
69
// This frame first sample timestamp.
70
core::nanoseconds_t
capture_ts;
71
72
FrameInfo()
73
: n_decoded_samples(0)
74
, n_filled_samples(0)
75
, n_dropped_packets(0)
76
, capture_ts(0) {
77
}
78
};
79
80
void
read_frame_(Frame& frame);
81
82
sample_t
* read_samples_(
sample_t
* buff_ptr,
sample_t
* buff_end, FrameInfo& info);
83
84
sample_t
* read_packet_samples_(
sample_t
* buff_ptr,
sample_t
* buff_end);
85
sample_t
* read_missing_samples_(
sample_t
* buff_ptr,
sample_t
* buff_end);
86
87
void
update_packet_(FrameInfo& info);
88
packet::PacketPtr
read_packet_();
89
90
void
set_frame_props_(Frame& frame,
const
FrameInfo& info);
91
92
void
report_stats_();
93
94
packet::IReader
& reader_;
95
IFrameDecoder& payload_decoder_;
96
97
const
SampleSpec sample_spec_;
98
99
packet::PacketPtr
packet_;
100
101
packet::stream_timestamp_t
stream_ts_;
102
core::nanoseconds_t
next_capture_ts_;
103
bool
valid_capture_ts_;
104
105
packet::stream_timestamp_t
zero_samples_;
106
packet::stream_timestamp_t
missing_samples_;
107
packet::stream_timestamp_t
packet_samples_;
108
109
core::RateLimiter
rate_limiter_;
110
111
const
bool
beep_;
112
113
bool
first_packet_;
114
bool
valid_;
115
};
116
117
}
// namespace audio
118
}
// namespace roc
119
120
#endif
// ROC_AUDIO_DEPACKETIZER_H_
roc::audio::Depacketizer::is_started
bool is_started() const
Did depacketizer catch first packet?
roc::audio::Depacketizer::Depacketizer
Depacketizer(packet::IReader &reader, IFrameDecoder &payload_decoder, const SampleSpec &sample_spec, bool beep)
Initialization.
roc::audio::Depacketizer::read
virtual bool read(Frame &frame)
Read audio frame.
roc::audio::Depacketizer::is_valid
bool is_valid() const
Was depacketizer constructed without errors?
roc::audio::Depacketizer::next_timestamp
packet::stream_timestamp_t next_timestamp() const
Get next timestamp to be rendered.
roc::audio::Frame
Audio frame.
Definition
frame.h:25
roc::audio::IFrameDecoder
Audio frame decoder interface.
Definition
iframe_decoder.h:24
roc::audio::IFrameReader
Frame reader interface.
Definition
iframe_reader.h:22
roc::audio::SampleSpec
Sample specification. Describes sample rate and channels.
Definition
sample_spec.h:30
roc::core::NonCopyable
Base class for non-copyable objects.
Definition
noncopyable.h:23
roc::core::RateLimiter
Rate limiter.
Definition
rate_limiter.h:22
roc::packet::IReader
Packet reader interface.
Definition
ireader.h:23
iframe_decoder.h
Audio frame decoder interface.
iframe_reader.h
Frame reader interface.
ireader.h
Packet reader interface.
roc::audio
Audio frames and audio processing.
roc::audio::sample_t
float sample_t
Raw audio sample.
Definition
sample.h:22
roc::core::nanoseconds_t
int64_t nanoseconds_t
Nanoseconds.
Definition
time.h:58
roc::packet::PacketPtr
core::SharedPtr< Packet > PacketPtr
Packet smart pointer.
Definition
packet.h:34
roc::packet::stream_timestamp_t
uint32_t stream_timestamp_t
Packet stream timestamp.
Definition
units.h:36
roc
Root namespace.
noncopyable.h
Non-copyable object.
rate_limiter.h
Rate limiter.
sample.h
Audio sample.
sample_spec.h
Sample specifications.
roc_audio
depacketizer.h
Generated by
1.17.0