예제 #1
0
파일: toxcall.cpp 프로젝트: Pik-9/qTox
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);});
    }
}
예제 #2
0
파일: toxcall.cpp 프로젝트: qTox/qTox
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";
        }
    }
}