diff --git a/fileselector/fileselector.c b/fileselector/fileselector.c index 2a8a1f8..fb0f683 100644 --- a/fileselector/fileselector.c +++ b/fileselector/fileselector.c @@ -1,9 +1,10 @@ /* --------------------------------------------------------------------------*/ /* */ -/* object for getting file listings using wildcard patterns */ -/* Written by Hans-Christoph Steiner */ +/* object for getting files */ +/* */ +/* Based on folderlist by Hans-Christoph Steiner */ /* */ -/* Copyright (c) 2006 Hans-Christoph Steiner */ +/* Copyright (c) 2013 Santi Noreña */ /* */ /* This program is free software; you can redistribute it and/or */ /* modify it under the terms of the GNU General Public License */ @@ -24,22 +25,15 @@ /* --------------------------------------------------------------------------*/ #include - -#ifdef _WIN32 -#define _WIN32_WINNT 0x0400 -#include -#else #include #include -#endif - #include #include //static char *version = "$Revision: 0.01 $"; #define DEBUG(x) -//#define DEBUG(x) x + /*------------------------------------------------------------------------------ * CLASS DEF diff --git a/pd/lms-video.pd b/pd/lms-video.pd index 023e084..2f53c32 100644 --- a/pd/lms-video.pd +++ b/pd/lms-video.pd @@ -1,4 +1,4 @@ -#N canvas 547 370 611 318 10; +#N canvas 543 390 611 318 10; #N canvas 315 169 952 599 dmx 0; #X obj -7 437 list split; #X obj 99 444 list split; @@ -136,95 +136,89 @@ #X connect 5 0 7 0; #X connect 7 0 4 3; #X restore -309 -438 pd fondo; -#N canvas 0 84 1440 792 receive 0; -#X obj 71 -398 select 1; -#X obj 123 -358 select 2 3 4 5; +#N canvas 73 329 1092 358 receive 0; #X obj 22 -242 s winposx; -#X obj 101 -240 s winposy; -#X obj 170 -238 s winsizex; -#X obj 249 -238 s winsizey; +#X obj 90 -242 s winposy; +#X obj 158 -242 s winsizex; +#X obj 233 -242 s winsizey; #X obj 22 -266 float; -#X obj 101 -268 float; -#X obj 170 -274 float; -#X obj 250 -270 float; -#X obj 342 -231 s layer1; -#X obj 677 -389 select 11 12 13 14 15 16 17 18; -#X obj 400 -228 s layer2; -#X obj 460 -226 s layer3; -#X obj 540 -223 s layer4; -#X obj 599 -223 s layer5; -#X obj 663 -221 s layer6; -#X obj 725 -224 s layer7; -#X obj 791 -226 s layer8; -#X obj 342 -266 float; -#X obj 396 -267 float; -#X obj 451 -266 float; -#X obj 540 -266 float; -#X obj 789 -263 float; -#X obj 592 -265 float; -#X obj 659 -269 float; -#X obj 721 -263 float; -#X obj 861 -252 float; -#X obj 861 -227 s ola; -#X obj 911 -252 float; -#X obj 911 -226 s universe; -#X obj 615 -431 s path; -#X obj -1 -351 float; +#X obj 90 -266 float; +#X obj 158 -266 float; +#X obj 233 -266 float; +#X obj 323 -241 s layer1; +#X obj 382 -241 s layer2; +#X obj 442 -241 s layer3; +#X obj 503 -241 s layer4; +#X obj 563 -241 s layer5; +#X obj 624 -241 s layer6; +#X obj 685 -241 s layer7; +#X obj 746 -241 s layer8; +#X obj 323 -265 float; +#X obj 382 -265 float; +#X obj 442 -265 float; +#X obj 503 -265 float; +#X obj 746 -265 float; +#X obj 563 -265 float; +#X obj 624 -265 float; +#X obj 685 -265 float; +#X obj 847 -264 float; +#X obj 847 -239 s ola; +#X obj 898 -263 float; +#X obj 898 -239 s universe; +#X obj 615 -432 s path; +#X obj -39 -265 float; #X obj 452 -449 unpack f f s; #X obj 452 -477 netreceive 9195; -#X obj 872 -324 select 20 21; -#X obj 0 -316 s window; -#X connect 0 0 32 0; -#X connect 0 1 1 0; -#X connect 1 0 6 0; -#X connect 1 1 7 0; -#X connect 1 2 8 0; -#X connect 1 3 9 0; -#X connect 1 4 11 0; +#X obj -39 -242 s window; +#X obj -39 -408 select 1 2 3 4 5 11 12 13 14 15 16 17 18 20 21; +#X connect 4 0 0 0; +#X connect 5 0 1 0; #X connect 6 0 2 0; #X connect 7 0 3 0; -#X connect 8 0 4 0; -#X connect 9 0 5 0; -#X connect 11 0 19 0; -#X connect 11 1 20 0; -#X connect 11 2 21 0; -#X connect 11 3 22 0; -#X connect 11 4 24 0; -#X connect 11 5 25 0; -#X connect 11 6 26 0; -#X connect 11 7 23 0; -#X connect 11 8 35 0; -#X connect 19 0 10 0; -#X connect 20 0 12 0; -#X connect 21 0 13 0; -#X connect 22 0 14 0; -#X connect 23 0 18 0; -#X connect 24 0 15 0; -#X connect 25 0 16 0; -#X connect 26 0 17 0; -#X connect 27 0 28 0; -#X connect 29 0 30 0; -#X connect 32 0 36 0; -#X connect 33 0 0 0; -#X connect 33 1 6 1; -#X connect 33 1 7 1; -#X connect 33 1 8 1; -#X connect 33 1 9 1; -#X connect 33 1 19 1; -#X connect 33 1 20 1; -#X connect 33 1 21 1; -#X connect 33 1 22 1; -#X connect 33 1 24 1; -#X connect 33 1 25 1; -#X connect 33 1 26 1; -#X connect 33 1 23 1; -#X connect 33 1 27 1; -#X connect 33 1 29 1; -#X connect 33 1 32 1; -#X connect 33 2 31 0; -#X connect 34 0 33 0; -#X connect 35 0 27 0; -#X connect 35 1 29 0; +#X connect 16 0 8 0; +#X connect 17 0 9 0; +#X connect 18 0 10 0; +#X connect 19 0 11 0; +#X connect 20 0 15 0; +#X connect 21 0 12 0; +#X connect 22 0 13 0; +#X connect 23 0 14 0; +#X connect 24 0 25 0; +#X connect 26 0 27 0; +#X connect 29 0 32 0; +#X connect 30 0 33 0; +#X connect 30 1 4 1; +#X connect 30 1 5 1; +#X connect 30 1 6 1; +#X connect 30 1 7 1; +#X connect 30 1 16 1; +#X connect 30 1 17 1; +#X connect 30 1 18 1; +#X connect 30 1 19 1; +#X connect 30 1 21 1; +#X connect 30 1 22 1; +#X connect 30 1 23 1; +#X connect 30 1 20 1; +#X connect 30 1 24 1; +#X connect 30 1 26 1; +#X connect 30 1 29 1; +#X connect 30 2 28 0; +#X connect 31 0 30 0; +#X connect 33 0 29 0; +#X connect 33 1 4 0; +#X connect 33 2 5 0; +#X connect 33 3 6 0; +#X connect 33 4 7 0; +#X connect 33 5 16 0; +#X connect 33 6 17 0; +#X connect 33 7 18 0; +#X connect 33 8 19 0; +#X connect 33 9 21 0; +#X connect 33 10 22 0; +#X connect 33 11 23 0; +#X connect 33 12 20 0; +#X connect 33 13 24 0; +#X connect 33 14 26 0; #X restore -249 -438 pd receive; #N canvas 687 175 450 564 window 0; #X msg 987 -347 color 0 0 0; diff --git a/pd/lms.conf b/pd/lms.conf index aca6318..9996be1 100644 Binary files a/pd/lms.conf and b/pd/lms.conf differ diff --git a/scripts/install_precise.sh b/scripts/install_precise.sh index 41b54c2..007a797 100644 --- a/scripts/install_precise.sh +++ b/scripts/install_precise.sh @@ -18,7 +18,7 @@ if [ "$output" -eq "0" ]; then echo "deb http://apt.openlighting.org/debian/ precise main" >> /etc/apt/sources.list fi apt-get update -apt-get -y --force-yes install ola puredata tcl tk libqtcore4 libqtgui4 libmacgick++4 libav-tools +apt-get -y --force-yes install ola libqtcore4 libqtgui4 libmacgick++4 libav-tools if [ "$?" -eq "0" ]; then echo "apt-get finish ok" else "apt-get return errors!" diff --git a/scripts/install_wheezy.sh b/scripts/install_wheezy.sh index 68eb7bf..e3a4966 100755 --- a/scripts/install_wheezy.sh +++ b/scripts/install_wheezy.sh @@ -12,7 +12,7 @@ dpkg -i ola_0.8.26-1_i386.deb # Install Pure Data y OLA # libav para generar thumbs -apt-get -y --force-yes install puredata tcl tk libav-tools libqtcore4 libqtgui4 libmagick++5 +apt-get -y --force-yes install tcl tk libav-tools libqtcore4 libqtgui4 libmagick++5 if [ "$?" -eq "0" ]; then echo "apt-get finish ok" else "apt-get return errors!" diff --git a/scripts/make_thumbs.sh b/scripts/make_thumbs.sh index 88844d2..12f5ace 100755 --- a/scripts/make_thumbs.sh +++ b/scripts/make_thumbs.sh @@ -1,37 +1,20 @@ #!/bin/bash -# make_thumbs v0.0.1 +# make_thumbs v0.0.2 # Script que genera thumbnails de todas las películas en el directorio Media -# Copyright Santi Noreña 2012 -# puremediaserver at gmail dot com +# Copyright Santi Noreña 2012-2013 # GPL License - -# Edit next line to path to your media -export MEDIA_DIR=/home/santi/PMS/svn/media/video -export E_XCD=86 - -cd $MEDIA_DIR ||{ - echo "Can not change to directory." $MEDIA_DIR +cd $0 ||{ + echo "Can not change to directory." $0 exit $E_XCD; } - - for folder in $(find -maxdepth 1 -type d); do rm $folder/thumbs/* mkdir $folder/thumbs done - for file in $(find . -maxdepth 2 -mindepth 2 -type f ); do avconv -i $file -f image2 -frames:v 1 -s 64x46 -vcodec mjpeg $file.jpg done - for folder in $(find -maxdepth 1 -type d); do mv $folder/*.jpg $folder/thumbs done - -# Crear una galería de mini imágenes -#for i in `ls *.jpg`; -#do -# convert -geometry 320x240 $i galleria-$i -#done - exit 0 diff --git a/src/libremediaserver.cpp b/src/libremediaserver.cpp index b19dcfd..8cb3f7b 100644 --- a/src/libremediaserver.cpp +++ b/src/libremediaserver.cpp @@ -37,7 +37,10 @@ #define PDPORTW_AUDIO 9197 #define PDPORTR_AUDIO 9198 -#define SOCKET "/tmp/pmspipe" +#define SOCKET "/tmp/pmspipe" // Pipe wicho PD sends the files for preview in the GUI + +#define CONF_FILE "lms.conf" // File when save/restore the configuration on exit/open + /////////////////////////////////////////////////////////////////// // Struct for the configuration files @@ -95,9 +98,6 @@ bool layer8Check_audio; bool dmx_audio; quint8 universe_audio; bool audioCheck; - -// Path to Media Files -QString path; }; // Constructor @@ -137,10 +137,13 @@ libreMediaServer::libreMediaServer(QWidget *parent) m_ola = new QProcess(this); olastart(); // Conectamos los menus - connect(ui.actionOpen_conf, SIGNAL(triggered()), this, SLOT(open())); - connect(ui.actionSave_conf, SIGNAL(triggered()), this, SLOT(save())); + 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())); // Load the configuration - open(); + open_start(); + // Connect MSEx connect(m_msex,SIGNAL(frameRequest()), this, SLOT(sendFrame())); } @@ -149,7 +152,7 @@ libreMediaServer::libreMediaServer(QWidget *parent) libreMediaServer::~libreMediaServer() { - save(); + save_finish(); QFile socket(SOCKET); socket.remove(); if (m_pd_write_video != NULL) { @@ -184,28 +187,100 @@ libreMediaServer::~libreMediaServer() if (m_pd_write_audio != NULL) { m_pd_read_audio->close(); - } + } return; } - /////////////////////////////////////////////////////////////////// -// File Configuration Stuff +// open/save the last configuration known /////////////////////////////////////////////////////////////////// -// Load the last configuration from the file pms.conf - -void libreMediaServer::open() +// Load the last configuration from the configuration file +void libreMediaServer::open_start() { - QFile file("lms.conf"); - if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - qDebug()<<("Can not find the conf file"); + 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; - } - unsigned char * fileconf = new unsigned char[file.size()]; - memset(fileconf, 0, file.size()); - fileconf = file.map(0x00, file.size()); + 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; @@ -240,7 +315,6 @@ void libreMediaServer::open() 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); @@ -261,29 +335,32 @@ void libreMediaServer::open() 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) - 4; - int size = file.size() - offset; + // 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(); + file->close(); + delete buffer; +// delete fileconf; // Comment due to Seg Fault } -// Save the configuration to pms.conf file -void libreMediaServer::save() +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(); @@ -312,9 +389,7 @@ void libreMediaServer::save() 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(); @@ -334,21 +409,13 @@ void libreMediaServer::save() 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) - 4; + int offset = sizeof (struct conf); memcpy(buffer+offset, m_pathmedia.toAscii().constData(), m_pathmedia.size()); - QFile file("lms.conf"); - if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) - { - qDebug()<<("Can not open file pms.conf"); - return; - } - int error = file.write((const char *)buffer, bufferLen); + 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(); + file->close(); delete buffer; } @@ -367,51 +434,14 @@ void libreMediaServer::olastart() * User Interface Stuff */ -/////////////////////////////////////////////////////////////////// -// Global Controls -/////////////////////////////////////////////////////////////////// -// Change Media path - -void libreMediaServer::on_ChangePath_clicked() -{ - 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()); - -} /////////////////////////////////////////////////////////////////// -// Video Controls +// Menu CITP/MSEx /////////////////////////////////////////////////////////////////// // Init the CITP/MSEx protocol. -// Begins the CITP/MSEx protocol -// ToDo: Include thumbs generation here - -void libreMediaServer::on_updateButton_clicked() +void libreMediaServer::initMSEX() { // Chequeamos si existe el path a los medias QDir dir(m_pathmedia); @@ -441,9 +471,21 @@ void libreMediaServer::on_updateButton_clicked() ipadd = ipadd + i; m_msex->startCitp(ipadd); } +//void setIPAdd(); +// 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)) { @@ -897,7 +939,7 @@ void libreMediaServer::pdrestart() { return; } - save(); + save_finish(); qDebug()<<"Restarting PD"; ui.textEdit->appendPlainText("PD Restarting..."); disconnect(m_pd_video, SIGNAL(finished(int)), this, SLOT(pdrestart())); @@ -926,7 +968,7 @@ void libreMediaServer::newmessage() QByteArray byteArray; byteArray.resize(m_read_vid->bytesAvailable()); byteArray = m_read_vid->readAll(); - if (byteArray == NULL) + if (byteArray.isEmpty()) { return; } @@ -1424,7 +1466,7 @@ void libreMediaServer::stdout_audio() { void libreMediaServer::pdrestart_audio() { - save(); + save_finish(); qDebug()<<"Restarting PD audio"; ui.textEdit->appendPlainText("PD audio Restarting..."); int state = m_pd_audio->state(); @@ -1593,7 +1635,7 @@ void libreMediaServer::sendFrame() qDebug()<<"sendFrame: Can not convert screen capture to image"; return; } - image = image.scaledToWidth(88);http://palmadores.net/index.php + image = image.scaledToWidth(88); image = image.convertToFormat(QImage::Format_RGB888); int bufferLen = image.byteCount(); int bufferLenTot = sizeof(struct CITP_MSEX_10_StFr ) + bufferLen; diff --git a/src/libremediaserver.h b/src/libremediaserver.h index dac383c..cd5f2b9 100644 --- a/src/libremediaserver.h +++ b/src/libremediaserver.h @@ -71,6 +71,10 @@ private: bool sendPacket_audio(const char *buffer, int bufferLen); void pdstart_audio(); void errorsending_audio(); + void open_start(); + void save_finish(); + void open(QFile *file); + void save(QFile *file); public slots: @@ -79,11 +83,7 @@ public slots: private slots: void olastart(); // Init the OLA daemon - void on_ChangePath_clicked();// Change the path to medias - -// Video - - void on_updateButton_clicked(); // Init the CITP/MSEx protocol + // Video void newPeer(); void newmessage(); void newconexion(); @@ -112,9 +112,7 @@ private slots: void pdrestart(); void stdout(); void on_video_stateChanged(int state); - //Audio - void newPeer_audio(); void newmessage_audio(); void newconexion_audio(); @@ -138,16 +136,16 @@ private slots: void pdrestart_audio(); void stdout_audio(); void on_audio_stateChanged(int state); - - // File configuration - - void open(); - void save(); - - // Previews - - void previewMaster(); - + // Preview + void previewMaster(); + // Menu File + void openFile(); + void saveFile(); + void ChangeMediaPath();// Change the path to medias + // Menu CITP/MSEx + void initMSEX(); // Init the CITP/MSEx protocol +// void setIPAdd(); + void makeThumbs(); }; #endif // LIBREMEDIASERVER_H diff --git a/src/libremediaserver.ui b/src/libremediaserver.ui index 3902dc5..1a84c1b 100644 --- a/src/libremediaserver.ui +++ b/src/libremediaserver.ui @@ -7,8 +7,8 @@ 0 0 - 789 - 615 + 773 + 626 @@ -23,7 +23,7 @@ 0 120 - 791 + 831 441 @@ -37,7 +37,7 @@ QTabWidget::Rounded - 1 + 0 false @@ -175,19 +175,6 @@ 512 - - - - 490 - 190 - 113 - 32 - - - - Init CITP/MSEx - - @@ -645,22 +632,6 @@ true - - - - 470 - 150 - 150 - 28 - - - - Change the path to your media tree - - - Change Media Path - - @@ -693,7 +664,6 @@ layer6Add window layer7Add - updateButton layer3Add layer8Check layer2Add @@ -721,7 +691,6 @@ layer6Preview layer7Preview layer8Preview - ChangePath masterPreview @@ -1124,7 +1093,7 @@ 0 0 - 801 + 751 121 @@ -1141,8 +1110,8 @@ This program comes with ABSOLUTELY NO WARRANTY 0 0 - 789 - 25 + 773 + 29 @@ -1151,8 +1120,18 @@ This program comes with ABSOLUTELY NO WARRANTY + + + + + CITP/MSEx + + + + + @@ -1161,12 +1140,35 @@ This program comes with ABSOLUTELY NO WARRANTY - Open conf + Open Configuration - Save conf + Save Configuration + + + + + Change Media Path + + + + + true + + + Init + + + + + IP Address + + + + + Make Thumbs diff --git a/todo.txt b/todo.txt index f939256..52c6b7d 100644 --- a/todo.txt +++ b/todo.txt @@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with thi Próximas versiones: -- Pure Data Video: Modularidad, sumar ventanas por instancias de PMS-video. NO SE PUEDE POR USAR LOS MISMOS PUERTOS. Opción de arranque?. Blending entre proyectores.Mirar ejemplo Gem multiprojection. Añdir shaders a la capa? +- Pure Data Video: Modularidad, sumar ventanas por instancias de PMS-video. NO SE PUEDE POR USAR LOS MISMOS PUERTOS. Opción de arranque?. Blending entre proyectores.Mirar ejemplo Gem multiprojection. Añadir shaders a la capa? - Pure Data Video: Cambiar alpha por glgs. Mirar ejemplos en doc de Gem. Mirar requerimientos de tarjetas gráficas. Añadir shaders glgs. - GUI: Cuadro de diálogo en open/save para diferentes archivos de configuración. - GUI: Mover la configuración de ip address a un menú.