|
|
@ -57,9 +57,6 @@ ToxCall::ToxCall(bool VideoEnabled, CoreAV& av, IAudioControl& audio) |
|
|
|
|
|
|
|
|
|
|
|
ToxCall::~ToxCall() |
|
|
|
ToxCall::~ToxCall() |
|
|
|
{ |
|
|
|
{ |
|
|
|
QObject::disconnect(audioInConn); |
|
|
|
|
|
|
|
QObject::disconnect(audioSrcInvalid); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (videoEnabled) { |
|
|
|
if (videoEnabled) { |
|
|
|
QObject::disconnect(videoInConn); |
|
|
|
QObject::disconnect(videoInConn); |
|
|
|
CameraSource::getInstance().unsubscribe(); |
|
|
|
CameraSource::getInstance().unsubscribe(); |
|
|
@ -126,19 +123,13 @@ ToxFriendCall::ToxFriendCall(uint32_t FriendNum, bool VideoEnabled, CoreAV& av, |
|
|
|
, sink(audio.makeSink()) |
|
|
|
, sink(audio.makeSink()) |
|
|
|
, friendId{FriendNum} |
|
|
|
, friendId{FriendNum} |
|
|
|
{ |
|
|
|
{ |
|
|
|
// TODO(sudden6): move this to audio source
|
|
|
|
connect(audioSource.get(), &IAudioSource::frameAvailable, this, |
|
|
|
audioInConn = |
|
|
|
|
|
|
|
QObject::connect(audioSource.get(), &IAudioSource::frameAvailable, |
|
|
|
|
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate); |
|
|
|
this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
connect(audioSource.get(), &IAudioSource::invalidated, this, &ToxFriendCall::onAudioSourceInvalidated); |
|
|
|
connect(audioSource.get(), &IAudioSource::invalidated, this, &ToxFriendCall::onAudioSourceInvalidated); |
|
|
|
|
|
|
|
|
|
|
|
if (!audioInConn) { |
|
|
|
|
|
|
|
qDebug() << "Audio input connection not working"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (sink) { |
|
|
|
if (sink) { |
|
|
|
audioSinkInvalid = sink->connectTo_invalidated(this, [this]() { this->onAudioSinkInvalidated(); }); |
|
|
|
audioSinkInvalid = sink->connectTo_invalidated(this, [this]() { this->onAudioSinkInvalidated(); }); |
|
|
|
} |
|
|
|
} |
|
|
@ -170,8 +161,7 @@ ToxFriendCall::~ToxFriendCall() |
|
|
|
void ToxFriendCall::onAudioSourceInvalidated() |
|
|
|
void ToxFriendCall::onAudioSourceInvalidated() |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto newSrc = audio.makeSource(); |
|
|
|
auto newSrc = audio.makeSource(); |
|
|
|
audioInConn = |
|
|
|
connect(newSrc.get(), &IAudioSource::frameAvailable, this, |
|
|
|
QObject::connect(newSrc.get(), &IAudioSource::frameAvailable, |
|
|
|
|
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate); |
|
|
|
this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate); |
|
|
|
}); |
|
|
|
}); |
|
|
@ -214,21 +204,16 @@ ToxGroupCall::ToxGroupCall(const Group& group, CoreAV& av, IAudioControl& audio) |
|
|
|
, group{group} |
|
|
|
, group{group} |
|
|
|
{ |
|
|
|
{ |
|
|
|
// register audio
|
|
|
|
// register audio
|
|
|
|
audioInConn = |
|
|
|
connect(audioSource.get(), &IAudioSource::frameAvailable, this, |
|
|
|
QObject::connect(audioSource.get(), &IAudioSource::frameAvailable, |
|
|
|
|
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
if (this->group.getPeersCount() <= 1) |
|
|
|
if (this->group.getPeersCount() <= 1) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate); |
|
|
|
this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
if (!audioInConn) { |
|
|
|
connect(audioSource.get(), &IAudioSource::invalidated, this, &ToxGroupCall::onAudioSourceInvalidated); |
|
|
|
qDebug() << "Audio input connection not working"; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
audioSrcInvalid = QObject::connect(audioSource.get(), &IAudioSource::invalidated, |
|
|
|
|
|
|
|
[this]() { this->onAudioSourceInvalidated(); }); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ToxGroupCall::~ToxGroupCall() |
|
|
|
ToxGroupCall::~ToxGroupCall() |
|
|
@ -240,20 +225,18 @@ ToxGroupCall::~ToxGroupCall() |
|
|
|
void ToxGroupCall::onAudioSourceInvalidated() |
|
|
|
void ToxGroupCall::onAudioSourceInvalidated() |
|
|
|
{ |
|
|
|
{ |
|
|
|
auto newSrc = audio.makeSource(); |
|
|
|
auto newSrc = audio.makeSource(); |
|
|
|
// TODO(sudden6): move this to audio source
|
|
|
|
connect(audioSource.get(), &IAudioSource::frameAvailable, |
|
|
|
audioInConn = |
|
|
|
|
|
|
|
QObject::connect(audioSource.get(), &IAudioSource::frameAvailable, |
|
|
|
|
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
[this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { |
|
|
|
if (this->group.getPeersCount() <= 1) |
|
|
|
if (this->group.getPeersCount() <= 1) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate); |
|
|
|
this->av->sendGroupCallAudio(this->group.getId(), pcm, samples, chans, rate); |
|
|
|
}); |
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
audioSource = std::move(newSrc); |
|
|
|
audioSource = std::move(newSrc); |
|
|
|
|
|
|
|
|
|
|
|
audioSrcInvalid = QObject::connect(audioSource.get(), &IAudioSource::invalidated, |
|
|
|
connect(audioSource.get(), &IAudioSource::invalidated, this, &ToxGroupCall::onAudioSourceInvalidated); |
|
|
|
[this]() { this->onAudioSourceInvalidated(); }); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|