libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
rtppacketizerthread.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 <promeki/atomic.h>
14#include <promeki/error.h>
15#include <promeki/frame.h>
16#include <promeki/framenumber.h>
17#include <promeki/namespace.h>
18#include <promeki/queue.h>
19#include <promeki/string.h>
20#include <promeki/thread.h>
21
22PROMEKI_NAMESPACE_BEGIN
23
35struct RtpFrameWork {
36 Frame frame;
37 FrameNumber frameIndex;
38};
39
82class RtpPacketizerThread : public Thread {
83 public:
90 static constexpr size_t DefaultPayloadQueueDepth = 2;
91
106 RtpPacketizerThread(const String &name,
107 size_t depth = DefaultPayloadQueueDepth);
108
112 ~RtpPacketizerThread() override;
113
114 RtpPacketizerThread(const RtpPacketizerThread &) = delete;
115 RtpPacketizerThread &operator=(const RtpPacketizerThread &) = delete;
116
130 Error pushWork(const RtpFrameWork &work, unsigned int timeoutMs = 0);
131
142 void requestStop();
143
146 bool isStopRequested() const { return _stopRequested.value(); }
147
152 Queue<RtpFrameWork> &payloadQueue() { return _payloadQueue; }
153
155 const Queue<RtpFrameWork> &payloadQueue() const { return _payloadQueue; }
156
157 protected:
173 virtual void packetize(const RtpFrameWork &work) = 0;
174
180 virtual void onStart() {}
181
186 virtual void onStop() {}
187
188 void run() override;
189
190 private:
191 Atomic<bool> _stopRequested;
192 Queue<RtpFrameWork> _payloadQueue;
193};
194
195PROMEKI_NAMESPACE_END
196
197#endif // PROMEKI_ENABLE_NETWORK