|
|
|
@ -148,11 +148,11 @@ ToxFriendCall::~ToxFriendCall()
@@ -148,11 +148,11 @@ ToxFriendCall::~ToxFriendCall()
|
|
|
|
|
|
|
|
|
|
void ToxFriendCall::onAudioSinkInvalidated() |
|
|
|
|
{ |
|
|
|
|
const auto newSink = Audio::getInstance().makeSink(); |
|
|
|
|
auto newSink = Audio::getInstance().makeSink(); |
|
|
|
|
|
|
|
|
|
audioSinkInvalid = QObject::connect(newSink, &IAudioSink::invalidated, |
|
|
|
|
audioSinkInvalid = QObject::connect(newSink.get(), &IAudioSink::invalidated, |
|
|
|
|
[this]() { this->onAudioSinkInvalidated(); }); |
|
|
|
|
sink.reset(newSink); |
|
|
|
|
sink = std::move(newSink); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void ToxFriendCall::startTimeout(uint32_t callId) |
|
|
|
@ -188,9 +188,12 @@ void ToxFriendCall::setState(const TOXAV_FRIEND_CALL_STATE& value)
@@ -188,9 +188,12 @@ void ToxFriendCall::setState(const TOXAV_FRIEND_CALL_STATE& value)
|
|
|
|
|
state = value; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const std::unique_ptr<IAudioSink>& ToxFriendCall::getAudioSink() const |
|
|
|
|
void ToxFriendCall::playAudioBuffer(const int16_t* data, int samples, unsigned channels, |
|
|
|
|
int sampleRate) const |
|
|
|
|
{ |
|
|
|
|
return sink; |
|
|
|
|
if (sink) { |
|
|
|
|
sink->playAudioBuffer(data, samples, channels, sampleRate); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ToxGroupCall::ToxGroupCall(int GroupNum, CoreAV& av) |
|
|
|
@ -239,11 +242,11 @@ void ToxGroupCall::removePeer(ToxPk peerId)
@@ -239,11 +242,11 @@ void ToxGroupCall::removePeer(ToxPk peerId)
|
|
|
|
|
void ToxGroupCall::addPeer(ToxPk peerId) |
|
|
|
|
{ |
|
|
|
|
auto& audio = Audio::getInstance(); |
|
|
|
|
IAudioSink* newSink = audio.makeSink(); |
|
|
|
|
peers.emplace(peerId, std::unique_ptr<IAudioSink>(newSink)); |
|
|
|
|
std::unique_ptr<IAudioSink> newSink = audio.makeSink(); |
|
|
|
|
peers.emplace(peerId, std::move(newSink)); |
|
|
|
|
|
|
|
|
|
QMetaObject::Connection con = |
|
|
|
|
QObject::connect(newSink, &IAudioSink::invalidated, |
|
|
|
|
QObject::connect(newSink.get(), &IAudioSink::invalidated, |
|
|
|
|
[this, peerId]() { this->onAudioSinkInvalidated(peerId); }); |
|
|
|
|
|
|
|
|
|
sinkInvalid.insert({peerId, con}); |
|
|
|
@ -265,11 +268,14 @@ void ToxGroupCall::clearPeers()
@@ -265,11 +268,14 @@ void ToxGroupCall::clearPeers()
|
|
|
|
|
sinkInvalid.clear(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const std::unique_ptr<IAudioSink>& ToxGroupCall::getAudioSink(ToxPk peer) |
|
|
|
|
void ToxGroupCall::playAudioBuffer(const ToxPk& peer, const int16_t* data, int samples, |
|
|
|
|
unsigned channels, int sampleRate) |
|
|
|
|
{ |
|
|
|
|
if (!havePeer(peer)) { |
|
|
|
|
addPeer(peer); |
|
|
|
|
} |
|
|
|
|
const auto& source = peers.find(peer); |
|
|
|
|
return source->second; |
|
|
|
|
if (source->second) { |
|
|
|
|
source->second->playAudioBuffer(data, samples, channels, sampleRate); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|