11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
28PROMEKI_NAMESPACE_BEGIN
46struct RtpDataDepacketizerContext {
50 Queue<RxDataMessage> *payloadQueue =
nullptr;
57 const Atomic<uint32_t> *resetEpoch =
nullptr;
62 const bool *active =
nullptr;
67 RtpPayload *payload =
nullptr;
72 ClockDomain clockDomain;
78 const bool *hasSr =
nullptr;
81 const RtpStreamClock *streamClock =
nullptr;
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;
93 Function<void()> noteFrameReceived;
97 Function<void()> refreshStreamClock;
104 Function<TimeStamp(
const NtpTime &)> ntpToSteady;
124class RtpDataDepacketizerThread :
public RtpDepacketizerThread {
133 RtpDataDepacketizerThread(RtpDataDepacketizerContext ctx,
135 uint32_t clockRateHz);
137 ~RtpDataDepacketizerThread()
override;
139 RtpDataDepacketizerThread(
const RtpDataDepacketizerThread &) =
delete;
140 RtpDataDepacketizerThread &operator=(
const RtpDataDepacketizerThread &) =
delete;
144 void handlePacketForTest(
const RtpPacket &pkt) { handlePacket(pkt); }
150 void flushForTest() { emitMessage(); }
153 void handlePacket(
const RtpPacket &pkt)
override;
154 void onStop()
override;
159 RtpDataDepacketizerContext _ctx;
160 RtpPacket::List _reasmPackets;
161 uint32_t _reasmTimestamp = 0;
162 bool _reasmHasTimestamp =
false;
163 uint32_t _lastEpoch = 0;