libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
audioblock.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 <functional>
14#include <promeki/namespace.h>
15#include <promeki/objectbase.h>
16#include <promeki/stringlist.h>
17
18PROMEKI_NAMESPACE_BEGIN
19
20class String;
21class AudioDesc;
22
48class AudioBlock : public ObjectBase {
49 PROMEKI_OBJECT(AudioBlock, ObjectBase);
50
51 public:
57 class Config {
58 public:
63 size_t sourceChannels = 0;
68 size_t sinkChannels = 0;
69 };
70
76 AudioBlock(const Config &config, ObjectBase *parent = nullptr);
77
79 virtual ~AudioBlock() {}
80
84 bool isSource() const { return _blockConfig.sourceChannels > 0; }
85
91 bool isSourceValid(size_t val) const { return val < _blockConfig.sourceChannels; }
92
96 size_t sourceChannels() const { return _blockConfig.sourceChannels; }
97
103 virtual AudioDesc sourceDesc(size_t channel) const;
104
111 virtual bool setSourceDesc(size_t channel, const AudioDesc &val);
112
118 virtual String sourceName(size_t channel) const;
119
126 virtual bool setSourceName(size_t channel, const String &val);
127
133 virtual ssize_t sourceSamplesAvailable(size_t channel) const;
134
139 PROMEKI_SIGNAL(sourceHasSamples, AudioBlock *, size_t);
140
144 bool isSink() const { return _blockConfig.sinkChannels > 0; }
145
151 bool isSinkValid(size_t val) const { return val < _blockConfig.sinkChannels; }
152
156 size_t sinkChannels() const { return _blockConfig.sinkChannels; }
157
163 virtual AudioDesc sinkDesc(size_t channel) const;
164
171 virtual bool setSinkDesc(size_t channel, const AudioDesc &val);
172
178 virtual String sinkName(size_t channel) const;
179
186 virtual bool setSinkName(size_t channel, const String &val);
187
193 virtual ssize_t sinkSamplesAllowed(size_t channel) const;
194
199 PROMEKI_SIGNAL(sinkReadyForSamples, AudioBlock *, size_t);
200
201 private:
202 Config _blockConfig;
203 StringList _sourceNameList;
204 StringList _sinkNameList;
205};
206
207PROMEKI_NAMESPACE_END
208
209#endif // PROMEKI_ENABLE_PROAV