21 #include "audio/audio.h"
28 #include <QtConcurrent/QtConcurrent>
54 , videoEnabled{VideoEnabled}
55 , audioSource(audio.makeSource())
122 :
ToxCall(VideoEnabled, av, audio)
123 , sink(audio.makeSink())
124 , friendId{FriendNum}
126 connect(audioSource.get(), &IAudioSource::frameAvailable,
this,
127 [
this](
const int16_t* pcm,
size_t samples, uint8_t chans, uint32_t rate) {
128 this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate);
134 audioSinkInvalid = sink->connectTo_invalidated(
this, [
this]() { this->onAudioSinkInvalidated(); });
147 [&av, FriendNum](std::shared_ptr<VideoFrame> frame) {
148 av.sendCallVideo(FriendNum, frame);
151 qDebug() <<
"Video connection not working";
163 auto newSrc =
audio.makeSource();
164 connect(newSrc.get(), &IAudioSource::frameAvailable,
this,
165 [
this](
const int16_t* pcm,
size_t samples, uint8_t chans, uint32_t rate) {
166 this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate);
175 auto newSink =
audio.makeSink();
181 sink = std::move(newSink);
195 int sampleRate)
const
198 sink->playAudioBuffer(data, samples, channels, sampleRate);
207 connect(audioSource.get(), &IAudioSource::frameAvailable,
this,
208 [
this](
const int16_t* pcm,
size_t samples, uint8_t chans, uint32_t rate) {
209 if (this->group.getPeersCount() <= 1) {
213 this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate);
227 auto newSrc =
audio.makeSource();
228 connect(
audioSource.get(), &IAudioSource::frameAvailable,
229 [
this](
const int16_t* pcm,
size_t samples, uint8_t chans, uint32_t rate) {
230 if (this->group.getPeersCount() <= 1) {
234 this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate);
237 audioSource = std::move(newSrc);
251 const auto& source =
peers.find(peerId);
252 if (source ==
peers.cend()) {
253 qDebug() <<
"Peer:" << peerId.
toString() <<
"does not have a source, can't remove";
264 std::unique_ptr<IAudioSink> newSink =
audio.makeSink();
266 QMetaObject::Connection con;
272 peers.emplace(peerId, std::move(newSink));
278 const auto& source =
peers.find(peerId);
279 return source !=
peers.cend();
286 QObject::disconnect(con.second);
293 unsigned channels,
int sampleRate)
298 const auto& source =
peers.find(peer);
299 if (source->second) {
300 source->second->playAudioBuffer(data, samples, channels, sampleRate);