libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
srcmediaio.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/audiodesc.h>
17#include <promeki/list.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
78class SrcMediaIO : public SharedThreadMediaIO {
79 PROMEKI_OBJECT(SrcMediaIO, SharedThreadMediaIO)
80 public:
82 static inline const MediaIOStats::ID StatsFramesConverted{"FramesConverted"};
83
84 SrcMediaIO(ObjectBase *parent = nullptr);
85 ~SrcMediaIO() override;
86
87 Error describe(MediaIODescription *out) const override;
88 Error proposeInput(const MediaDesc &offered, MediaDesc *preferred) const override;
89 Error proposeOutput(const MediaDesc &requested, MediaDesc *achievable,
90 MediaConfig *configDelta = nullptr) const override;
91 int pendingInternalWrites() const override;
92
93 protected:
94 Error executeCmd(MediaIOCommandOpen &cmd) override;
95 Error executeCmd(MediaIOCommandClose &cmd) override;
96 Error executeCmd(MediaIOCommandRead &cmd) override;
97 Error executeCmd(MediaIOCommandWrite &cmd) override;
98 Error executeCmd(MediaIOCommandStats &cmd) override;
99
100 private:
101 Error convertFrame(const Frame &input, Frame &output);
102
103 AudioFormat::ID _outputAudioDataType = AudioFormat::Invalid;
104 bool _outputAudioDataTypeSet = false;
105 int _capacity = 4;
106
107 Frame::List _outputQueue;
108 FrameCount _frameCount{0};
109 int64_t _readCount = 0;
110 FrameCount _framesConverted{0};
111 bool _capacityWarned = false;
112};
113
118class SrcFactory : public MediaIOFactory {
119 public:
120 SrcFactory() = default;
121
122 String name() const override { return String("SRC"); }
123 String displayName() const override { return String("Sample Rate Converter"); }
124 String description() const override { return String("Audio sample format converter"); }
125 bool canBeTransform() const override { return true; }
126
127 Config::SpecMap configSpecs() const override;
128 bool bridge(const MediaDesc &from, const MediaDesc &to, Config *outConfig,
129 int *outCost) const override;
130 MediaIO *create(const Config &config, ObjectBase *parent = nullptr) const override;
131};
132
133PROMEKI_NAMESPACE_END
134
135#endif // PROMEKI_ENABLE_PROAV