libreMediaServer no refresca directamente la ui, solo actualiza

valores en  audiowidget. la ui se actualiza con un timer en audiowidget.
Quitadas señales en todo, mejora rendimiento. fade en volumen basado en
la trama dmx (25 ms) para evitar clicks. refresca los valores de la capa
cuando carga un media. Ui Ok. nuevo formato de archivo de configuración
xml.
This commit is contained in:
snt 2024-05-07 20:23:09 +02:00
parent 5915d4898e
commit 7a9c0cd0ac
20 changed files with 271 additions and 160 deletions

View file

@ -21,11 +21,11 @@
#include "libremediaserver-audio.h"
libreMediaServerAudio::libreMediaServerAudio(bool gui)
libreMediaServerAudio::libreMediaServerAudio()
{
m_ui = gui;
Settings *set = Settings::getInstance();
set->readFile();
m_settings = Settings::getInstance();
m_settings->readFile();
m_ui = m_settings->getShowUi();
m_mediaLibrary = new MediaLibrary;
m_mediaLibrary->initMediaLibrary();
for (int i = 0; i < MAX_LAYERS; i++) {
@ -38,12 +38,11 @@ libreMediaServerAudio::libreMediaServerAudio(bool gui)
m_updateUi[i][3] = -1;
#endif
}
m_ola = new olaThread(this, set->getLayersNumber());
m_ola = new olaThread(this, m_settings->getLayersNumber());
Q_CHECK_PTR(m_ola);
m_ola->blockSignals(true);
connect(m_ola, SIGNAL(dmxOutput(int, int, int)), this, SLOT(dmxInput(int, int, int)));
m_ola->registerUniverse();
m_mae.startEngine(set->getAudioDeviceId());
m_mae.startEngine(m_settings->getAudioDeviceId());
qDebug("Core init Complete. Start reading DMX.");
m_ola->blockSignals(false);
#ifdef NOGUI
@ -57,27 +56,29 @@ libreMediaServerAudio::~libreMediaServerAudio()
m_mae.stopEngine();
}
void libreMediaServerAudio::loadMedia(int layer, int folder, int file)
{
QString mediaFile = m_mediaLibrary->requestNewFile(folder, file);
if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0)
return;
if (QFile::exists(mediaFile)){
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
m_currentMedia[layer] = mediaFile;
#ifndef NOGUI
if (m_ui)
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
#endif
m_mae.printFormatInfo(layer);
}
}
void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
{
if (layer >= MAX_LAYERS || channel >= LAYER_CHANNELS)
return;
QString mediaFile = NULL;
int aux;
if (channel == DMX_FOLDER || channel == DMX_FILE){
int folder = (value >> 8) & 0x000000FF;
int file = value & 0x000000FF;
mediaFile = m_mediaLibrary->requestNewFile(folder, file);
if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0)
return;
if (QFile::exists(mediaFile)){
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
m_currentMedia[layer] = mediaFile;
#ifndef NOGUI
if (m_ui)
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
#endif
}
} else if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
float tmp = value / 65025.0f;
m_mae.volChanged(layer, tmp);
m_updateUi[layer][0] = tmp * 100.0f;
@ -104,15 +105,17 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
m_mae.playbackChanged(layer, s);
m_currentStatus[layer] = s;
#ifndef NOGUI
if (m_ui) m_lmsUi->m_aw->playbackChanged(layer, s);
if (m_ui) {
m_lmsUi->m_aw->playbackChanged(layer, s);
m_lmsUi->m_aw->cursorChanged(layer, m_mae.getCursor(layer));
}
#endif
}
}
#ifndef NOGUI
void libreMediaServerAudio::refreshUi() {
if (!m_ui) return;
for (int i= 0; i < Settings::getInstance()->getLayersNumber(); i++ ) {
for (int i= 0; i < m_settings->getLayersNumber(); i++ ) {
if (m_updateUi[i][0] >= 0) {
m_lmsUi->m_aw->volChanged(i, m_updateUi[i][0]);
m_updateUi[i][0] = -1;
@ -125,7 +128,9 @@ void libreMediaServerAudio::refreshUi() {
m_lmsUi->m_aw->pitchChanged(i, m_updateUi[i][2]);
m_updateUi[i][2] = -1;
}
if (m_updateUi[i][3] >= 0) {
if (m_updateUi[i][3] >= 0 \
|| m_currentStatus[i] == Status::PlayingOnce\
|| m_currentStatus[i] == Status::PlayingLoop) {
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
m_updateUi[i][3] = -1;
}
@ -135,6 +140,7 @@ void libreMediaServerAudio::refreshUi() {
void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
{
m_lmsUi = lmsUi;
m_ui = true;
connect(m_ola, SIGNAL(universeReceived(int)), m_lmsUi->m_dmxWidget, SLOT(updateWatchDMX(int)));
connect(m_lmsUi->m_aw, SIGNAL(uiSliderChanged(int, Slider, int)), this, SLOT(uiSliderChanged(int, Slider, int)));
connect(m_lmsUi->m_aw, SIGNAL(uiPlaybackChanged(int, Status)), this, SLOT(uiPlaybackChanged(int, Status)));
@ -145,6 +151,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
m_ola->start(QThread::TimeCriticalPriority );
};
// From Ui widgets
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
{
switch (s){
@ -166,8 +173,12 @@ void libreMediaServerAudio::uiPlaybackChanged(int layer, Status s)
m_currentStatus[layer] = s;
}
void libreMediaServerAudio::uiLoadMedia(int layer, QString s)
void libreMediaServerAudio::uiLoadMedia(int layer, QString mediaFile)
{
m_mae.loadMedia(layer, s.toLatin1().data());
if (strcmp(mediaFile.toLatin1().constData(), m_currentMedia[layer].toLatin1().constData()) == 0)
return;
m_mae.loadMedia(layer, mediaFile.toLatin1().data());
m_currentMedia[layer] = mediaFile;
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
}
#endif