libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
commandmediaio.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/clock.h>
14#include <promeki/mediaio.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
19class MediaIOPortGroup;
20class MediaIOSource;
21class MediaIOSink;
22
57class CommandMediaIO : public MediaIO {
58 PROMEKI_OBJECT(CommandMediaIO, MediaIO)
59 public:
61 CommandMediaIO(ObjectBase *parent = nullptr);
62
64 ~CommandMediaIO() override;
65
66 protected:
91 Error dispatch(MediaIOCommand::Ptr cmd);
92
100 virtual Error executeCmd(MediaIOCommandOpen &cmd);
101
110 virtual Error executeCmd(MediaIOCommandClose &cmd);
111
119 virtual Error executeCmd(MediaIOCommandRead &cmd);
120
127 virtual Error executeCmd(MediaIOCommandWrite &cmd);
128
135 virtual Error executeCmd(MediaIOCommandSeek &cmd);
136
165 virtual Error executeCmd(MediaIOCommandParams &cmd);
166
180 virtual Error getParam(MediaIOParamsID id, Variant &out);
181
195 virtual Error setParam(MediaIOParamsID id, const Variant &value);
196
215 virtual Error validateParam(MediaIOParamsID id, const Variant &value);
216
226 virtual Error executeCmd(MediaIOCommandStats &cmd);
227
243 virtual Error executeCmd(MediaIOCommandSetClock &cmd);
244
254 virtual void configChanged(const MediaConfig &delta);
255
256 // ---- Port-construction helpers ----
257 //
258 // Backends call these from @c executeCmd(MediaIOCommandOpen)
259 // to declare the ports they expose. Every port belongs
260 // to a @ref MediaIOPortGroup; backends with a single
261 // independent port make a single-port group first.
262 // All ports are auto-destroyed on close via the
263 // ObjectBase parent/child cascade rooted at this MediaIO.
264
276 MediaIOPortGroup *addPortGroup(const String &name, const Clock::Ptr &clock);
277
289 MediaIOPortGroup *addPortGroup(const String &name = String());
290
299 MediaIOSource *addSource(MediaIOPortGroup *group, const MediaDesc &desc,
300 const String &name = String());
301
310 MediaIOSink *addSink(MediaIOPortGroup *group, const MediaDesc &desc,
311 const String &name = String());
312
313 // ---- Live-telemetry helpers ----
314 //
315 // Forwards to the per-group atomic counters. Safe to
316 // call from any thread. Cheap (one atomic increment).
317 // No-op when @p group is null.
318
320 void noteFrameDropped(MediaIOPortGroup *group);
321
323 void noteFrameRepeated(MediaIOPortGroup *group);
324
326 void noteFrameLate(MediaIOPortGroup *group);
327};
328
329PROMEKI_NAMESPACE_END
330
331#endif // PROMEKI_ENABLE_PROAV