libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
framesyncmediaio.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/namespace.h>
16#include <promeki/framesync.h>
17#include <promeki/clock.h>
19#include <promeki/list.h>
20
21PROMEKI_NAMESPACE_BEGIN
22
23class Clock;
24
94class FrameSyncMediaIO : public SharedThreadMediaIO {
95 PROMEKI_OBJECT(FrameSyncMediaIO, SharedThreadMediaIO)
96 public:
98 static inline const MediaIOStats::ID StatsFramesPushed{"FramesPushed"};
99
101 static inline const MediaIOStats::ID StatsFramesPulled{"FramesPulled"};
102
103 FrameSyncMediaIO(ObjectBase *parent = nullptr);
104 ~FrameSyncMediaIO() override;
105
115 void setClock(const Clock::Ptr &clock);
116
124 FrameSync &frameSync() { return _sync; }
125
126 Error describe(MediaIODescription *out) const override;
127 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
128 Error proposeOutput(const MediaDesc &requested, MediaDesc *achievable,
129 MediaConfig *configDelta = nullptr) const override;
130
131 protected:
132 Error executeCmd(MediaIOCommandOpen &cmd) override;
133 Error executeCmd(MediaIOCommandClose &cmd) override;
134 Error executeCmd(MediaIOCommandRead &cmd) override;
135 Error executeCmd(MediaIOCommandWrite &cmd) override;
136 Error executeCmd(MediaIOCommandStats &cmd) override;
137
138 private:
139 FrameSync _sync;
140 Clock::Ptr _ownedClock;
141 Clock::Ptr _externalClock;
142 FrameCount _framesPushed{0};
143 FrameCount _framesPulled{0};
144};
145
150class FrameSyncFactory : public MediaIOFactory {
151 public:
152 FrameSyncFactory() = default;
153
154 String name() const override { return String("FrameSync"); }
155 String displayName() const override { return String("Frame Sync (clock-paced)"); }
156 String description() const override {
157 return String("Resyncs media to a target clock cadence (frame-rate / sample-rate / channel "
158 "conversion)");
159 }
160 bool canBeTransform() const override { return true; }
161
162 Config::SpecMap configSpecs() const override;
163 bool bridge(const MediaDesc &from, const MediaDesc &to, Config *outConfig,
164 int *outCost) const override;
165 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
166};
167
168PROMEKI_NAMESPACE_END
169
170#endif // PROMEKI_ENABLE_PROAV