Antigona Release #1
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->setObjectName("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->setButtonSymbols(QAbstractSpinBox::NoButtons);
|
||||
m_totalTimeValue->setMinimumWidth(80);
|
||||
|
|
|
@ -29,10 +29,14 @@ libreMediaServerAudio::libreMediaServerAudio(bool gui)
|
|||
m_mediaLibrary = new MediaLibrary;
|
||||
m_mediaLibrary->initMediaLibrary();
|
||||
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][1] = -1;
|
||||
m_updateUi[i][2] = -1;
|
||||
m_updateUi[i][3] = -1;
|
||||
#endif
|
||||
}
|
||||
m_ola = new olaThread(this, set->getLayersNumber());
|
||||
Q_CHECK_PTR(m_ola);
|
||||
|
@ -42,7 +46,9 @@ libreMediaServerAudio::libreMediaServerAudio(bool gui)
|
|||
m_mae.startEngine(set->getAudioDeviceId());
|
||||
qDebug("Core init Complete. Start reading DMX.");
|
||||
m_ola->blockSignals(false);
|
||||
#ifdef NOGUI
|
||||
m_ola->start(QThread::TimeCriticalPriority );
|
||||
#endif
|
||||
}
|
||||
|
||||
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));
|
||||
#endif
|
||||
}
|
||||
return;
|
||||
} else if (channel == VOLUME_COARSE || channel == VOLUME_FINE) {
|
||||
float tmp = value / 65025.0f;
|
||||
m_mae.volChanged(layer, tmp);
|
||||
|
@ -84,10 +89,7 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
m_updateUi[layer][2] = value;
|
||||
} else if (channel == ENTRY_POINT_COARSE || channel == ENTRY_POINT_FINE) {
|
||||
m_mae.setCursor(layer, value);
|
||||
#ifndef NOGUI
|
||||
m_lmsUi->m_aw->cursorChanged(layer, m_mae.getCursor(layer));
|
||||
#endif
|
||||
return;
|
||||
m_updateUi[layer][3] = value;
|
||||
} else if (channel == PLAYBACK && value > 0) {
|
||||
aux = value / 25;
|
||||
Status s = m_currentStatus[layer];
|
||||
|
@ -111,10 +113,6 @@ void libreMediaServerAudio::dmxInput(int layer, int channel, int value)
|
|||
void libreMediaServerAudio::refreshUi() {
|
||||
if (!m_ui) return;
|
||||
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) {
|
||||
m_lmsUi->m_aw->volChanged(i, m_updateUi[i][0]);
|
||||
m_updateUi[i][0] = -1;
|
||||
|
@ -127,7 +125,10 @@ void libreMediaServerAudio::refreshUi() {
|
|||
m_lmsUi->m_aw->pitchChanged(i, m_updateUi[i][2]);
|
||||
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);
|
||||
connect(m_refreshUi, SIGNAL(timeout()), this, SLOT(refreshUi()));
|
||||
m_refreshUi->start(UI_REFRESH_TIME);
|
||||
m_ola->start(QThread::TimeCriticalPriority );
|
||||
};
|
||||
|
||||
void libreMediaServerAudio::uiSliderChanged(int layer, Slider s, int value)
|
||||
|
|
|
@ -35,25 +35,26 @@ class libreMediaServerAudio : public QObject
|
|||
public:
|
||||
libreMediaServerAudio(bool gui = false);
|
||||
virtual ~libreMediaServerAudio();
|
||||
olaThread *m_ola;
|
||||
void dmxInput(int layer, int channel, int value);
|
||||
#ifndef NOGUI
|
||||
void setUi(libreMediaServerAudioUi *lmsUi);
|
||||
#endif
|
||||
|
||||
//static void NewDmx(const ola::client::DMXMetadata &data, const ola::DmxBuffer &buffer);
|
||||
private:
|
||||
olaThread *m_ola;
|
||||
MediaLibrary *m_mediaLibrary;
|
||||
MiniAudioEngine m_mae;
|
||||
QString m_currentMedia[MAX_LAYERS];
|
||||
Status m_currentStatus[MAX_LAYERS];
|
||||
static QList<dmxSetting> m_dmxSettings;
|
||||
#ifndef NOGUI
|
||||
bool m_ui;
|
||||
QTimer *m_refreshUi;
|
||||
libreMediaServerAudioUi *m_lmsUi;
|
||||
float m_updateUi[MAX_LAYERS][3];
|
||||
float m_updateUi[MAX_LAYERS][4];
|
||||
#endif
|
||||
|
||||
private slots:
|
||||
void dmxInput(int layer, int channel, int value);
|
||||
#ifndef NOGUI
|
||||
void refreshUi();
|
||||
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 result;
|
||||
float vol = -1;
|
||||
|
||||
if (m_mediaLoaded[layer] == true)
|
||||
{
|
||||
vol = ma_sound_get_volume(&m_currentSound[layer]);
|
||||
ma_sound_uninit(&m_currentSound[layer]);
|
||||
m_mediaLoaded[layer] = false;
|
||||
}
|
||||
|
@ -131,7 +133,10 @@ ma_result MiniAudioEngine::loadMedia(int layer, char *file)
|
|||
qWarning("Failed to load file %s", file);
|
||||
else {
|
||||
m_mediaLoaded[layer] = true;
|
||||
this->volChanged(layer, 0);
|
||||
if (vol == -1)
|
||||
this->volChanged(layer, 0);
|
||||
else
|
||||
this->volChanged(layer, vol);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#include "olathread.h"
|
||||
|
||||
#include "libremediaserver-audio.h"
|
||||
//#include "olathread.h"
|
||||
|
||||
olaThread::olaThread(QObject *parent, int layers) :
|
||||
m_counter(0)
|
||||
, m_layers(layers)
|
||||
{
|
||||
Q_UNUSED(parent);
|
||||
this->setParent(parent);
|
||||
gettimeofday(&m_last_data, NULL);
|
||||
for (int i=0; i < MAX_LAYERS; i++)
|
||||
{
|
||||
|
@ -36,6 +36,7 @@ void olaThread::init()
|
|||
}
|
||||
m_client = m_clientWrapper->GetClient();
|
||||
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_client->SetCloseHandler(ola::NewSingleCallback(this, &olaThread::socketClosed));
|
||||
m_dmxSettings = Settings::getInstance()->getDmxSettings();
|
||||
|
@ -76,7 +77,7 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
|||
case DMX_FOLDER:
|
||||
value *= 0x100;
|
||||
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);
|
||||
fileSent = true;
|
||||
break;
|
||||
|
@ -84,13 +85,13 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
|||
if (fileSent)
|
||||
break;
|
||||
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);
|
||||
fileSent = true;
|
||||
break;
|
||||
case VOLUME_FINE:
|
||||
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);
|
||||
volSent = true;
|
||||
break;
|
||||
|
@ -98,13 +99,13 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
|||
if (volSent)
|
||||
break;
|
||||
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);
|
||||
volSent = true;
|
||||
break;
|
||||
case ENTRY_POINT_FINE:
|
||||
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);
|
||||
entrySent = true;
|
||||
break;
|
||||
|
@ -112,12 +113,12 @@ void olaThread::NewDmx(const ola::client::DMXMetadata &data,
|
|||
if (entrySent)
|
||||
break;
|
||||
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);
|
||||
entrySent = true;
|
||||
break;
|
||||
default:
|
||||
emit dmxOutput(i.layer,j,value);
|
||||
qobject_cast<libreMediaServerAudio *>(parent())->dmxInput(i.layer, j, value);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,10 +20,17 @@ class olaThread : public QThread
|
|||
Q_OBJECT
|
||||
|
||||
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);
|
||||
virtual ~olaThread();
|
||||
|
||||
void run ();
|
||||
/** Retorna el valor de un canal
|
||||
*@param int layer the layer for we want the channel
|
||||
*@param int channel the channel for the value wanted
|
||||
|
@ -35,14 +42,6 @@ public:
|
|||
void resendDmx();
|
||||
|
||||
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
|
||||
* 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.
|
||||
* 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
|
||||
*/
|
||||
|
|
Loading…
Add table
Reference in a new issue