libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
framebridge.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 <cstddef>
14#include <cstdint>
15#include <promeki/namespace.h>
16#include <promeki/objectbase.h>
17#include <promeki/error.h>
18#include <promeki/string.h>
19#include <promeki/uniqueptr.h>
20#include <promeki/uuid.h>
21#include <promeki/mediadesc.h>
22#include <promeki/audiodesc.h>
23#include <promeki/frame.h>
24#include <promeki/timestamp.h>
25
26PROMEKI_NAMESPACE_BEGIN
27
96class FrameBridge : public ObjectBase {
97 PROMEKI_OBJECT(FrameBridge, ObjectBase)
98 public:
100 using UPtr = UniquePtr<FrameBridge>;
101
103 static constexpr uint32_t WireMajor = 1;
104
106 static constexpr uint32_t WireMinor = 0;
107
109 static constexpr size_t DefaultMetadataReserveBytes = 64u * 1024u;
110
112 static constexpr double DefaultAudioHeadroomFraction = 0.20;
113
115 static constexpr int DefaultRingDepth = 2;
116
118 static constexpr uint32_t DefaultAccessMode = 0600;
119
127 struct Config {
129 MediaDesc mediaDesc;
130
132 AudioDesc audioDesc;
133
135 int ringDepth = DefaultRingDepth;
136
138 size_t metadataReserveBytes = DefaultMetadataReserveBytes;
139
141 double audioHeadroomFraction = DefaultAudioHeadroomFraction;
142
144 uint32_t accessMode = DefaultAccessMode;
145
147 String groupName;
148
171 bool waitForConsumer = true;
172 };
173
178 FrameBridge(ObjectBase *parent = nullptr);
179
181 ~FrameBridge() override;
182
194 Error openOutput(const String &name, const Config &config);
195
212 Error openInput(const String &name, bool sync = true);
213
221 bool isSyncInput() const;
222
224 void close();
225
246 void abort();
247
258 bool isAborted() const;
259
261 bool isOpen() const;
262
264 bool isOutput() const;
265
267 const UUID &uuid() const;
268
270 const String &name() const;
271
273 const MediaDesc &mediaDesc() const;
274
276 const AudioDesc &audioDesc() const;
277
279 int ringDepth() const;
280
294 TimeStamp lastFrameTimeStamp() const;
295
296 // ========== Output-side ==========
297
314 Error writeFrame(const Frame &frame);
315
317 size_t connectionCount() const;
318
330 void service();
331
332 // ========== Input-side ==========
333
344 Frame readFrame(Error *err = nullptr);
345
350 PROMEKI_SIGNAL(frameAvailable);
351
361 PROMEKI_SIGNAL(framesMissed, uint64_t);
362
368 PROMEKI_SIGNAL(peerDisconnected);
369
370 private:
371 class Impl;
372 using ImplPtr = UniquePtr<Impl>;
373 ImplPtr _d;
374};
375
376PROMEKI_NAMESPACE_END
377
378#endif // PROMEKI_ENABLE_NETWORK