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 size_t queueDepth = DefaultInputQueueDepth);
137
138 ~RtpDataDepacketizerThread() override;
139
140 RtpDataDepacketizerThread(const RtpDataDepacketizerThread &) = delete;
141 RtpDataDepacketizerThread &operator=(const RtpDataDepacketizerThread &) = delete;
142
145 void handlePacketForTest(const RtpPacket &pkt) { handlePacket(pkt); }
146
151 void flushForTest() { emitMessage(); }
152
153 protected:
154 void handlePacket(const RtpPacket &pkt) override;
155 void onStop() override;
156
157 private:
158 void emitMessage();
159
160 RtpDataDepacketizerContext _ctx;
161 RtpPacket::List _reasmPackets;
162 uint32_t _reasmTimestamp = 0;
163 bool _reasmHasTimestamp = false;
164 uint32_t _lastEpoch = 0;
165};
166
167PROMEKI_NAMESPACE_END
168
169#endif // PROMEKI_ENABLE_NETWORK