56
void setInternalSamplingRate(int sr);
58
56
int getInternalSamplingRate() const {
59
return internalSamplingRate_;
57
return internalAudioFormat_.sample_rate;
60
AudioFormat getInternalAudioFormat() const {
61
return internalAudioFormat_;
64
void setInternalSamplingRate(unsigned sr);
66
void setInternalAudioFormat(AudioFormat format);
63
69
* Bind together two audio streams so taht a client will be able
64
70
* to put and get data specifying its callid only.
66
void bindCallID(const std::string &call_id1, const std::string &call_id2);
72
void bindCallID(const std::string& call_id1, const std::string& call_id2);
69
75
* Add a new call_id to unidirectional outgoing stream
70
76
* \param call_id New call id to be added for this stream
71
77
* \param process_id Process that require this stream
73
void bindHalfDuplexOut(const std::string &process_id, const std::string &call_id);
79
void bindHalfDuplexOut(const std::string& process_id, const std::string& call_id);
78
void unBindCallID(const std::string &call_id1, const std::string &call_id2);
84
void unBindCallID(const std::string& call_id1, const std::string& call_id2);
81
87
* Unbind a unidirectional stream
83
void unBindHalfDuplexOut(const std::string &process_id, const std::string &call_id);
85
void unBindAll(const std::string &call_id);
87
void putData(AudioBuffer& buffer, const std::string &call_id);
89
size_t getData(AudioBuffer& buffer, const std::string &call_id);
91
size_t availableForGet(const std::string &call_id);
93
size_t discard(size_t toDiscard, const std::string &call_id);
95
void flush(const std::string &call_id);
89
void unBindHalfDuplexOut(const std::string& process_id, const std::string& call_id);
91
void unBindAll(const std::string& call_id);
93
void putData(AudioBuffer& buffer, const std::string& call_id);
95
bool waitForDataAvailable(const std::string& call_id, size_t min_data_length, const std::chrono::microseconds& max_wait) const;
97
size_t getData(AudioBuffer& buffer, const std::string& call_id);
98
size_t getAvailableData(AudioBuffer& buffer, const std::string& call_id);
100
size_t availableForGet(const std::string& call_id) const;
102
size_t discard(size_t toDiscard, const std::string& call_id);
104
void flush(const std::string& call_id);
97
106
void flushAllBuffers();
100
109
NON_COPYABLE(MainBuffer);
102
CallIDSet* getCallIDSet(const std::string &call_id);
104
void createCallIDSet(const std::string &set_id);
106
void removeCallIDSet(const std::string &set_id);
111
bool hasCallIDSet(const std::string& call_id);
112
std::shared_ptr<CallIDSet> getCallIDSet(const std::string& call_id);
113
std::shared_ptr<CallIDSet> getCallIDSet(const std::string& call_id) const;
115
void createCallIDSet(const std::string& set_id);
117
void removeCallIDSet(const std::string& set_id);
109
120
* Add a new call id to this set
111
void addCallIDtoSet(const std::string &set_id, const std::string &call_id);
122
void addCallIDtoSet(const std::string& set_id, const std::string& call_id);
113
void removeCallIDfromSet(const std::string &set_id, const std::string &call_id);
124
void removeCallIDfromSet(const std::string& set_id, const std::string& call_id);
116
* Create a new ringbuffer with default readpointer
127
* Create a new ringbuffer with default readoffset
118
void createRingBuffer(const std::string &call_id);
120
void removeRingBuffer(const std::string &call_id);
122
RingBuffer* getRingBuffer(const std::string &call_id);
123
const RingBuffer* getRingBuffer(const std::string & call_id) const;
125
size_t getDataByID(AudioBuffer& buffer, const std::string &call_id, const std::string &reader_id);
127
size_t availableForGetByID(const std::string &call_id, const std::string &reader_id) const;
129
void discardByID(size_t toDiscard, const std::string &call_id, const std::string &reader_id);
131
void flushByID(const std::string &call_id, const std::string &reader_id);
133
typedef std::map<std::string, RingBuffer*> RingBufferMap;
134
RingBufferMap ringBufferMap_;
136
typedef std::map<std::string, CallIDSet*> CallIDMap;
137
CallIDMap callIDMap_;
141
int internalSamplingRate_;
143
friend class MainBufferTest;
129
void createRingBuffer(const std::string& call_id);
131
void removeRingBuffer(const std::string& call_id);
133
bool hasRingBuffer(const std::string& call_id);
134
std::shared_ptr<RingBuffer> getRingBuffer(const std::string& call_id);
135
std::shared_ptr<RingBuffer> getRingBuffer(const std::string& call_id) const;
137
void removeReadOffsetFromRingBuffer(const std::string& call_id1,
138
const std::string& call_id2);
140
size_t getDataByID(AudioBuffer& buffer, const std::string& call_id, const std::string& reader_id);
142
size_t availableForGetByID(const std::string& call_id, const std::string& reader_id) const;
144
void discardByID(size_t toDiscard, const std::string& call_id, const std::string& reader_id);
146
void flushByID(const std::string& call_id, const std::string& reader_id);
148
typedef std::map<std::string, std::shared_ptr<RingBuffer> > RingBufferMap;
149
RingBufferMap ringBufferMap_ = RingBufferMap{};
151
typedef std::map<std::string, std::shared_ptr<CallIDSet> > CallIDMap;
152
CallIDMap callIDMap_ = CallIDMap{};
154
mutable std::recursive_mutex stateLock_ = {};
156
AudioFormat internalAudioFormat_ = AudioFormat::MONO;
146
159
#endif // MainBuffer