11#include <promeki/config.h>
12#if PROMEKI_ENABLE_NETWORK
26PROMEKI_NAMESPACE_BEGIN
96class FrameBridge :
public ObjectBase {
97 PROMEKI_OBJECT(FrameBridge, ObjectBase)
100 using UPtr = UniquePtr<FrameBridge>;
103 static constexpr uint32_t WireMajor = 1;
106 static constexpr uint32_t WireMinor = 0;
109 static constexpr size_t DefaultMetadataReserveBytes = 64u * 1024u;
112 static constexpr double DefaultAudioHeadroomFraction = 0.20;
115 static constexpr int DefaultRingDepth = 2;
118 static constexpr uint32_t DefaultAccessMode = 0600;
135 int ringDepth = DefaultRingDepth;
138 size_t metadataReserveBytes = DefaultMetadataReserveBytes;
141 double audioHeadroomFraction = DefaultAudioHeadroomFraction;
144 uint32_t accessMode = DefaultAccessMode;
171 bool waitForConsumer =
true;
178 FrameBridge(ObjectBase *parent =
nullptr);
181 ~FrameBridge()
override;
194 Error openOutput(
const String &name,
const Config &config);
212 Error openInput(
const String &name,
bool sync =
true);
221 bool isSyncInput()
const;
258 bool isAborted()
const;
264 bool isOutput()
const;
267 const UUID &uuid()
const;
270 const String &name()
const;
273 const MediaDesc &mediaDesc()
const;
276 const AudioDesc &audioDesc()
const;
279 int ringDepth()
const;
294 TimeStamp lastFrameTimeStamp()
const;
314 Error writeFrame(
const Frame &frame);
317 size_t connectionCount()
const;
344 Frame readFrame(Error *err =
nullptr);
350 PROMEKI_SIGNAL(frameAvailable);
361 PROMEKI_SIGNAL(framesMissed, uint64_t);
368 PROMEKI_SIGNAL(peerDisconnected);
372 using ImplPtr = UniquePtr<Impl>;