libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtpdatadepacketizerthread.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
13#include <cstdint>
14#include <functional>
15#include <promeki/function.h>
16#include <promeki/atomic.h>
17#include <promeki/clockdomain.h>
18#include <promeki/namespace.h>
19#include <promeki/queue.h>
21#include <promeki/rtppacket.h>
22#include <promeki/rtppayload.h>
25#include <promeki/string.h>
26#include <promeki/timestamp.h>
27
28PROMEKI_NAMESPACE_BEGIN
29
46struct RtpDataDepacketizerContext {
50 Queue<RxDataMessage> *payloadQueue = nullptr;
51
57 const Atomic<uint32_t> *resetEpoch = nullptr;
58
62 const bool *active = nullptr;
63
67 RtpPayload *payload = nullptr;
68
72 ClockDomain clockDomain;
73
78 const bool *hasSr = nullptr;
79
81 const RtpStreamClock *streamClock = nullptr;
82
85 Atomic<int64_t> *packetsReceived = nullptr;
86 Atomic<int64_t> *bytesReceived = nullptr;
87 Atomic<int64_t> *lastPacketArrivalNs = nullptr;
88 Atomic<int64_t> *framesReassembled = nullptr;
89 Atomic<int64_t> *framesDroppedSsrcReset = nullptr;
90
93 Function<void()> noteFrameReceived;
94
97 Function<void()> refreshStreamClock;
98
104 Function<TimeStamp(const NtpTime &)> ntpToSteady;
105};
106
124class RtpDataDepacketizerThread : public RtpDepacketizerThread {
125 public:
133 RtpDataDepacketizerThread(RtpDataDepacketizerContext ctx,
134 const String &name,
135 uint32_t clockRateHz);
136
137 ~RtpDataDepacketizerThread() override;
138
139 RtpDataDepacketizerThread(const RtpDataDepacketizerThread &) = delete;
140 RtpDataDepacketizerThread &operator=(const RtpDataDepacketizerThread &) = delete;
141
144 void handlePacketForTest(const RtpPacket &pkt) { handlePacket(pkt); }
145
150 void flushForTest() { emitMessage(); }
151
152 protected:
153 void handlePacket(const RtpPacket &pkt) override;
154 void onStop() override;
155
156 private:
157 void emitMessage();
158
159 RtpDataDepacketizerContext _ctx;
160 RtpPacket::List _reasmPackets;
161 uint32_t _reasmTimestamp = 0;
162 bool _reasmHasTimestamp = false;
163 uint32_t _lastEpoch = 0;
164};
165
166PROMEKI_NAMESPACE_END
167
168#endif // PROMEKI_ENABLE_NETWORK