ToxFriendCall::ToxFriendCall(uint32_t FriendNum, bool VideoEnabled, CoreAV& av) : ToxCall(FriendNum), videoEnabled{VideoEnabled}, nullVideoBitrate{false}, videoSource{nullptr}, state{static_cast<TOXAV_FRIEND_CALL_STATE>(0)}, av{&av}, timeoutTimer{nullptr} { audioInConn = QObject::connect(&Audio::getInstance(), &Audio::frameAvailable, [&av,FriendNum](const int16_t *pcm, size_t samples, uint8_t chans, uint32_t rate) { av.sendCallAudio(FriendNum, pcm, samples, chans, rate); }); if (videoEnabled) { videoSource = new CoreVideoSource; CameraSource& source = CameraSource::getInstance(); if (!source.isOpen()) source.open(); source.subscribe(); QObject::connect(&source, &VideoSource::frameAvailable, [FriendNum,&av](shared_ptr<VideoFrame> frame){av.sendCallVideo(FriendNum,frame);}); } }
ToxFriendCall::ToxFriendCall(uint32_t FriendNum, bool VideoEnabled, CoreAV& av, IAudioControl& audio) : ToxCall(VideoEnabled, av, audio) , sink(audio.makeSink()) , friendId{FriendNum} { // TODO(sudden6): move this to audio source audioInConn = QObject::connect(audioSource.get(), &IAudioSource::frameAvailable, [this](const int16_t* pcm, size_t samples, uint8_t chans, uint32_t rate) { this->av->sendCallAudio(this->friendId, pcm, samples, chans, rate); }); audioSrcInvalid = QObject::connect(audioSource.get(), &IAudioSource::invalidated, [this]() { this->onAudioSourceInvalidated(); }); if (!audioInConn) { qDebug() << "Audio input connection not working"; } audioSinkInvalid = QObject::connect(sink.get(), &IAudioSink::invalidated, [this]() { this->onAudioSinkInvalidated(); }); // register video if (videoEnabled) { videoSource = new CoreVideoSource(); CameraSource& source = CameraSource::getInstance(); if (source.isNone()) { source.setupDefault(); } source.subscribe(); videoInConn = QObject::connect(&source, &VideoSource::frameAvailable, [&av, FriendNum](std::shared_ptr<VideoFrame> frame) { av.sendCallVideo(FriendNum, frame); }); if (!videoInConn) { qDebug() << "Video connection not working"; } } }