diff --git a/libremediaserver.cpp b/libremediaserver.cpp deleted file mode 100644 index 826d738..0000000 --- a/libremediaserver.cpp +++ /dev/null @@ -1,1755 +0,0 @@ -/* - Pure Media Server - A Media Server Sotfware for stage and performing - - Copyright (C) 2012-2013 Santi Noreña libremediaserver@gmail.com - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include "libremediaserver.h" - -// Esto habrá que cambiarlo para poder utilizar varias instancias -#define PDPORTW 9195 - -#define PDPORTW_AUDIO 9197 -#define PDPORTR_AUDIO 9198 - -#define SOCKET "/tmp/pmspipe" // Pipe wich PD Video sends the files for preview in the GUI - -#define CONF_FILE "lms.conf" // File when saving/restoring the configuration on exit/open - - -/////////////////////////////////////////////////////////////////// -// Struct for the configuration files -/////////////////////////////////////////////////////////////////// - -struct conf -{ -// Video configuration -bool window; -quint16 winpositionx; -quint16 winpositiony; -quint16 winsizex; -quint16 winsizey; -quint16 layer1Add; -bool layer1Check; -quint16 layer2Add; -bool layer2Check; -quint16 layer3Add; -bool layer3Check; -quint16 layer4Add; -bool layer4Check; -quint16 layer5Add; -bool layer5Check; -quint16 layer6Add; -bool layer6Check; -quint16 layer7Add; -bool layer7Check; -quint16 layer8Add; -bool layer8Check; -bool dmx; -quint8 universe; -quint8 ipadd1; -quint8 ipadd2; -quint8 ipadd3; -quint8 ipadd4; -bool videoCheck; - -// Audio Configuration -quint16 layer1Add_audio; -bool layer1Check_audio; -quint16 layer2Add_audio; -bool layer2Check_audio; -quint16 layer3Add_audio; -bool layer3Check_audio; -quint16 layer4Add_audio; -bool layer4Check_audio; -quint16 layer5Add_audio; -bool layer5Check_audio; -quint16 layer6Add_audio; -bool layer6Check_audio; -quint16 layer7Add_audio; -bool layer7Check_audio; -quint16 layer8Add_audio; -bool layer8Check_audio; -bool dmx_audio; -quint8 universe_audio; -bool audioCheck; -}; - -/////////////////////////////////////////////////////////////////// -// Constructor -/////////////////////////////////////////////////////////////////// - -libreMediaServer::libreMediaServer(QStringList args, QWidget *parent) - : QMainWindow(parent), - m_startvideo(0), - m_startaudio(0), - m_pd_video(NULL), - m_pd_audio(NULL), - m_pd_write_video(NULL), - m_pd_write_audio(NULL), - m_pd_read_audio(NULL), - m_tcpsocket_audio(NULL), - m_gui(FALSE) -{ - qDebug() << "********************************************************************************"; - qDebug() << QDate::currentDate() << QTime::currentTime(); - // Iniciamos el User Interface - ui.setupUi(this); - // Parse the command line options - if (args.contains("-gui")) - { - qDebug()<< "libremediaserver Constructor option GUI detected"; - m_gui = true; - ui.textEdit->appendPlainText("Pure Data GUI's will be shown"); - } - if (args.contains("-log")) - { - ui.textEdit->appendPlainText("Log to file"); - } - //Print the version - QString ver; - ver = VERSION; - ui.textEdit->appendPlainText(ver); - ver = COPYRIGHT; - ui.textEdit->appendPlainText(ver); - ver = LICENSE; - ui.textEdit->appendPlainText(ver); - qDebug() << VERSION; - qDebug() << COPYRIGHT; - qDebug() << LICENSE; - // Init Unix Local Sockets - QFile socket(SOCKET); - if (socket.exists()) - { - socket.remove(); - } - m_server_vid = new QLocalServer(this); - Q_CHECK_PTR(m_server_vid); - if (!m_server_vid->listen(SOCKET)) - { - qErrnoWarning("libremediaserver::constructor L132: Can not listen on unix local server"); - } - connect(m_server_vid, SIGNAL(newConnection()),this, SLOT(newPeer())); - // Start preview Timer - m_preview = new QTimer(this); - Q_CHECK_PTR(m_preview); - m_preview->start(500); - connect(m_preview, SIGNAL(timeout()) ,this, SLOT(previewMaster())); - // The mediaserver object: CITP/MSEx - m_msex = new msex(this); - Q_CHECK_PTR(m_msex); - // Iniciamos olad - m_ola = new QProcess(this); - olastart(); - // Conectamos los menus - connect(ui.actionOpen_conf, SIGNAL(triggered()), this, SLOT(openFile())); - connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(saveFile())); - connect(ui.actionChange_Media_Path, SIGNAL(triggered()), this, SLOT(ChangeMediaPath())); - connect(ui.actionInitMSEX, SIGNAL(triggered()), this, SLOT(initMSEX())); - connect(ui.actionMake_Thumbs, SIGNAL(triggered()), this, SLOT(makeThumbs())); - connect(ui.actionLaunch_OLA_Setup,SIGNAL(triggered()),this, SLOT(olasetup())); - // Load the configuration - open_start(); - // Connect MSEx Timer - connect(m_msex,SIGNAL(frameRequest()), this, SLOT(sendFrame())); -} - -/////////////////////////////////////////////////////////////////// -// Destructor -/////////////////////////////////////////////////////////////////// - -libreMediaServer::~libreMediaServer() -{ - save_finish(); - QFile socket(SOCKET); - socket.remove(); - if (m_pd_write_video != NULL) { - m_pd_write_video->abort(); - delete m_pd_write_video; - } - if (m_server_vid->isListening()) { - m_server_vid->close(); - delete m_server_vid; - } - if (m_pd_video != NULL) - { - disconnect(m_pd_video, SIGNAL(finished(int)), this, SLOT(pdrestart())); - m_pd_video->terminate(); - if (m_pd_video->waitForFinished(30000)) - { - delete m_pd_video; - } - } - m_ola->close(); - delete m_ola; - if (m_pd_audio != NULL) - { - disconnect(m_pd_audio, SIGNAL(finished(int)), this, SLOT( pdrestart_audio())); - m_pd_audio->terminate(); - if (m_pd_audio->waitForFinished(30000)) - { - delete m_pd_audio; - } - } - if (m_pd_write_audio != NULL) - { - m_pd_write_audio->close(); - delete m_pd_write_audio; - } - if (m_pd_write_audio != NULL) - { - m_pd_read_audio->close(); - delete m_pd_read_audio; - } - socket.remove(); - qDebug() << "PD Video restarts: " << m_startvideo << " PD Audio restarts: " << m_startaudio; - qDebug() << QDate::currentDate() << QTime::currentTime(); - qDebug() << "********************************************************************************"; - return; -} - -/////////////////////////////////////////////////////////////////// -// open/save the last configuration known -/////////////////////////////////////////////////////////////////// - -// Load the last configuration from the configuration file -void libreMediaServer::open_start() -{ - QFile file(CONF_FILE); - open(&file); -} - -// Save the last configuration to the conf file -void libreMediaServer::save_finish() -{ - QFile file(CONF_FILE); - save(&file); - -} - -/////////////////////////////////////////////////////////////////// -// Menu File -/////////////////////////////////////////////////////////////////// - -// Open a configuration File -void libreMediaServer::openFile() -{ - QFileDialog dialog(this); - if (!dialog.exec()) - return; - QStringList fileNames; - fileNames = dialog.selectedFiles(); - QFile file(fileNames.at(0)); - open(&file); -} -// Save configuration File -void libreMediaServer::saveFile() -{ - QFileDialog dialog(this); - if (!dialog.exec()) - return; - QStringList fileNames; - fileNames = dialog.selectedFiles(); - QFile file(fileNames.at(0)); - save(&file); -} -// Change Media path -void libreMediaServer::ChangeMediaPath() -{ - QFileDialog dialog(this); - dialog.setFileMode(QFileDialog::Directory); - QStringList fileNames; - if (!dialog.exec()) - return; - fileNames = dialog.selectedFiles(); - QString file = fileNames.at(0); - m_pathmedia = file; - QString desc = tr("0000 0000 %1;").arg(file); - if (ui.video->checkState()) - { - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } - if (ui.audio->checkState()) - { - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } - desc = tr("Media Path Changed to: %1").arg(m_pathmedia); - ui.textEdit->appendPlainText(desc.toAscii()); -} - -/////////////////////////////////////////////////////////////////// -// Open/save Subroutines. The real work. -/////////////////////////////////////////////////////////////////// - -void libreMediaServer::open(QFile *file) -{ - if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) - { - qDebug()<<("Can not find the configuration file"); - return; - } - int size = file->size(); - unsigned char * fileconf = new unsigned char[size]; - memset(fileconf, 0, size); - fileconf = file->map(0x00, size); - if (fileconf == 0){ - qDebug()<<("Cannot map the file"); - return; - } - conf *packet = (conf *)fileconf; - // Video configuration - ui.window->setChecked(packet->window); - ui.winpositionx->setValue(packet->winpositionx); - ui.winpositiony->setValue(packet->winpositiony); - ui.winsizex->setValue(packet->winsizex); - ui.winsizey->setValue(packet->winsizey); - ui.layer1Add->setValue(packet->layer1Add); - ui.layer1Check->setChecked(packet->layer1Check); - ui.layer2Add->setValue(packet->layer2Add); - ui.layer2Check->setChecked(packet->layer2Check); - ui.layer3Add->setValue(packet->layer3Add); - ui.layer3Check->setChecked(packet->layer3Check); - ui.layer4Add->setValue(packet->layer4Add); - ui.layer4Check->setChecked(packet->layer4Check); - ui.layer5Add->setValue(packet->layer5Add); - ui.layer5Check->setChecked(packet->layer5Check); - ui.layer6Add->setValue(packet->layer6Add); - ui.layer6Check->setChecked(packet->layer6Check); - ui.layer7Add->setValue(packet->layer7Add); - ui.layer7Check->setChecked(packet->layer7Check); - ui.layer8Add->setValue(packet->layer8Add); - ui.layer8Check->setChecked(packet->layer8Check); - ui.readDMX->setChecked(packet->dmx); - ui.universe->setValue(packet->universe); - ui.ipAddress1->setValue(packet->ipadd1); - ui.ipAddress2->setValue(packet->ipadd2); - ui.ipAddress3->setValue(packet->ipadd3); - ui.ipAddress4->setValue(packet->ipadd4); - ui.video->setChecked(packet->videoCheck); - // Audio Configuration - ui.layer1Add_audio->setValue(packet->layer1Add_audio); - ui.layer1Check_audio->setChecked(packet->layer1Check_audio); - ui.layer2Add_audio->setValue(packet->layer2Add_audio); - ui.layer2Check_audio->setChecked(packet->layer2Check_audio); - ui.layer3Add_audio->setValue(packet->layer3Add_audio); - ui.layer3Check_audio->setChecked(packet->layer3Check_audio); - ui.layer4Add_audio->setValue(packet->layer4Add_audio); - ui.layer4Check_audio->setChecked(packet->layer4Check_audio); - ui.layer5Add_audio->setValue(packet->layer5Add_audio); - ui.layer5Check_audio->setChecked(packet->layer5Check_audio); - ui.layer6Add_audio->setValue(packet->layer6Add_audio); - ui.layer6Check_audio->setChecked(packet->layer6Check_audio); - ui.layer7Add_audio->setValue(packet->layer7Add_audio); - ui.layer7Check_audio->setChecked(packet->layer7Check_audio); - ui.layer8Add_audio->setValue(packet->layer8Add_audio); - ui.layer8Check_audio->setChecked(packet->layer8Check_audio); - ui.readDMX_audio->setChecked(packet->dmx_audio); - ui.universe_audio->setValue(packet->universe_audio); - ui.audio->setChecked(packet->audioCheck); - // Path to media - int offset = sizeof(struct conf); - size = size - offset; - char * buffer = new char[size]; - memset(buffer, 0, size); - memcpy(buffer, fileconf+offset, size); - m_pathmedia = buffer; - QString desc = tr("Media Path Changed to: %1").arg(m_pathmedia); - qDebug()<<(desc); - file->close(); - delete buffer; -// delete file; - // delete fileconf; // Comment due to Seg Fault -} - -void libreMediaServer::save(QFile *file) -{ - if (!file->open(QIODevice::WriteOnly | QIODevice::Text)) - { - qDebug()<<("Can not open file pms.conf"); - return; - } - int bufferLen = sizeof(struct conf) + m_pathmedia.size(); - unsigned char *buffer = new unsigned char[bufferLen]; - memset(buffer, 0, bufferLen); - conf *packet = (conf *)buffer; - // Video Configuration - packet->window = ui.window->checkState(); - packet->winpositionx = ui.winpositionx->value(); - packet->winpositiony = ui.winpositiony->value(); - packet->winsizex = ui.winsizex->value(); - packet->winsizey = ui.winsizey->value(); - packet->layer1Add = ui.layer1Add->value(); - packet->layer1Check = ui.layer1Check->checkState(); - packet->layer2Add = ui.layer2Add->value(); - packet->layer2Check = ui.layer2Check->checkState(); - packet->layer3Add = ui.layer3Add->value(); - packet->layer3Check = ui.layer3Check->checkState(); - packet->layer4Add = ui.layer4Add->value(); - packet->layer4Check = ui.layer4Check->checkState(); - packet->layer5Add = ui.layer5Add->value(); - packet->layer5Check = ui.layer5Check->checkState(); - packet->layer6Add = ui.layer6Add->value(); - packet->layer6Check = ui.layer6Check->checkState(); - packet->layer7Add = ui.layer7Add->value(); - packet->layer7Check = ui.layer7Check->checkState(); - packet->layer8Add = ui.layer8Add->value(); - packet->layer8Check = ui.layer8Check->checkState(); - packet->dmx = ui.readDMX->checkState(); - packet->universe = ui.universe->value(); - packet->ipadd1 = ui.ipAddress1->value(); - packet->ipadd2 = ui.ipAddress2->value(); - packet->ipadd3 = ui.ipAddress3->value(); - packet->ipadd4 = ui.ipAddress4->value(); - packet->videoCheck = ui.video->checkState(); - // Audio Configuration - packet->layer1Add_audio = ui.layer1Add_audio->value(); - packet->layer1Check_audio = ui.layer1Check_audio->checkState(); - packet->layer2Add_audio = ui.layer2Add_audio->value(); - packet->layer2Check_audio = ui.layer2Check_audio->checkState(); - packet->layer3Add_audio = ui.layer3Add_audio->value(); - packet->layer3Check_audio = ui.layer3Check_audio->checkState(); - packet->layer4Add_audio = ui.layer4Add_audio->value(); - packet->layer4Check_audio = ui.layer4Check_audio->checkState(); - packet->layer5Add_audio = ui.layer5Add_audio->value(); - packet->layer5Check_audio = ui.layer5Check_audio->checkState(); - packet->layer6Add_audio = ui.layer6Add_audio->value(); - packet->layer6Check_audio = ui.layer6Check_audio->checkState(); - packet->layer7Add_audio = ui.layer7Add_audio->value(); - packet->layer7Check_audio = ui.layer7Check_audio->checkState(); - packet->layer8Add_audio = ui.layer8Add_audio->value(); - packet->layer8Check_audio = ui.layer8Check_audio->checkState(); - packet->dmx_audio = ui.readDMX_audio->checkState(); - packet->universe_audio = ui.universe_audio->value(); - packet->audioCheck = ui.audio->checkState(); - // Path to media - int offset = sizeof (struct conf); - memcpy(buffer+offset, m_pathmedia.toAscii().constData(), m_pathmedia.size()); - int error = file->write((const char *)buffer, bufferLen); - QString errorstring = tr("Bytes Write to file %1").arg(error); - qDebug()<<"Saved file complete:"<<(errorstring); - file->close(); - delete buffer; -} - -/////////////////////////////////////////////////////////////////// -// OLA Stuff -/////////////////////////////////////////////////////////////////// - -void libreMediaServer::olastart() -{ - qDebug()<<("Starting OLA"); - m_ola->start("olad", QStringList()<< "-l 3"); -// connect(ola, SIGNAL(finished(int)), this, SLOT(olastart())); -} - -void libreMediaServer::olasetup() -{ - QWebView *view = new QWebView(); - view->load(QUrl("http://localhost:9090/ola.html")); - view->show(); -} - -/////////////////////////////////////////////////////////////////// -// Menu CITP/MSEx -/////////////////////////////////////////////////////////////////// - -// Init the CITP/MSEx protocol. -void libreMediaServer::initMSEX() -{ - // Chequeamos si existe el path a los medias - QDir dir(m_pathmedia); - if (!dir.exists()) - { - qDebug()<<("Cannot find the media directory"); - ui.textEdit->appendPlainText("Can not find the media directory in the path given"); - return; - } - m_msex->setpath(m_pathmedia); - if (!m_msex->updatemedia()) - { - qDebug()<<("Cannot explore the media"); - ui.textEdit->appendPlainText("Can not explore the media in the path given"); - return; - } - // Creamos el objeto CITP y el peer information socket - quint32 ipadd = 0x00000000; - quint32 i; - i = ui.ipAddress1->value(); - ipadd = ipadd + (i * 0x1000000); - i =ui.ipAddress2->value(); - ipadd = ipadd + (i * 0x10000); - i = ui.ipAddress3->value(); - ipadd = ipadd + (i * 0x100); - i = ui.ipAddress4->value(); - ipadd = ipadd + i; - m_msex->startCitp(ipadd); -} - -// Generates the thumbs to transmit by CITP/MSEx -void libreMediaServer::makeThumbs() -{ - QProcess *script = new QProcess (); - QStringList arguments; - arguments << m_pathmedia; - script->execute("../scripts/make_thumbs.sh", arguments); -} - -/////////////////////////////////////////////////////////////////// -// Video Controls -/////////////////////////////////////////////////////////////////// - -// Window Configuration - -void libreMediaServer::on_window_stateChanged(int state) -{ - if ((state == 2)) { - QString desc("0001 0001;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } - if ((state == 0)) { - QString desc("0001 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_winpositionx_valueChanged() -{ - int x = ui.winpositionx->value(); - QString desc = tr("0002 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } -} - -void libreMediaServer::on_winpositiony_valueChanged() -{ - int x = ui.winpositiony->value(); - QString desc = tr("3 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } -} - -void libreMediaServer::on_winsizex_valueChanged() -{ - int x = ui.winsizex->value(); - QString desc = tr("4 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } -} - -void libreMediaServer::on_winsizey_valueChanged() -{ - int x = ui.winsizey->value(); - QString desc = tr("5 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } -} - -// DMX address configuration - -void libreMediaServer::on_layer1Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0011 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer1Add_valueChanged(); - } -} - -void libreMediaServer::on_layer1Add_valueChanged() -{ - if (ui.layer1Check->isChecked()){ - int x = ui.layer1Add->value(); - QString desc = tr("0011 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer2Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0012 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer2Add_valueChanged(); - } -} - -void libreMediaServer::on_layer2Add_valueChanged() -{ - if (ui.layer2Check->isChecked()){ - int x = ui.layer2Add->value(); - QString desc = tr("0012 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer3Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0013 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer3Add_valueChanged(); - } -} - -void libreMediaServer::on_layer3Add_valueChanged() -{ - if (ui.layer3Check->isChecked()){ - int x = ui.layer3Add->value(); - QString desc = tr("0013 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer4Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0014 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer4Add_valueChanged(); - } -} - -void libreMediaServer::on_layer4Add_valueChanged() -{ - if (ui.layer4Check->isChecked()){ - int x = ui.layer4Add->value(); - QString desc = tr("0014 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer5Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0015 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer5Add_valueChanged(); - } -} - -void libreMediaServer::on_layer5Add_valueChanged() -{ - if (ui.layer5Check->isChecked()){ - int x = ui.layer5Add->value(); - QString desc = tr("0015 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer6Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0016 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer6Add_valueChanged(); - } -} - -void libreMediaServer::on_layer6Add_valueChanged() -{ - if (ui.layer6Check->isChecked()){ - int x = ui.layer6Add->value(); - QString desc = tr("0016 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer7Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0017 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer7Add_valueChanged(); - } -} - -void libreMediaServer::on_layer7Add_valueChanged() -{ - if (ui.layer7Check->isChecked()){ - int x = ui.layer7Add->value(); - QString desc = tr("0017 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -void libreMediaServer::on_layer8Check_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0018 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - return; - } - if ((state == 2)) - { - on_layer8Add_valueChanged(); - } -} - -void libreMediaServer::on_layer8Add_valueChanged() -{ - if (ui.layer8Check->isChecked()){ - int x = ui.layer8Add->value(); - QString desc = tr("0018 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -// Open the connection with OLA and start reading DMX -void libreMediaServer::on_readDMX_stateChanged(int state) -{ - if ((state == 0)) { - QString desc("0020 0000;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } - if ((state == 2)) - { - int x = ui.universe->value(); - QString desc = tr("0021 %1;").arg(x); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - desc = tr("0020 0001;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } - } - -// Start the video process -void libreMediaServer::on_video_stateChanged(int state) -{ - if ((state == 0)) - { - disconnect(m_pd_video, SIGNAL(readyReadStandardError()), this, SLOT(stdout())); - disconnect(m_pd_video, SIGNAL(finished(int)), this, SLOT(pdrestart())); - m_pd_video->terminate(); - m_pd_video = NULL; - delete m_pd_video; - } - if ((state == 2)) - { - // Iniciamos Pure Data - m_pd_video = new QProcess(this); - pdstart(); - } -} - -// Change the Frame Rate -void libreMediaServer::on_fpsRate_valueChanged() -{ - QString desc = tr("0023 %1;").arg(ui.fpsRate->value()); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } -} - -/////////////////////////////////////////////////////////////////// -// Pure Data Video -/////////////////////////////////////////////////////////////////// - -// Start the PD Process, open the ports and connects stdout de Pure Data. -void libreMediaServer::pdstart() -{ - if (m_pd_video->state() != 0) - { - return; - } - // Creamos los sockets para la conexión a Pure Data - m_pd_write_video = new QTcpSocket(this); - Q_CHECK_PTR(m_pd_write_video); - connect(m_pd_write_video, SIGNAL(connected()),this, SLOT(newconexion())); - // Arrancamos el proceso Pure Data - QString arguments; - arguments.append("./puredata/pd -noaudio -lib Gem -stderr -nostdpath -path ./puredata/externals/ -open ./puredata/lms-video.pd "); - if (!m_gui) - arguments.append("-nogui"); - m_pd_video->start(arguments); - if (m_pd_video->waitForStarted(3000)){ - ui.textEdit->appendPlainText("Video Engine started."); - } - else - { - qWarning("PD Video can not start") ; - ui.textEdit->appendPlainText("Video Engine can not start!"); - return; - } - // Connect the output fropm PD Video to stdout slot to process it - connect(m_pd_video, SIGNAL(readyReadStandardError()), this, SLOT(stdout())); - // Restart PD Video if crash - connect(m_pd_video, SIGNAL(finished(int)), this, SLOT(pdrestart())); -} - -// Restart the Pure Data process if crash. Connected with signal finished of QProcess -void libreMediaServer::pdrestart() -{ - if (m_pd_video->state()) - { - return; - } - save_finish(); - qDebug()<<"********************************************************************************"; - qDebug()<<"PD Video Restarts:" << ++m_startvideo; - ui.textEdit->appendPlainText("PD Video Restarting."); - disconnect(m_pd_video, SIGNAL(finished(int)), this, SLOT(pdrestart())); - pdstart(); - -} - -// New conexion on TCP Server -void libreMediaServer::newPeer() -{ - m_read_vid = m_server_vid->nextPendingConnection(); - connect(m_read_vid, SIGNAL(readyRead()), - this, SLOT(newmessage())); -} - -// New message in a socket stablished connection -void libreMediaServer::newmessage() -{ - if (m_read_vid == NULL) - { - qDebug()<<("Local Socket not created"); - newPeer(); - return; - } - QByteArray byteArray; - byteArray.resize(m_read_vid->bytesAvailable()); - byteArray = m_read_vid->readAll(); - if (byteArray.isEmpty()) - { - return; - } - QPixmap frame; - switch (byteArray.at(0)) { - case 11: - byteArray.remove(0,2); - if (!frame.loadFromData((byteArray))) { - qDebug()<<"Layer 1 Convert byte Array to frame failed "; - } - ui.layer1Preview->setPixmap(frame); - break; - - case 12: - byteArray.remove(0,2); - if (!frame.loadFromData((byteArray))) { - qDebug()<<"Layer 2 Convert byte Array to frame failed "; - } - ui.layer2Preview->setPixmap(frame); - break; - case 13: - byteArray.remove(0,2); - if (!frame.loadFromData((byteArray))) { - qDebug()<<"Layer 3 Convert byte Array to frame failed "; - break; - } - ui.layer3Preview->setPixmap(frame); - break; - case 14: - byteArray.remove(0,2); - if (!frame.loadFromData(byteArray)) { - qDebug()<<"Layer 4 Convert byte Array to frame failed "; - break; - } - ui.layer4Preview->setPixmap(frame); - break; - case 15: - byteArray.remove(0,2); - if (!frame.loadFromData(byteArray)) { - qDebug()<<"Layer 5 Convert byte Array to frame failed "; - break; - } - ui.layer5Preview->setPixmap(frame); - break; - case 16: - byteArray.remove(0,2); - if (!frame.loadFromData(byteArray)) { - qDebug()<<"Layer 6 Convert byte Array to frame failed "; - break; - } - ui.layer6Preview->setPixmap(frame); - break; - case 17: - byteArray.remove(0,2); - if (!frame.loadFromData(byteArray)) { - qDebug()<<"Layer 7 Convert byte Array to frame failed "; - break; - } - ui.layer7Preview->setPixmap(frame); - break; - case 18: - byteArray.remove(0,2); - if (!frame.loadFromData(byteArray)) { - qDebug()<<"Layer 8 Convert byte Array to frame failed "; - break; - } - ui.layer8Preview->setPixmap(frame); - break; - default: - qDebug()<<"newmessage: Message received but can not identify the cooki"; - break; - } -} - -// Send the configuration to PD -void libreMediaServer::newconexion() -{ - // Iniciamos el socket - m_pd_write_video->connectToHost(QHostAddress::LocalHost, PDPORTW); - m_pd_write_video->waitForConnected(3000); - if (!(m_pd_write_video->isOpen())){ - qErrnoWarning("newconexion:pd write socket not open!:"); - return; - } - //Mandamos el path - QString desc = tr("0000 0000 %1;").arg(m_pathmedia); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - ui.textEdit->appendPlainText("newconexion: Can not send the path to PD Video"); - return; - } - // send the layer adress - on_layer1Check_stateChanged (ui.layer1Check->checkState()); - on_layer2Check_stateChanged (ui.layer2Check->checkState()); - on_layer3Check_stateChanged (ui.layer3Check->checkState()); - on_layer4Check_stateChanged (ui.layer4Check->checkState()); - on_layer5Check_stateChanged (ui.layer5Check->checkState()); - on_layer6Check_stateChanged (ui.layer6Check->checkState()); - on_layer7Check_stateChanged (ui.layer7Check->checkState()); - on_layer8Check_stateChanged (ui.layer8Check->checkState()); - // send the dmx on/off - on_readDMX_stateChanged(ui.readDMX->checkState()); - // send the windows info - on_winpositionx_valueChanged(); - on_winpositiony_valueChanged(); - on_winsizex_valueChanged(); - on_winsizey_valueChanged(); - on_window_stateChanged(ui.window->checkState()); -} - -// Sends packets to Pure Data video -bool libreMediaServer::sendPacket(const char *buffer, int bufferLen) -{ - if (m_pd_write_video == NULL) { - qErrnoWarning("sendPacket:Socket not initialized:"); - return false; - } - if (QAbstractSocket::ConnectedState != m_pd_write_video->state()) - { - qErrnoWarning("sendPacket:Socket not conected:"); - return false; - } - if (bufferLen != m_pd_write_video->write((const char*)buffer, bufferLen)) - { - qErrnoWarning("sendPacket:Can not write to socket::"); - return false; - } - return true; -} - -// Function error sending packets to PD video -void libreMediaServer::errorsending() { - if (ui.video->checkState()) - { - qErrnoWarning("errorsending: Can not talk to Pure Data Video!"); - ui.textEdit->appendPlainText("errorsending: Can not send packets to PD Video"); - } -} - -/////////////////////////////////////////////////////////////////// -// Audio Controls -/////////////////////////////////////////////////////////////////// - -void libreMediaServer::on_layer1Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0011 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer1Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer1Add_audio_valueChanged() -{ - if (ui.layer1Check_audio->isChecked()){ - int x = ui.layer1Add_audio->value(); - QString desc = tr("0011 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer2Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0012 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer2Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer2Add_audio_valueChanged() -{ - if (ui.layer2Check_audio->isChecked()){ - int x = ui.layer2Add_audio->value(); - QString desc = tr("0012 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer3Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0013 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer3Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer3Add_audio_valueChanged() -{ - if (ui.layer3Check_audio->isChecked()){ - int x = ui.layer3Add_audio->value(); - QString desc = tr("0013 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer4Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0014 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer4Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer4Add_audio_valueChanged() -{ - if (ui.layer4Check_audio->isChecked()){ - int x = ui.layer4Add_audio->value(); - QString desc = tr("0014 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer5Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0015 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer5Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer5Add_audio_valueChanged() -{ - if (ui.layer5Check_audio->isChecked()){ - int x = ui.layer5Add_audio->value(); - QString desc = tr("0015 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer6Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0016 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer6Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer6Add_audio_valueChanged() -{ - if (ui.layer6Check_audio->isChecked()){ - int x = ui.layer6Add_audio->value(); - QString desc = tr("0016 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer7Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0017 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer7Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer7Add_audio_valueChanged() -{ - if (ui.layer7Check_audio->isChecked()){ - int x = ui.layer7Add_audio->value(); - QString desc = tr("0017 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -void libreMediaServer::on_layer8Check_audio_stateChanged (int state) -{ - if ((state == 0)) - { - QString desc("0018 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - return; - } - if ((state == 2)) - { - on_layer8Add_audio_valueChanged(); - } -} - -void libreMediaServer::on_layer8Add_audio_valueChanged() -{ - if (ui.layer8Check_audio->isChecked()){ - int x = ui.layer8Add_audio->value(); - QString desc = tr("0018 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } -} - -// Open the connection with OLA and start reading DMX - -void libreMediaServer::on_readDMX_audio_stateChanged(int state) -{ - if ((state == 0)) { - QString desc("0020 0000;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } - if ((state == 2)) - { - int x = ui.universe_audio->value(); - QString desc = tr("0021 %1;").arg(x); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - desc = tr("0020 0001;"); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - } - } - } - -// Open the audio process - -void libreMediaServer::on_audio_stateChanged(int state) -{ - if ((state == 0)) - { - disconnect(m_pd_audio, SIGNAL(readyReadStandardError()), this, SLOT(stdout_audio())); - disconnect(m_pd_audio, SIGNAL(finished(int)), this, SLOT(pdrestart_audio())); - m_pd_audio->terminate(); - m_pd_audio = NULL; - if (m_pd_write_audio != NULL) - { - disconnect(m_pd_write_audio, SIGNAL(connected()),this, SLOT(newconexion_audio())); - m_pd_write_audio->close(); - delete m_pd_write_audio; - m_pd_write_audio = NULL; - } - if (m_pd_read_audio != NULL) - { - disconnect(m_pd_read_audio, SIGNAL(newConnection()),this, SLOT(newPeer_audio())); - m_pd_read_audio->close(); - delete m_pd_read_audio; - m_pd_read_audio = NULL; - } - } - if ((state == 2)) - { - // Iniciamos Pure Data - m_pd_read_audio = NULL; - m_pd_write_audio = NULL; - m_pd_audio = new QProcess(this); - pdstart_audio(); - } -} - -/////////////////////////////////////////////////////////////////// -// Pure Data Audio -/////////////////////////////////////////////////////////////////// - -// Start the PD Process, open the ports and connects stdout de Pure Data. -void libreMediaServer::pdstart_audio() -{ - if (m_pd_audio->state() != 0) - { - return; - } - // Creamos los sockets para la conexión a Pure Data - m_pd_write_audio = new QTcpSocket(this); - Q_CHECK_PTR(m_pd_write_audio); - connect(m_pd_write_audio, SIGNAL(connected()),this, SLOT(newconexion_audio())); - m_pd_read_audio = new QTcpServer(this); - Q_CHECK_PTR(m_pd_read_audio); - connect(m_pd_read_audio, SIGNAL(newConnection()),this, SLOT(newPeer_audio())); - if (!m_pd_read_audio) - { - qDebug()<<("error TCP Server no creado"); - } - if (!m_pd_read_audio->listen(QHostAddress::LocalHost, PDPORTR_AUDIO)) - { - qDebug()<<"error listening tcpServer"; - } - // Arrancamos el proceso Pure Data - QString arguments; - arguments.append("./puredata/pd -alsa -channels 2 -audiodev 1 -stderr -nostdpath -path ./puredata/externals/ -open ./puredata/lms-audio.pd "); - if (!m_gui) - arguments.append("-nogui"); - m_pd_audio->start(arguments); - if (m_pd_audio->waitForStarted(3000)){ - ui.textEdit->appendPlainText("PD Audio started."); - } - else - { - ui.textEdit->appendPlainText("PD Audio not started!"); - qErrnoWarning("Can not init PD Audio: "); - return; - } - connect(m_pd_audio, SIGNAL(readyReadStandardError()), this, SLOT(stdout_audio())); -} - -// Restart the Pure Data process if crash. Connected wit signal finished of QProcess -void libreMediaServer::pdrestart_audio() -{ - save_finish(); - qDebug()<<"Starting PD Audio:" << ++m_startaudio; - ui.textEdit->appendPlainText("PD audio Restarting..."); - if (m_pd_audio->state()) - { - return; - } - if (m_pd_write_audio != NULL) - { - m_pd_write_audio->close(); - disconnect(m_pd_write_audio, SIGNAL(connected()),this, SLOT(newconexion_audio())); - delete m_pd_write_audio; - } - if (m_pd_read_audio != NULL) - { - disconnect(m_pd_read_audio, SIGNAL(newConnection()),this, SLOT(newPeer_audio())); - m_pd_read_audio->close(); - delete m_pd_read_audio; - } - disconnect(m_pd_audio, SIGNAL(finished(int)), this, SLOT(pdrestart_audio())); - pdstart_audio(); -} - -// New conexion on TCP Server -void libreMediaServer::newPeer_audio() -{ - m_tcpsocket_audio = m_pd_read_audio->nextPendingConnection(); - connect(m_tcpsocket_audio, SIGNAL(readyRead()), - this, SLOT(newmessage_audio())); -} - -// New message in a TCP socket stablished connection -void libreMediaServer::newmessage_audio() -{ - if (m_tcpsocket_audio == NULL) - { - qDebug()<<("tcpsocket audio not created"); - newPeer_audio(); - return; - } - QByteArray byteArray = m_tcpsocket_audio->readAll(); - QString string(byteArray); - if (byteArray.at(0) == 0) - { - return; - } - QChar layer = string.at(0); - int i = 9 + m_pathmedia.size(); - string.remove(0,i); - string.chop(2); - int val = layer.digitValue(); - switch (val) { - case 0: - ui.textEdit->appendPlainText("Loadbang from PD Audio received..."); - // Conectamos a Pure Data para escribir - m_pd_write_audio->connectToHost(QHostAddress::LocalHost, PDPORTW_AUDIO); - // Conectamos para reiniciar si PD crash - connect(m_pd_audio, SIGNAL(finished(int)), this, SLOT(pdrestart_audio())); - // Mandamos Configuración - m_pd_write_audio->waitForConnected(30000); - newconexion_audio(); - case 1: - ui.layer1_audio->setText(string); - break; - case 2: - ui.layer2_audio->setText(string); - break; - case 3: - ui.layer3_audio->setText(string); - break; - case 4: - ui.layer4_audio->setText(string); - break; - case 5: - ui.layer5_audio->setText(string); - break; - case 6: - ui.layer6_audio->setText(string); - break; - case 7: - ui.layer7_audio->setText(string); - break; - case 8: - ui.layer8_audio->setText(string); - break; - } -} - -// Send the configuration to PD -void libreMediaServer::newconexion_audio() -{ - if (!(m_pd_write_audio->isOpen())){ - errorsending_audio(); - return; - } - qDebug() << "Sending conf to PD Audio"; - QString desc = tr("0000 0000 %1;").arg(m_pathmedia); - if (!sendPacket_audio(desc.toAscii().constData(),desc.size())) - { - errorsending_audio(); - return; - } - on_layer1Check_audio_stateChanged (ui.layer1Check_audio->checkState()); - on_layer2Check_audio_stateChanged (ui.layer2Check_audio->checkState()); - on_layer3Check_audio_stateChanged (ui.layer3Check_audio->checkState()); - on_layer4Check_audio_stateChanged (ui.layer4Check_audio->checkState()); - on_layer5Check_audio_stateChanged (ui.layer5Check_audio->checkState()); - on_layer6Check_audio_stateChanged (ui.layer6Check_audio->checkState()); - on_layer7Check_audio_stateChanged (ui.layer7Check_audio->checkState()); - on_layer8Check_audio_stateChanged (ui.layer8Check_audio->checkState()); - on_readDMX_audio_stateChanged(ui.readDMX_audio->checkState()); - -} - -// Sends packets to Pure Data audio -bool libreMediaServer::sendPacket_audio(const char *buffer, int bufferLen) -{ - if (m_pd_write_audio == NULL) { - return false; - } - if (QAbstractSocket::ConnectedState != m_pd_write_audio->state()) - { - return false; - } - if (bufferLen != m_pd_write_audio->write((const char*)buffer, bufferLen)) - { - return false; - } - return true; -} - -// Function error sending packets to PD audio -void libreMediaServer::errorsending_audio() { - if (ui.audio->checkState()) - { - ui.textEdit->appendPlainText("Can not send packets to PD Audio"); - } -} - -/////////////////////////////////////////////////////////////////// -// Previews -/////////////////////////////////////////////////////////////////// - -// GUI -void libreMediaServer::previewMaster() -{ - QPixmap preview = QPixmap::grabWindow(QApplication::desktop()->winId(), ui.winpositionx->value() , ui.winpositiony->value(),ui.winsizex->value(),ui.winsizey->value()); - ui.masterPreview->setPixmap(preview); -} - -// CITP/MSEx 1.0 -void libreMediaServer::sendFrame() -{ - m_msex->n_timer->stop(); - QPixmap frame = QPixmap::grabWindow(QApplication::desktop()->winId(), ui.winpositionx->value() , ui.winpositiony->value(),ui.winsizex->value(),ui.winsizey->value()); - if (!frame) { - qDebug()<<"sendFrame: Can not take frame"; - return; - } - QImage image = QImage(frame.toImage()); - if (!image.byteCount()) { - qDebug()<<"sendFrame: Can not convert screen capture to image"; - return; - } - image = image.scaledToWidth(88); - image = image.convertToFormat(QImage::Format_RGB888); - int bufferLen = image.byteCount(); - int bufferLenTot = sizeof(struct CITP_MSEX_10_StFr ) + bufferLen; - uchar * buffer = new uchar[bufferLenTot]; - memset(buffer, 0, bufferLenTot); - CITP_MSEX_10_StFr *packet = (CITP_MSEX_10_StFr *)buffer; - // CITP header - packet->CITPMSEXHeader.CITPHeader.Cookie = COOKIE_CITP; - packet->CITPMSEXHeader.CITPHeader.VersionMajor = 0x01; - packet->CITPMSEXHeader.CITPHeader.VersionMinor = 0x00; - packet->CITPMSEXHeader.CITPHeader.Reserved[0] = 0x00; - packet->CITPMSEXHeader.CITPHeader.Reserved[1] = 0x00; - packet->CITPMSEXHeader.CITPHeader.MessageSize = bufferLenTot; - packet->CITPMSEXHeader.CITPHeader.MessagePartCount = 0x01; - packet->CITPMSEXHeader.CITPHeader.MessagePart = 0x00; // XXX - doc says 0-based? - packet->CITPMSEXHeader.CITPHeader.ContentType = COOKIE_MSEX; - // MSEX header - packet->CITPMSEXHeader.ContentType = COOKIE_MSEX_STFR; - packet->CITPMSEXHeader.VersionMajor = 0x01; - packet->CITPMSEXHeader.VersionMinor = 0x00; - //STFR Content - packet->FrameBufferSize = bufferLen; - packet->FrameFormat = 943867730; - packet->FrameHeight = 64; - packet->FrameWidth = 88; - packet->SourceIdentifier = 0x0001; - // Copiamos los datos del thumbnail - int offset = sizeof(struct CITP_MSEX_10_StFr); - memcpy((buffer+offset), image.bits(), bufferLen); - if (!buffer) - { - qDebug() << "sendFrame:create Frame failed"; - return; - } - // Mandamos el paquete - if (!m_msex->sendPacket(buffer, bufferLenTot)) - { - qDebug() << "sendFrame: transmitFrame failed"; - return; - } - m_msex->n_timer->start(); -} - -// Enable/Disable the GUI Master preview -void libreMediaServer::on_previewMaster_stateChanged (int state) -{ - if ((state == 0)) { - m_preview->stop(); - } - if ((state == 2)) - { - m_preview->start(); - } -} - -// Enable/Disable the GUI Layers preview -void libreMediaServer::on_previewLayer_stateChanged (int state) -{ - if ((state == 0)) { - QString desc = tr("0022 0;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } - if ((state == 2)) - { - QString desc = tr("0022 1;"); - if (!sendPacket(desc.toAscii().constData(),desc.size())) - { - errorsending(); - } - } -} - -/////////////////////////////////////////////////////////////////// -// Terminal and Log -//////////////////////////////////////////////////////////////////// - -// Sacamos la salida de Pure Data Audio en la terminal -void libreMediaServer::stdout_audio() { - QString out = m_pd_audio->readAllStandardError(); - out.chop(1); - if (!out.isEmpty()) - { - qDebug() << "PD Audio: " << out; - } -} - -// Sacamos la salida de Pure Data Video en la terminal. Filtra mensajes para el GUI. -void libreMediaServer::stdout() { - QByteArray out = m_pd_video->readAllStandardError(); - if (out.size() < 7) {return;} - out.chop(1); - if (out.indexOf("ola2pd: Can not read DMX!",0) != -1) - { - ui.textEdit->appendPlainText("Can not read DMX data."); - } -/* if (out.indexOf("watchdog",0) != -1) - { - ui.textEdit->appendPlainText("PD video watchdog detected."); - }*/ - int j = out.indexOf("togui: ",0); - if ((j >= 0) && (out.size() > (j+7))) - { - int i = m_pathmedia.size() + 16; - out.remove(0,j); - switch (out.at(7)) { - case '0': - qDebug()<<"Loadbang Video"; - ui.textEdit->appendPlainText("LoadBang Video received."); - newconexion(); - break; - case '1': - out.remove(0, i); - out.prepend("Layer 1 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '2': - out.remove(0, i); - out.prepend("Layer 2 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '3': - out.remove(0,i); - out.prepend("Layer 3 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '4': - out.remove(0,i); - out.prepend("Layer 4 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '5': - out.remove(0,i); - out.prepend("Layer 5 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '6': - out.remove(0,i); - out.prepend("Layer 6 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '7': - out.remove(0,i); - out.prepend("Layer 7 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '8': - out.remove(0,i); - out.prepend("Layer 8 playing:"); - ui.textEdit->appendPlainText(out); - break; - case '9': - out.remove(0,9); - ui.fpsCounter->display(out.toInt()); - break; - default: - qDebug()<<"stdout:Invalid cookie received"<