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
143 virtual Error executeCmd(MediaIOCommandParams &cmd);
144
154 virtual Error executeCmd(MediaIOCommandStats &cmd);
155
171 virtual Error executeCmd(MediaIOCommandSetClock &cmd);
172
182 virtual void configChanged(const MediaConfig &delta);
183
184 // ---- Port-construction helpers ----
185 //
186 // Backends call these from @c executeCmd(MediaIOCommandOpen)
187 // to declare the ports they expose. Every port belongs
188 // to a @ref MediaIOPortGroup; backends with a single
189 // independent port make a single-port group first.
190 // All ports are auto-destroyed on close via the
191 // ObjectBase parent/child cascade rooted at this MediaIO.
192
204 MediaIOPortGroup *addPortGroup(const String &name, const Clock::Ptr &clock);
205
217 MediaIOPortGroup *addPortGroup(const String &name = String());
218
227 MediaIOSource *addSource(MediaIOPortGroup *group, const MediaDesc &desc,
228 const String &name = String());
229
238 MediaIOSink *addSink(MediaIOPortGroup *group, const MediaDesc &desc,
239 const String &name = String());
240
241 // ---- Live-telemetry helpers ----
242 //
243 // Forwards to the per-group atomic counters. Safe to
244 // call from any thread. Cheap (one atomic increment).
245 // No-op when @p group is null.
246
248 void noteFrameDropped(MediaIOPortGroup *group);
249
251 void noteFrameRepeated(MediaIOPortGroup *group);
252
254 void noteFrameLate(MediaIOPortGroup *group);
255};
256
257PROMEKI_NAMESPACE_END
258
259#endif // PROMEKI_ENABLE_PROAV