libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
packetscheduler.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 <promeki/duration.h>
15#include <promeki/enums_rtp.h>
16#include <promeki/error.h>
17#include <promeki/namespace.h>
19#include <promeki/uniqueptr.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
77class PacketScheduler {
78 public:
80 using UPtr = UniquePtr<PacketScheduler>;
81
91 struct Spec {
106 Duration frameInterval;
107
119 uint64_t bytesPerSec = 0;
120
131 int packetsPerFrame = 0;
132
141 int trOffsetUs = 0;
142
152 int maxUdp = 0;
153 };
154
174 enum class CadenceMode {
175 PerBatch,
176 Streamwide,
177 };
178
179 PacketScheduler() = default;
180 virtual ~PacketScheduler() = default;
181
182 PacketScheduler(const PacketScheduler &) = delete;
183 PacketScheduler &operator=(const PacketScheduler &) = delete;
184
194 void setTransport(PacketTransport *t) { _transport = t; }
195
197 PacketTransport *transport() const { return _transport; }
198
212 virtual Error configure(const Spec &spec);
213
227 Error setRate(uint64_t bytesPerSec);
228
236 void setCadenceMode(CadenceMode mode) { _cadenceMode = mode; }
237
239 CadenceMode cadenceMode() const { return _cadenceMode; }
240
262 virtual int enqueue(const PacketTransport::DatagramList &datagrams) = 0;
263
273 virtual int predictedTxDelayUs() const { return 0; }
274
286 virtual Error flushPending() { return Error::Ok; }
287
296 virtual Error abort() { return Error::Ok; }
297
299 const Spec &spec() const { return _spec; }
300
322 static UPtr create(const Enum &mode, PacketTransport *transport);
323
324 protected:
325 PacketTransport *_transport = nullptr;
326 Spec _spec;
327 CadenceMode _cadenceMode = CadenceMode::PerBatch;
328};
329
330PROMEKI_NAMESPACE_END
331
332#endif // PROMEKI_ENABLE_NETWORK