11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
22PROMEKI_NAMESPACE_BEGIN
77class RtpSeqReorderBuffer {
86 size_t maxWindow = 64;
98 Duration playoutDelay = Duration::fromMilliseconds(0);
104 uint64_t inserted = 0;
105 uint64_t emittedInOrder = 0;
106 uint64_t emittedOnDeadline = 0;
107 uint64_t droppedOnOverflow = 0;
108 uint64_t droppedAsDuplicate = 0;
111 RtpSeqReorderBuffer() =
default;
112 explicit RtpSeqReorderBuffer(
const Config &c);
133 void insert(RtpPacket pkt, uint32_t extendedSeq,
134 const TimeStamp &arrivalSteady, RtpPacket::Queue &out);
146 void flush(RtpPacket::Queue &out);
157 Stats snapshot()
const;
160 Config config()
const;
172 using EntryMap = Map<uint32_t, Entry>;
176 void drainInOrderLocked(RtpPacket::Queue &out);
180 void emitHeadLocked(RtpPacket::Queue &out,
bool deadline);
182 mutable Mutex _mutex;
185 bool _haveExpected =
false;
186 uint32_t _expectedSeq = 0;