libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtpancdepacketizerthread.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/ancdesc.h>
17#include <promeki/atomic.h>
18#include <promeki/clockdomain.h>
19#include <promeki/namespace.h>
20#include <promeki/queue.h>
22#include <promeki/rtppacket.h>
25#include <promeki/string.h>
26#include <promeki/timestamp.h>
27
28PROMEKI_NAMESPACE_BEGIN
29
30class RtpPayloadAnc;
31
46struct RtpAncDepacketizerContext {
49 Queue<RxAncFrame> *payloadQueue = nullptr;
50
55 const Atomic<uint32_t> *resetEpoch = nullptr;
56
60 const bool *active = nullptr;
61
64 RtpPayloadAnc *payload = nullptr;
65
72 AncDesc desc;
73
76 ClockDomain clockDomain;
77
80 const bool *hasSr = nullptr;
81
83 const RtpStreamClock *streamClock = nullptr;
84
87 Atomic<int64_t> *packetsReceived = nullptr;
88 Atomic<int64_t> *bytesReceived = nullptr;
89 Atomic<int64_t> *lastPacketArrivalNs = nullptr;
90 Atomic<int64_t> *framesReassembled = nullptr;
91 Atomic<int64_t> *framesDroppedSsrcReset = nullptr;
92
95 Function<void()> noteFrameReceived;
96
99 Function<void()> refreshStreamClock;
100
105 Function<TimeStamp(const NtpTime &)> ntpToSteady;
106};
107
124class RtpAncDepacketizerThread : public RtpDepacketizerThread {
125 public:
134 RtpAncDepacketizerThread(RtpAncDepacketizerContext ctx,
135 const String &name,
136 uint32_t clockRateHz);
137
138 ~RtpAncDepacketizerThread() override;
139
140 RtpAncDepacketizerThread(const RtpAncDepacketizerThread &) = delete;
141 RtpAncDepacketizerThread &operator=(const RtpAncDepacketizerThread &) = delete;
142
145 void handlePacketForTest(const RtpPacket &pkt) { handlePacket(pkt); }
146
151 void flushForTest() { emitFrame(); }
152
153 protected:
154 void handlePacket(const RtpPacket &pkt) override;
155 void onStop() override;
156
157 private:
158 void emitFrame();
159
160 RtpAncDepacketizerContext _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