cambida señal dmx por llamada directa al método, reduce un 20% de cpu en
mi ordenador. Restringida actualización de entry point como volumen, sigue cascando la búsqueda en mp3, wav va fino.
This commit is contained in:
parent
d34b972a54
commit
5915d4898e
6 changed files with 45 additions and 37 deletions
|
@ -58,7 +58,7 @@ AudioLayerWidget::AudioLayerWidget(QWidget *parent, int layer):
|
||||||
m_totalTimeValue = new QTimeEdit;
|
m_totalTimeValue = new QTimeEdit;
|
||||||
m_totalTimeValue->setObjectName("Track Length");
|
m_totalTimeValue->setObjectName("Track Length");
|
||||||
m_totalTimeValue->setToolTip("Track Length");
|
m_totalTimeValue->setToolTip("Track Length");
|
||||||
m_totalTimeValue->setDisplayFormat("mm:ss:zz");
|
m_totalTimeValue->setDisplayFormat("mm:ss:zzz");
|
||||||
m_totalTimeValue->setReadOnly(true);
|
m_totalTimeValue->setReadOnly(true);
|
||||||
m_totalTimeValue->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
m_totalTimeValue->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||||
m_totalTimeValue->setMinimumWidth(80);
|
m_totalTimeValue->setMinimumWidth(80);
|
||||||
|
|
|
@ -29,10 +29,14 @@ libreMediaServerAudio::libreMediaServerAudio(bool gui)
|
||||||
m_mediaLibrary = new MediaLibrary;
|
m_mediaLibrary = new MediaLibrary;
|
||||||
m_mediaLibrary->initMediaLibrary();
|
m_mediaLibrary->initMediaLibrary();
|
||||||
for (int i = 0; i < MAX_LAYERS; i++) {
|
for (int i = 0; i < MAX_LAYERS; i++) {
|
||||||
m_currentMedia[i] = Status::Iddle;
|
m_currentMedia[i] = "";
|
||||||
|
m_currentStatus[i] = Status::Iddle;
|
||||||
|
#ifdef NOGUI
|
||||||
m_updateUi[i][0] = -1;
|
m_updateUi[i][0] = -1;
|
||||||
m_updateUi[i][1] = -1;
|
m_updateUi[i][1] = -1;
|
||||||
m_updateUi[i][2] = -1;
|
m_updateUi[i][2] = -1;
|
||||||
|
m_updateUi[i][3] = -1;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
m_ola = new olaThread(this, set->getLayersNumber());
|
m_ola = new olaThread(this, set->getLayersNumber());
|
||||||
Q_CHECK_PTR(m_ola);
|
Q_CHECK_PTR(m_ola);
|
||||||
|
@ -42,7 +46,9 @@ libreMediaServerAudio::libreMediaServerAudio(bool gui)
|
||||||
m_mae.startEngine(set->getAudioDeviceId());
|
m_mae.startEngine(set->getAudioDeviceId());
|
||||||
qDebug("Core init Complete. Start reading DMX.");
|
qDebug("Core init Complete. Start reading DMX.");
|
||||||
m_ola->blockSignals(false);
|
m_ola->blockSignals(false);
|
||||||
|
#ifdef NOGUI
|
||||||
m_ola->start(QThread::TimeCriticalPriority );
|
m_ola->start(QThread::TimeCriticalPriority );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
libreMediaServerAudio::~libreMediaServerAudio()
|
libreMediaServerAudio::~libreMediaServerAudio()
|
||||||
|
@ -71,7 +77,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
||||||
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
|
m_lmsUi->m_aw->mediaLoaded(layer, mediaFile, m_mae.getDuration(layer));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
} else if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
|
} else if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
|
||||||
float tmp = value / 65025.0f;
|
float tmp = value / 65025.0f;
|
||||||
m_mae.volChanged(layer, tmp);
|
m_mae.volChanged(layer, tmp);
|
||||||
|
@ -84,10 +89,7 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
||||||
m_updateUi[layer][2] = value;
|
m_updateUi[layer][2] = value;
|
||||||
} else if (channel == ENTRY_POINT_COARSE || channel == ENTRY_POINT_FINE) {
|
} else if (channel == ENTRY_POINT_COARSE || channel == ENTRY_POINT_FINE) {
|
||||||
m_mae.setCursor(layer, value);
|
m_mae.setCursor(layer, value);
|
||||||
#ifndef NOGUI
|
m_updateUi[layer][3] = value;
|
||||||
m_lmsUi->m_aw->cursorChanged(layer, m_mae.getCursor(layer));
|
|
||||||
#endif
|
|
||||||
return;
|
|
||||||
} else if (channel == PLAYBACK && value > 0) {
|
} else if (channel == PLAYBACK && value > 0) {
|
||||||
aux = value / 25;
|
aux = value / 25;
|
||||||
Status s = m_currentStatus[layer];
|
Status s = m_currentStatus[layer];
|
||||||
|
@ -111,10 +113,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
||||||
void libreMediaServerAudio::refreshUi() {
|
void libreMediaServerAudio::refreshUi() {
|
||||||
if (!m_ui) return;
|
if (!m_ui) return;
|
||||||
for (int i= 0; i < Settings::getInstance()->getLayersNumber(); i++ ) {
|
for (int i= 0; i < Settings::getInstance()->getLayersNumber(); i++ ) {
|
||||||
Status s = m_currentStatus[i];
|
|
||||||
if (s == Status::PlayingOnce || s == Status::PlayingLoop) {
|
|
||||||
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
|
|
||||||
}
|
|
||||||
if (m_updateUi[i][0] >= 0) {
|
if (m_updateUi[i][0] >= 0) {
|
||||||
m_lmsUi->m_aw->volChanged(i, m_updateUi[i][0]);
|
m_lmsUi->m_aw->volChanged(i, m_updateUi[i][0]);
|
||||||
m_updateUi[i][0] = -1;
|
m_updateUi[i][0] = -1;
|
||||||
|
@ -127,7 +125,10 @@ void libreMediaServerAudio::refreshUi() {
|
||||||
m_lmsUi->m_aw->pitchChanged(i, m_updateUi[i][2]);
|
m_lmsUi->m_aw->pitchChanged(i, m_updateUi[i][2]);
|
||||||
m_updateUi[i][2] = -1;
|
m_updateUi[i][2] = -1;
|
||||||
}
|
}
|
||||||
//m_lmsUi->m_aw->playbackChanged(i, m_currentStatus[i]);
|
if (m_updateUi[i][3] >= 0) {
|
||||||
|
m_lmsUi->m_aw->cursorChanged(i, m_mae.getCursor(i));
|
||||||
|
m_updateUi[i][3] = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,6 +142,7 @@ void libreMediaServerAudio::setUi(libreMediaServerAudioUi *lmsUi)
|
||||||
m_refreshUi = new QTimer(this);
|
m_refreshUi = new QTimer(this);
|
||||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||||
m_refreshUi->start(UI_REFRESH_TIME);
|
m_refreshUi->start(UI_REFRESH_TIME);
|
||||||
|
m_ola->start(QThread::TimeCriticalPriority );
|
||||||
};
|
};
|
||||||
|
|
||||||
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
|
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
|
||||||
|
|
|
@ -35,25 +35,26 @@ class libreMediaServerAudio : public QObject
|
||||||
public:
|
public:
|
||||||
libreMediaServerAudio(bool gui = false);
|
libreMediaServerAudio(bool gui = false);
|
||||||
virtual ~libreMediaServerAudio();
|
virtual ~libreMediaServerAudio();
|
||||||
olaThread *m_ola;
|
void dmxInput(int layer, int channel, int value);
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
void setUi(libreMediaServerAudioUi *lmsUi);
|
void setUi(libreMediaServerAudioUi *lmsUi);
|
||||||
#endif
|
#endif
|
||||||
|
//static void NewDmx(const ola::client::DMXMetadata &data, const ola::DmxBuffer &buffer);
|
||||||
private:
|
private:
|
||||||
|
olaThread *m_ola;
|
||||||
MediaLibrary *m_mediaLibrary;
|
MediaLibrary *m_mediaLibrary;
|
||||||
MiniAudioEngine m_mae;
|
MiniAudioEngine m_mae;
|
||||||
QString m_currentMedia[MAX_LAYERS];
|
QString m_currentMedia[MAX_LAYERS];
|
||||||
Status m_currentStatus[MAX_LAYERS];
|
Status m_currentStatus[MAX_LAYERS];
|
||||||
|
static QList<dmxSetting> m_dmxSettings;
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
bool m_ui;
|
bool m_ui;
|
||||||
QTimer *m_refreshUi;
|
QTimer *m_refreshUi;
|
||||||
libreMediaServerAudioUi *m_lmsUi;
|
libreMediaServerAudioUi *m_lmsUi;
|
||||||
float m_updateUi[MAX_LAYERS][3];
|
float m_updateUi[MAX_LAYERS][4];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void dmxInput(int layer, int channel, int value);
|
|
||||||
#ifndef NOGUI
|
#ifndef NOGUI
|
||||||
void refreshUi();
|
void refreshUi();
|
||||||
void uiSliderChanged(int layer, Slider s, int value);
|
void uiSliderChanged(int layer, Slider s, int value);
|
||||||
|
|
|
@ -114,9 +114,11 @@ ma_result MiniAudioEngine::getAllAudioDevices()
|
||||||
ma_result MiniAudioEngine::loadMedia(int layer, char *file)
|
ma_result MiniAudioEngine::loadMedia(int layer, char *file)
|
||||||
{
|
{
|
||||||
ma_result result;
|
ma_result result;
|
||||||
|
float vol = -1;
|
||||||
|
|
||||||
if (m_mediaLoaded[layer] == true)
|
if (m_mediaLoaded[layer] == true)
|
||||||
{
|
{
|
||||||
|
vol = ma_sound_get_volume(&m_currentSound[layer]);
|
||||||
ma_sound_uninit(&m_currentSound[layer]);
|
ma_sound_uninit(&m_currentSound[layer]);
|
||||||
m_mediaLoaded[layer] = false;
|
m_mediaLoaded[layer] = false;
|
||||||
}
|
}
|
||||||
|
@ -131,7 +133,10 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file)
|
||||||
qWarning("Failed to load file %s", file);
|
qWarning("Failed to load file %s", file);
|
||||||
else {
|
else {
|
||||||
m_mediaLoaded[layer] = true;
|
m_mediaLoaded[layer] = true;
|
||||||
|
if (vol == -1)
|
||||||
this->volChanged(layer, 0);
|
this->volChanged(layer, 0);
|
||||||
|
else
|
||||||
|
this->volChanged(layer, vol);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
#include "olathread.h"
|
#include "libremediaserver-audio.h"
|
||||||
|
//#include "olathread.h"
|
||||||
|
|
||||||
olaThread::olaThread(QObject *parent, int layers) :
|
olaThread::olaThread(QObject *parent, int layers) :
|
||||||
m_counter(0)
|
m_counter(0)
|
||||||
, m_layers(layers)
|
, m_layers(layers)
|
||||||
{
|
{
|
||||||
Q_UNUSED(parent);
|
this->setParent(parent);
|
||||||
gettimeofday(&m_last_data, NULL);
|
gettimeofday(&m_last_data, NULL);
|
||||||
for (int i=0; i < MAX_LAYERS; i++)
|
for (int i=0; i < MAX_LAYERS; i++)
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,7 @@ void olaThread::init()
|
||||||
}
|
}
|
||||||
m_client = m_clientWrapper->GetClient();
|
m_client = m_clientWrapper->GetClient();
|
||||||
m_client->SetDMXCallback(ola::NewCallback(this, &olaThread::NewDmx));
|
m_client->SetDMXCallback(ola::NewCallback(this, &olaThread::NewDmx));
|
||||||
|
//m_client->SetDMXCallback(ola::NewCallback((libreMediaServerAudio *)this->parent(), libreMediaServerAudio::NewDmx));
|
||||||
m_clientWrapper->GetSelectServer()->RegisterRepeatingTimeout(4000, ola::NewCallback(this, &olaThread::CheckDataLoss));
|
m_clientWrapper->GetSelectServer()->RegisterRepeatingTimeout(4000, ola::NewCallback(this, &olaThread::CheckDataLoss));
|
||||||
m_client->SetCloseHandler(ola::NewSingleCallback(this, &olaThread::socketClosed));
|
m_client->SetCloseHandler(ola::NewSingleCallback(this, &olaThread::socketClosed));
|
||||||
m_dmxSettings = Settings::getInstance()->getDmxSettings();
|
m_dmxSettings = Settings::getInstance()->getDmxSettings();
|
||||||
|
@ -76,7 +77,7 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
||||||
case DMX_FOLDER:
|
case DMX_FOLDER:
|
||||||
value *= 0x100;
|
value *= 0x100;
|
||||||
value += buffer.Get(i.address + DMX_FILE);
|
value += buffer.Get(i.address + DMX_FILE);
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][DMX_FILE] = buffer.Get(i.address + DMX_FILE);
|
m_dmx[i.layer][DMX_FILE] = buffer.Get(i.address + DMX_FILE);
|
||||||
fileSent = true;
|
fileSent = true;
|
||||||
break;
|
break;
|
||||||
|
@ -84,13 +85,13 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
||||||
if (fileSent)
|
if (fileSent)
|
||||||
break;
|
break;
|
||||||
value += buffer.Get(i.address + DMX_FOLDER) * 0x100;
|
value += buffer.Get(i.address + DMX_FOLDER) * 0x100;
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][DMX_FOLDER] = buffer.Get(i.address + DMX_FOLDER);
|
m_dmx[i.layer][DMX_FOLDER] = buffer.Get(i.address + DMX_FOLDER);
|
||||||
fileSent = true;
|
fileSent = true;
|
||||||
break;
|
break;
|
||||||
case VOLUME_FINE:
|
case VOLUME_FINE:
|
||||||
value = (buffer.Get(i.address + VOLUME_COARSE) * 0x100) + value;
|
value = (buffer.Get(i.address + VOLUME_COARSE) * 0x100) + value;
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][VOLUME_COARSE] = buffer.Get(i.address + VOLUME_COARSE);
|
m_dmx[i.layer][VOLUME_COARSE] = buffer.Get(i.address + VOLUME_COARSE);
|
||||||
volSent = true;
|
volSent = true;
|
||||||
break;
|
break;
|
||||||
|
@ -98,13 +99,13 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
||||||
if (volSent)
|
if (volSent)
|
||||||
break;
|
break;
|
||||||
value = (value * 0x100) + buffer.Get(i.address + VOLUME_FINE);
|
value = (value * 0x100) + buffer.Get(i.address + VOLUME_FINE);
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][VOLUME_FINE] = buffer.Get(i.address + VOLUME_FINE);
|
m_dmx[i.layer][VOLUME_FINE] = buffer.Get(i.address + VOLUME_FINE);
|
||||||
volSent = true;
|
volSent = true;
|
||||||
break;
|
break;
|
||||||
case ENTRY_POINT_FINE:
|
case ENTRY_POINT_FINE:
|
||||||
value = (buffer.Get(i.address + ENTRY_POINT_COARSE) * 0x100) + value;
|
value = (buffer.Get(i.address + ENTRY_POINT_COARSE) * 0x100) + value;
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][ENTRY_POINT_COARSE] = buffer.Get(i.address + ENTRY_POINT_COARSE);
|
m_dmx[i.layer][ENTRY_POINT_COARSE] = buffer.Get(i.address + ENTRY_POINT_COARSE);
|
||||||
entrySent = true;
|
entrySent = true;
|
||||||
break;
|
break;
|
||||||
|
@ -112,12 +113,12 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
||||||
if (entrySent)
|
if (entrySent)
|
||||||
break;
|
break;
|
||||||
value = (value * 0x100) + buffer.Get(i.address + ENTRY_POINT_FINE);
|
value = (value * 0x100) + buffer.Get(i.address + ENTRY_POINT_FINE);
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
m_dmx[i.layer][ENTRY_POINT_FINE] = buffer.Get(i.address + ENTRY_POINT_FINE);
|
m_dmx[i.layer][ENTRY_POINT_FINE] = buffer.Get(i.address + ENTRY_POINT_FINE);
|
||||||
entrySent = true;
|
entrySent = true;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
emit dmxOutput(i.layer,j,value);
|
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,10 +20,17 @@ class olaThread : public QThread
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
QList<dmxSetting> m_dmxSettings;
|
||||||
|
int m_dmx[MAX_LAYERS][LAYER_CHANNELS];
|
||||||
|
ola::client::OlaClientWrapper *m_clientWrapper;
|
||||||
|
ola::client::OlaClient *m_client;
|
||||||
|
unsigned int m_counter;
|
||||||
|
struct timeval m_last_data; // Last DMX frame received
|
||||||
|
int m_layers;
|
||||||
|
|
||||||
olaThread(QObject *parent = 0, int layers = 0);
|
olaThread(QObject *parent = 0, int layers = 0);
|
||||||
virtual ~olaThread();
|
virtual ~olaThread();
|
||||||
|
void run ();
|
||||||
/** Retorna el valor de un canal
|
/** Retorna el valor de un canal
|
||||||
*@param int layer the layer for we want the channel
|
*@param int layer the layer for we want the channel
|
||||||
*@param int channel the channel for the value wanted
|
*@param int channel the channel for the value wanted
|
||||||
|
@ -35,14 +42,6 @@ public:
|
||||||
void resendDmx();
|
void resendDmx();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void run ();
|
|
||||||
ola::client::OlaClientWrapper *m_clientWrapper;
|
|
||||||
ola::client::OlaClient *m_client;
|
|
||||||
unsigned int m_counter;
|
|
||||||
struct timeval m_last_data; // Last DMX frame received
|
|
||||||
int m_layers;
|
|
||||||
int m_dmx[MAX_LAYERS][LAYER_CHANNELS];
|
|
||||||
QList<dmxSetting> m_dmxSettings;
|
|
||||||
/**
|
/**
|
||||||
* @brief Callback from ola. Control de errores en el registro de Universos en OLA
|
* @brief Callback from ola. Control de errores en el registro de Universos en OLA
|
||||||
* typedef SingleUseCallback1<void, const Result&> ola::client::SetCallback
|
* typedef SingleUseCallback1<void, const Result&> ola::client::SetCallback
|
||||||
|
@ -67,7 +66,7 @@ private:
|
||||||
* This is called one for second if there is not updated in the DMX frame.
|
* This is called one for second if there is not updated in the DMX frame.
|
||||||
* emit only the channels that has been changed.
|
* emit only the channels that has been changed.
|
||||||
*/
|
*/
|
||||||
void NewDmx(const ola::client::DMXMetadata &dmx_meta, const ola::DmxBuffer &buffer); //
|
void NewDmx(const ola::client::DMXMetadata &dmx_meta, const ola::DmxBuffer &buffer);
|
||||||
/**
|
/**
|
||||||
* @brief Sometimes the ola server closes the connection. This is a callback to handle this event an reconect to ola
|
* @brief Sometimes the ola server closes the connection. This is a callback to handle this event an reconect to ola
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue