void QVideoInputDevice::grabFrame() { if(!_timer) return ; cv::Mat frame; if(!_capture_device->read(frame)) { std::cerr << "(EE) Cannot capture image from camera. Something's wrong." << std::endl; return ; } // get the image data if(frame.channels() != 3) { std::cerr << "(EE) expected 3 channels. Got " << frame.channels() << std::endl; return ; } // convert to RGB and copy to new buffer, because cvQueryFrame tells us to not modify the buffer cv::Mat img_rgb; cv::cvtColor(frame, img_rgb, CV_BGR2RGB); QImage image = QImage(img_rgb.data,img_rgb.cols,img_rgb.rows,QImage::Format_RGB888); if(_video_processor != NULL) { _video_processor->processImage(image) ; emit networkPacketReady() ; } if(_echo_output_device != NULL) _echo_output_device->showFrame(image) ; }
void VOIPChatWidgetHolder::toggleAudioCapture() { if (audioCaptureToggleButton->isChecked()) { //activate audio output audioListenToggleButton->setChecked(true); audioCaptureToggleButton->setToolTip(tr("Hold Call")); hangupButton->show(); //activate audio input if (!inputAudioProcessor) { inputAudioProcessor = new QtSpeex::SpeexInputProcessor(); if (outputAudioProcessor) { connect(outputAudioProcessor, SIGNAL(playingFrame(QByteArray*)), inputAudioProcessor, SLOT(addEchoFrame(QByteArray*))); } inputAudioProcessor->open(QIODevice::WriteOnly | QIODevice::Unbuffered); } if (!inputAudioDevice) { inputAudioDevice = AudioDeviceHelper::getPreferedInputDevice(); } connect(inputAudioProcessor, SIGNAL(networkPacketReady()), this, SLOT(sendAudioData())); inputAudioDevice->start(inputAudioProcessor); if (mChatWidget) { mChatWidget->addChatMsg(true, tr("VoIP Status"), QDateTime::currentDateTime(), QDateTime::currentDateTime(), tr("Outgoing Call is started..."), ChatWidget::MSGTYPE_SYSTEM); } button_map::iterator it = buttonMapTakeVideo.begin(); while (it != buttonMapTakeVideo.end()) { RSButtonOnText *button = it.value(); delete button; it = buttonMapTakeVideo.erase(it); } } else { disconnect(inputAudioProcessor, SIGNAL(networkPacketReady()), this, SLOT(sendAudioData())); if (inputAudioDevice) { inputAudioDevice->stop(); } audioCaptureToggleButton->setToolTip(tr("Resume Call")); hangupButton->hide(); } }
void AudioChatWidgetHolder::hangupCall() { std::cerr << "******** VOIPLugin: Hangup call!" << std::endl; disconnect(inputProcessor, SIGNAL(networkPacketReady()), this, SLOT(sendAudioData())); if (inputDevice) { inputDevice->stop(); } if (outputDevice) { outputDevice->stop(); } audioListenToggleButton->setChecked(false); audioMuteCaptureToggleButton->setChecked(false); }
void VOIPChatWidgetHolder::hangupCall() { disconnect(inputAudioProcessor, SIGNAL(networkPacketReady()), this, SLOT(sendAudioData())); if (inputAudioDevice) { inputAudioDevice->stop(); } if (outputAudioDevice) { outputAudioDevice->stop(); } if (mChatWidget) { mChatWidget->addChatMsg(true, tr("VoIP Status"), QDateTime::currentDateTime(), QDateTime::currentDateTime(), tr("Outgoing Call stopped."), ChatWidget::MSGTYPE_SYSTEM); } audioListenToggleButton->setChecked(false); audioCaptureToggleButton->setChecked(false); hangupButton->hide(); }
void AudioInputConfig::on_Tick_timeout() { if (!inputProcessor) { inputProcessor = new QtSpeex::SpeexInputProcessor(); inputProcessor->open(QIODevice::WriteOnly | QIODevice::Unbuffered); if (!inputDevice) { inputDevice = AudioDeviceHelper::getPreferedInputDevice(); } inputDevice->start(inputProcessor); connect(inputProcessor, SIGNAL(networkPacketReady()), this, SLOT(emptyBuffer())); } abSpeech->iBelow = ui.qsTransmitMin->value(); abSpeech->iAbove = ui.qsTransmitMax->value(); if (loaded) { rsVoip->setVoipfVADmin(ui.qsTransmitMin->value()); rsVoip->setVoipfVADmax(ui.qsTransmitMax->value()); } abSpeech->iValue = iroundf(inputProcessor->dVoiceAcivityLevel * 32767.0f + 0.5f); abSpeech->update(); }
VOIPChatWidgetHolder::VOIPChatWidgetHolder(ChatWidget *chatWidget, VOIPNotify *notify) : QObject(), ChatWidgetHolder(chatWidget), mVOIPNotify(notify) { QIcon icon ; icon.addPixmap(QPixmap(":/images/audio-volume-muted.png")) ; icon.addPixmap(QPixmap(":/images/audio-volume-high.png"),QIcon::Normal,QIcon::On) ; icon.addPixmap(QPixmap(":/images/audio-volume-high.png"),QIcon::Disabled,QIcon::On) ; icon.addPixmap(QPixmap(":/images/audio-volume-high.png"),QIcon::Active,QIcon::On) ; icon.addPixmap(QPixmap(":/images/audio-volume-high.png"),QIcon::Selected,QIcon::On) ; audioListenToggleButton = new QToolButton ; audioListenToggleButton->setIcon(icon) ; audioListenToggleButton->setIconSize(QSize(42,42)) ; audioListenToggleButton->setAutoRaise(true) ; audioListenToggleButton->setCheckable(true); audioListenToggleButton->setMinimumSize(QSize(44,44)) ; audioListenToggleButton->setMaximumSize(QSize(44,44)) ; audioListenToggleButton->setText(QString()) ; audioListenToggleButton->setToolTip(tr("Mute")); QIcon icon2 ; icon2.addPixmap(QPixmap(":/images/call-start.png")) ; icon2.addPixmap(QPixmap(":/images/call-hold.png"),QIcon::Normal,QIcon::On) ; icon2.addPixmap(QPixmap(":/images/call-hold.png"),QIcon::Disabled,QIcon::On) ; icon2.addPixmap(QPixmap(":/images/call-hold.png"),QIcon::Active,QIcon::On) ; icon2.addPixmap(QPixmap(":/images/call-hold.png"),QIcon::Selected,QIcon::On) ; audioCaptureToggleButton = new QToolButton ; audioCaptureToggleButton->setMinimumSize(QSize(44,44)) ; audioCaptureToggleButton->setMaximumSize(QSize(44,44)) ; audioCaptureToggleButton->setText(QString()) ; audioCaptureToggleButton->setToolTip(tr("Start Call")); audioCaptureToggleButton->setIcon(icon2) ; audioCaptureToggleButton->setIconSize(QSize(42,42)) ; audioCaptureToggleButton->setAutoRaise(true) ; audioCaptureToggleButton->setCheckable(true) ; hangupButton = new QToolButton ; hangupButton->setIcon(QIcon(":/images/call-stop.png")) ; hangupButton->setIconSize(QSize(42,42)) ; hangupButton->setMinimumSize(QSize(44,44)) ; hangupButton->setMaximumSize(QSize(44,44)) ; hangupButton->setCheckable(false) ; hangupButton->setAutoRaise(true) ; hangupButton->setText(QString()) ; hangupButton->setToolTip(tr("Hangup Call")); hangupButton->hide(); QIcon icon3 ; icon3.addPixmap(QPixmap(":/images/video-icon-on.png")) ; icon3.addPixmap(QPixmap(":/images/video-icon-off.png"),QIcon::Normal,QIcon::On) ; icon3.addPixmap(QPixmap(":/images/video-icon-off.png"),QIcon::Disabled,QIcon::On) ; icon3.addPixmap(QPixmap(":/images/video-icon-off.png"),QIcon::Active,QIcon::On) ; icon3.addPixmap(QPixmap(":/images/video-icon-off.png"),QIcon::Selected,QIcon::On) ; videoCaptureToggleButton = new QToolButton ; videoCaptureToggleButton->setMinimumSize(QSize(44,44)) ; videoCaptureToggleButton->setMaximumSize(QSize(44,44)) ; videoCaptureToggleButton->setText(QString()) ; videoCaptureToggleButton->setToolTip(tr("Start Video Call")); videoCaptureToggleButton->setIcon(icon3) ; videoCaptureToggleButton->setIconSize(QSize(42,42)) ; videoCaptureToggleButton->setAutoRaise(true) ; videoCaptureToggleButton->setCheckable(true) ; connect(videoCaptureToggleButton, SIGNAL(clicked()), this , SLOT(toggleVideoCapture())); connect(audioListenToggleButton, SIGNAL(clicked()), this , SLOT(toggleAudioListen())); connect(audioCaptureToggleButton, SIGNAL(clicked()), this , SLOT(toggleAudioCapture())); connect(hangupButton, SIGNAL(clicked()), this , SLOT(hangupCall())); mChatWidget->addVOIPBarWidget(audioListenToggleButton) ; mChatWidget->addVOIPBarWidget(audioCaptureToggleButton) ; mChatWidget->addVOIPBarWidget(hangupButton) ; mChatWidget->addVOIPBarWidget(videoCaptureToggleButton) ; outputAudioProcessor = NULL ; outputAudioDevice = NULL ; inputAudioProcessor = NULL ; inputAudioDevice = NULL ; inputVideoDevice = new QVideoInputDevice(mChatWidget) ; // not started yet ;-) inputVideoProcessor = new JPEGVideoEncoder ; outputVideoProcessor = new JPEGVideoDecoder ; // Make a widget with two video devices, one for echo, and one for the talking peer. videoWidget = new QWidget(mChatWidget) ; videoWidget->setLayout(new QVBoxLayout()) ; videoWidget->layout()->addWidget(outputVideoDevice = new QVideoOutputDevice(videoWidget)) ; videoWidget->layout()->addWidget(echoVideoDevice = new QVideoOutputDevice(videoWidget)) ; videoWidget->hide(); connect(inputVideoDevice, SIGNAL(networkPacketReady()), this, SLOT(sendVideoData())); echoVideoDevice->setMinimumSize(320,256) ; outputVideoDevice->setMinimumSize(320,256) ; echoVideoDevice->setStyleSheet("border: 4px solid #CCCCCC; border-radius: 4px;"); outputVideoDevice->setStyleSheet("border: 4px solid #CCCCCC; border-radius: 4px;"); mChatWidget->addChatHorizontalWidget(videoWidget) ; inputVideoDevice->setEchoVideoTarget(echoVideoDevice) ; inputVideoDevice->setVideoEncoder(inputVideoProcessor) ; outputVideoProcessor->setDisplayTarget(outputVideoDevice) ; }