mirror of
https://github.com/hyperion-project/hyperion.ng.git
synced 2025-03-01 10:33:28 +00:00
Move main non Thread Objects to Smart Pointers
This commit is contained in:
@@ -126,6 +126,7 @@ To allow segment streaming, enable "Realtime - Use main segment only" in WLED's
|
|||||||
- hyperion-remote: Extracting reply for a configGet request correctly (#1555)
|
- hyperion-remote: Extracting reply for a configGet request correctly (#1555)
|
||||||
- Grabber fps setting was not applied correctly
|
- Grabber fps setting was not applied correctly
|
||||||
- Smoothing: No empty updates
|
- Smoothing: No empty updates
|
||||||
|
- Addressed serious (#1425) and some smaller memory leaks
|
||||||
|
|
||||||
### Technical
|
### Technical
|
||||||
- Add CodeQL for GitHub code scanning
|
- Add CodeQL for GitHub code scanning
|
||||||
|
@@ -13,10 +13,9 @@ class EventHandler : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
EventHandler();
|
|
||||||
~EventHandler() override;
|
~EventHandler() override;
|
||||||
|
|
||||||
static EventHandler* getInstance();
|
static QScopedPointer<EventHandler>& getInstance();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
||||||
@@ -40,6 +39,12 @@ protected:
|
|||||||
Logger * _log {};
|
Logger * _log {};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
EventHandler();
|
||||||
|
EventHandler(const EventHandler&) = delete;
|
||||||
|
EventHandler& operator=(const EventHandler&) = delete;
|
||||||
|
|
||||||
|
static QScopedPointer<EventHandler> instance;
|
||||||
|
|
||||||
bool _isSuspended;
|
bool _isSuspended;
|
||||||
bool _isIdle;
|
bool _isIdle;
|
||||||
};
|
};
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QMultiMap>
|
#include <QMultiMap>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
#include <utils/Logger.h>
|
#include <utils/Logger.h>
|
||||||
#include <utils/Components.h>
|
#include <utils/Components.h>
|
||||||
@@ -91,8 +92,8 @@ public:
|
|||||||
template <typename Grabber_T>
|
template <typename Grabber_T>
|
||||||
bool transferFrame(Grabber_T &grabber)
|
bool transferFrame(Grabber_T &grabber)
|
||||||
{
|
{
|
||||||
unsigned w = grabber.getImageWidth();
|
int w = grabber.getImageWidth();
|
||||||
unsigned h = grabber.getImageHeight();
|
int h = grabber.getImageHeight();
|
||||||
if ( _image.width() != w || _image.height() != h)
|
if ( _image.width() != w || _image.height() != h)
|
||||||
{
|
{
|
||||||
_image.resize(w, h);
|
_image.resize(w, h);
|
||||||
@@ -185,7 +186,7 @@ protected:
|
|||||||
Logger * _log;
|
Logger * _log;
|
||||||
|
|
||||||
/// The timer for generating events with the specified update rate
|
/// The timer for generating events with the specified update rate
|
||||||
QTimer* _timer;
|
QScopedPointer<QTimer> _timer;
|
||||||
|
|
||||||
/// The calculated update rate [ms]
|
/// The calculated update rate [ms]
|
||||||
int _updateInterval_ms;
|
int _updateInterval_ms;
|
||||||
|
@@ -142,7 +142,7 @@ void JsonAPI::initialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//notify eventhadler on suspend/resume/idle requests
|
//notify eventhadler on suspend/resume/idle requests
|
||||||
connect(this, &JsonAPI::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
connect(this, &JsonAPI::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
|
|
||||||
connect(_ledStreamTimer, &QTimer::timeout, this, &JsonAPI::streamLedColorsUpdate, Qt::UniqueConnection);
|
connect(_ledStreamTimer, &QTimer::timeout, this, &JsonAPI::streamLedColorsUpdate, Qt::UniqueConnection);
|
||||||
}
|
}
|
||||||
|
@@ -165,7 +165,7 @@ bool CECHandler::enable()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
_isOpen=true;
|
_isOpen=true;
|
||||||
QObject::connect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::connect(this, &CECHandler::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
#ifdef VERBOSE_CEC
|
#ifdef VERBOSE_CEC
|
||||||
std::cout << "Found Devices: " << scan().toStdString() << std::endl;
|
std::cout << "Found Devices: " << scan().toStdString() << std::endl;
|
||||||
#endif
|
#endif
|
||||||
@@ -188,7 +188,7 @@ void CECHandler::disable()
|
|||||||
{
|
{
|
||||||
if (_isInitialised)
|
if (_isInitialised)
|
||||||
{
|
{
|
||||||
QObject::disconnect(this, &CECHandler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::disconnect(this, &CECHandler::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
_cecAdapter->Close();
|
_cecAdapter->Close();
|
||||||
_isOpen=false;
|
_isOpen=false;
|
||||||
Info(_logger, "CEC handler disabled");
|
Info(_logger, "CEC handler disabled");
|
||||||
|
@@ -7,6 +7,8 @@
|
|||||||
#include <utils/Process.h>
|
#include <utils/Process.h>
|
||||||
#include <hyperion/HyperionIManager.h>
|
#include <hyperion/HyperionIManager.h>
|
||||||
|
|
||||||
|
QScopedPointer<EventHandler> EventHandler::instance;
|
||||||
|
|
||||||
EventHandler::EventHandler()
|
EventHandler::EventHandler()
|
||||||
: _isSuspended(false)
|
: _isSuspended(false)
|
||||||
, _isIdle(false)
|
, _isIdle(false)
|
||||||
@@ -22,10 +24,14 @@ EventHandler::~EventHandler()
|
|||||||
QObject::disconnect(this, &EventHandler::signalEvent, HyperionIManager::getInstance(), &HyperionIManager::handleEvent);
|
QObject::disconnect(this, &EventHandler::signalEvent, HyperionIManager::getInstance(), &HyperionIManager::handleEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
EventHandler* EventHandler::getInstance()
|
QScopedPointer<EventHandler>& EventHandler::getInstance()
|
||||||
{
|
{
|
||||||
static EventHandler instance;
|
if (!instance)
|
||||||
return &instance;
|
{
|
||||||
|
instance.reset(new EventHandler());
|
||||||
|
}
|
||||||
|
|
||||||
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EventHandler::suspend()
|
void EventHandler::suspend()
|
||||||
|
@@ -15,12 +15,12 @@ EventScheduler::EventScheduler()
|
|||||||
qRegisterMetaType<Event>("Event");
|
qRegisterMetaType<Event>("Event");
|
||||||
_log = Logger::getInstance("EVENTS-SCHED");
|
_log = Logger::getInstance("EVENTS-SCHED");
|
||||||
|
|
||||||
QObject::connect(this, &EventScheduler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::connect(this, &EventScheduler::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
EventScheduler::~EventScheduler()
|
EventScheduler::~EventScheduler()
|
||||||
{
|
{
|
||||||
QObject::disconnect(this, &EventScheduler::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::disconnect(this, &EventScheduler::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
clearTimers();
|
clearTimers();
|
||||||
Info(_log, "Event scheduler stopped");
|
Info(_log, "Event scheduler stopped");
|
||||||
}
|
}
|
||||||
|
@@ -39,12 +39,12 @@ OsEventHandlerBase::OsEventHandlerBase()
|
|||||||
{
|
{
|
||||||
_isService = true;
|
_isService = true;
|
||||||
}
|
}
|
||||||
QObject::connect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::connect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
OsEventHandlerBase::~OsEventHandlerBase()
|
OsEventHandlerBase::~OsEventHandlerBase()
|
||||||
{
|
{
|
||||||
QObject::disconnect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
QObject::disconnect(this, &OsEventHandlerBase::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
|
|
||||||
OsEventHandlerBase::unregisterLockHandler();
|
OsEventHandlerBase::unregisterLockHandler();
|
||||||
OsEventHandlerBase::unregisterOsEventHandler();
|
OsEventHandlerBase::unregisterOsEventHandler();
|
||||||
|
@@ -27,36 +27,43 @@ bool GrabberWrapper::GLOBAL_GRABBER_AUDIO_ENABLE = false;
|
|||||||
GrabberWrapper::GrabberWrapper(const QString& grabberName, Grabber * ggrabber, int updateRate_Hz)
|
GrabberWrapper::GrabberWrapper(const QString& grabberName, Grabber * ggrabber, int updateRate_Hz)
|
||||||
: _grabberName(grabberName)
|
: _grabberName(grabberName)
|
||||||
, _log(Logger::getInstance(grabberName.toUpper()))
|
, _log(Logger::getInstance(grabberName.toUpper()))
|
||||||
, _timer(new QTimer(this))
|
, _timer(nullptr)
|
||||||
, _updateInterval_ms(1000/updateRate_Hz)
|
, _updateInterval_ms(1000/updateRate_Hz)
|
||||||
, _ggrabber(ggrabber)
|
, _ggrabber(ggrabber)
|
||||||
{
|
{
|
||||||
GrabberWrapper::instance = this;
|
GrabberWrapper::instance = this;
|
||||||
|
|
||||||
|
_timer.reset(new QTimer(this));
|
||||||
|
|
||||||
// Configure the timer to generate events every n milliseconds
|
// Configure the timer to generate events every n milliseconds
|
||||||
_timer->setTimerType(Qt::PreciseTimer);
|
_timer->setTimerType(Qt::PreciseTimer);
|
||||||
_timer->setInterval(_updateInterval_ms);
|
_timer->setInterval(_updateInterval_ms);
|
||||||
|
|
||||||
connect(_timer, &QTimer::timeout, this, &GrabberWrapper::action);
|
connect(_timer.get(), &QTimer::timeout, this, &GrabberWrapper::action);
|
||||||
|
|
||||||
// connect the image forwarding
|
// connect the image forwarding
|
||||||
if (_grabberName.startsWith("V4L"))
|
if (_grabberName.startsWith("V4L"))
|
||||||
|
{
|
||||||
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setV4lImage);
|
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setV4lImage);
|
||||||
|
}
|
||||||
else if (_grabberName.startsWith("Audio"))
|
else if (_grabberName.startsWith("Audio"))
|
||||||
|
{
|
||||||
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setAudioImage);
|
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setAudioImage);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setSystemImage);
|
connect(this, &GrabberWrapper::systemImage, GlobalSignals::getInstance(), &GlobalSignals::setSystemImage);
|
||||||
|
}
|
||||||
|
|
||||||
// listen for source requests
|
// listen for source requests
|
||||||
connect(GlobalSignals::getInstance(), &GlobalSignals::requestSource, this, &GrabberWrapper::handleSourceRequest);
|
connect(GlobalSignals::getInstance(), &GlobalSignals::requestSource, this, &GrabberWrapper::handleSourceRequest);
|
||||||
|
|
||||||
QObject::connect(EventHandler::getInstance(), &EventHandler::signalEvent, this, &GrabberWrapper::handleEvent);
|
QObject::connect(EventHandler::getInstance().data(), &EventHandler::signalEvent, this, &GrabberWrapper::handleEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
GrabberWrapper::~GrabberWrapper()
|
GrabberWrapper::~GrabberWrapper()
|
||||||
{
|
{
|
||||||
_timer->stop();
|
_timer->stop();
|
||||||
delete _timer;
|
|
||||||
GrabberWrapper::instance = nullptr;
|
GrabberWrapper::instance = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,19 +111,25 @@ QStringList GrabberWrapper::getActive(int inst, GrabberTypeFilter type) const
|
|||||||
if (type == GrabberTypeFilter::SCREEN || type == GrabberTypeFilter::ALL)
|
if (type == GrabberTypeFilter::SCREEN || type == GrabberTypeFilter::ALL)
|
||||||
{
|
{
|
||||||
if (GRABBER_SYS_CLIENTS.contains(inst))
|
if (GRABBER_SYS_CLIENTS.contains(inst))
|
||||||
|
{
|
||||||
result << GRABBER_SYS_CLIENTS.value(inst);
|
result << GRABBER_SYS_CLIENTS.value(inst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == GrabberTypeFilter::VIDEO || type == GrabberTypeFilter::ALL)
|
if (type == GrabberTypeFilter::VIDEO || type == GrabberTypeFilter::ALL)
|
||||||
{
|
{
|
||||||
if (GRABBER_V4L_CLIENTS.contains(inst))
|
if (GRABBER_V4L_CLIENTS.contains(inst))
|
||||||
|
{
|
||||||
result << GRABBER_V4L_CLIENTS.value(inst);
|
result << GRABBER_V4L_CLIENTS.value(inst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == GrabberTypeFilter::AUDIO || type == GrabberTypeFilter::ALL)
|
if (type == GrabberTypeFilter::AUDIO || type == GrabberTypeFilter::ALL)
|
||||||
{
|
{
|
||||||
if (GRABBER_AUDIO_CLIENTS.contains(inst))
|
if (GRABBER_AUDIO_CLIENTS.contains(inst))
|
||||||
|
{
|
||||||
result << GRABBER_AUDIO_CLIENTS.value(inst);
|
result << GRABBER_AUDIO_CLIENTS.value(inst);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -208,7 +221,9 @@ void GrabberWrapper::updateTimer(int interval)
|
|||||||
_timer->setInterval(_updateInterval_ms);
|
_timer->setInterval(_updateInterval_ms);
|
||||||
|
|
||||||
if(timerWasActive)
|
if(timerWasActive)
|
||||||
|
{
|
||||||
_timer->start();
|
_timer->start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,40 +284,64 @@ void GrabberWrapper::handleSourceRequest(hyperion::Components component, int hyp
|
|||||||
!_grabberName.startsWith("Audio"))
|
!_grabberName.startsWith("Audio"))
|
||||||
{
|
{
|
||||||
if (listen)
|
if (listen)
|
||||||
|
{
|
||||||
GRABBER_SYS_CLIENTS.insert(hyperionInd, _grabberName);
|
GRABBER_SYS_CLIENTS.insert(hyperionInd, _grabberName);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
GRABBER_SYS_CLIENTS.remove(hyperionInd);
|
GRABBER_SYS_CLIENTS.remove(hyperionInd);
|
||||||
|
}
|
||||||
|
|
||||||
if (GRABBER_SYS_CLIENTS.empty() || !getSysGrabberState())
|
if (GRABBER_SYS_CLIENTS.empty() || !getSysGrabberState())
|
||||||
|
{
|
||||||
stop();
|
stop();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
start();
|
start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (component == hyperion::Components::COMP_V4L &&
|
else if (component == hyperion::Components::COMP_V4L &&
|
||||||
_grabberName.startsWith("V4L"))
|
_grabberName.startsWith("V4L"))
|
||||||
{
|
{
|
||||||
if (listen)
|
if (listen)
|
||||||
|
{
|
||||||
GRABBER_V4L_CLIENTS.insert(hyperionInd, _grabberName);
|
GRABBER_V4L_CLIENTS.insert(hyperionInd, _grabberName);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
GRABBER_V4L_CLIENTS.remove(hyperionInd);
|
GRABBER_V4L_CLIENTS.remove(hyperionInd);
|
||||||
|
}
|
||||||
|
|
||||||
if (GRABBER_V4L_CLIENTS.empty() || !getV4lGrabberState())
|
if (GRABBER_V4L_CLIENTS.empty() || !getV4lGrabberState())
|
||||||
|
{
|
||||||
stop();
|
stop();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
start();
|
start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (component == hyperion::Components::COMP_AUDIO &&
|
else if (component == hyperion::Components::COMP_AUDIO &&
|
||||||
_grabberName.startsWith("Audio"))
|
_grabberName.startsWith("Audio"))
|
||||||
{
|
{
|
||||||
if (listen)
|
if (listen)
|
||||||
|
{
|
||||||
GRABBER_AUDIO_CLIENTS.insert(hyperionInd, _grabberName);
|
GRABBER_AUDIO_CLIENTS.insert(hyperionInd, _grabberName);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
GRABBER_AUDIO_CLIENTS.remove(hyperionInd);
|
GRABBER_AUDIO_CLIENTS.remove(hyperionInd);
|
||||||
|
}
|
||||||
|
|
||||||
if (GRABBER_AUDIO_CLIENTS.empty() || !getAudioGrabberState())
|
if (GRABBER_AUDIO_CLIENTS.empty() || !getAudioGrabberState())
|
||||||
|
{
|
||||||
stop();
|
stop();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
start();
|
start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -76,9 +76,13 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
#if defined(ENABLE_EFFECTENGINE)
|
#if defined(ENABLE_EFFECTENGINE)
|
||||||
, _pyInit(new PythonInit())
|
, _pyInit(new PythonInit())
|
||||||
#endif
|
#endif
|
||||||
|
, _ssdp(nullptr)
|
||||||
, _webserver(nullptr)
|
, _webserver(nullptr)
|
||||||
, _sslWebserver(nullptr)
|
, _sslWebserver(nullptr)
|
||||||
, _jsonServer(nullptr)
|
, _jsonServer(nullptr)
|
||||||
|
, _eventHandler(nullptr)
|
||||||
|
, _osEventHandler(nullptr)
|
||||||
|
, _eventScheduler(nullptr)
|
||||||
, _videoGrabber(nullptr)
|
, _videoGrabber(nullptr)
|
||||||
, _dispmanx(nullptr)
|
, _dispmanx(nullptr)
|
||||||
, _x11Grabber(nullptr)
|
, _x11Grabber(nullptr)
|
||||||
@@ -89,13 +93,10 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
, _qtGrabber(nullptr)
|
, _qtGrabber(nullptr)
|
||||||
, _dxGrabber(nullptr)
|
, _dxGrabber(nullptr)
|
||||||
, _audioGrabber(nullptr)
|
, _audioGrabber(nullptr)
|
||||||
, _ssdp(nullptr)
|
#ifdef ENABLE_CEC
|
||||||
, _eventHandler(nullptr)
|
, _cecHandler(nullptr)
|
||||||
, _osEventHandler(nullptr)
|
#endif
|
||||||
, _eventScheduler(nullptr)
|
, _settingsManager(new SettingsManager(GLOABL_INSTANCE_ID, this, readonlyMode)) // init settings, this settingsManager accesses global settings which are independent from instances
|
||||||
#ifdef ENABLE_CEC
|
|
||||||
, _cecHandler(nullptr)
|
|
||||||
#endif
|
|
||||||
, _currVideoMode(VideoMode::VIDEO_2D)
|
, _currVideoMode(VideoMode::VIDEO_2D)
|
||||||
{
|
{
|
||||||
HyperionDaemon::daemon = this;
|
HyperionDaemon::daemon = this;
|
||||||
@@ -108,9 +109,6 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
qRegisterMetaType<QMap<quint8, QJsonObject>>("QMap<quint8,QJsonObject>");
|
qRegisterMetaType<QMap<quint8, QJsonObject>>("QMap<quint8,QJsonObject>");
|
||||||
qRegisterMetaType<std::vector<ColorRgb>>("std::vector<ColorRgb>");
|
qRegisterMetaType<std::vector<ColorRgb>>("std::vector<ColorRgb>");
|
||||||
|
|
||||||
// init settings, this settingsManager accesses global settings which are independent from instances
|
|
||||||
_settingsManager = new SettingsManager(GLOABL_INSTANCE_ID, this, readonlyMode);
|
|
||||||
|
|
||||||
// set inital log lvl if the loglvl wasn't overwritten by arg
|
// set inital log lvl if the loglvl wasn't overwritten by arg
|
||||||
if (!logLvlOverwrite)
|
if (!logLvlOverwrite)
|
||||||
{
|
{
|
||||||
@@ -130,11 +128,11 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
|
|
||||||
// connect and apply settings for AuthManager
|
// connect and apply settings for AuthManager
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _authManager, &AuthManager::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _authManager, &AuthManager::handleSettingsUpdate);
|
||||||
_authManager->handleSettingsUpdate(settings::NETWORK, _settingsManager->getSetting(settings::NETWORK));
|
_authManager->handleSettingsUpdate(settings::NETWORK, _settingsManager.get()->getSetting(settings::NETWORK));
|
||||||
|
|
||||||
// connect and apply settings for NetOrigin
|
// connect and apply settings for NetOrigin
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _netOrigin, &NetOrigin::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _netOrigin, &NetOrigin::handleSettingsUpdate);
|
||||||
_netOrigin->handleSettingsUpdate(settings::NETWORK, _settingsManager->getSetting(settings::NETWORK));
|
_netOrigin->handleSettingsUpdate(settings::NETWORK, _settingsManager.get()->getSetting(settings::NETWORK));
|
||||||
|
|
||||||
// spawn all Hyperion instances (non blocking)
|
// spawn all Hyperion instances (non blocking)
|
||||||
_instanceManager->startAll();
|
_instanceManager->startAll();
|
||||||
@@ -179,7 +177,6 @@ HyperionDaemon::HyperionDaemon(const QString& rootPath, QObject* parent, bool lo
|
|||||||
|
|
||||||
HyperionDaemon::~HyperionDaemon()
|
HyperionDaemon::~HyperionDaemon()
|
||||||
{
|
{
|
||||||
delete _settingsManager;
|
|
||||||
#if defined(ENABLE_EFFECTENGINE)
|
#if defined(ENABLE_EFFECTENGINE)
|
||||||
delete _pyInit;
|
delete _pyInit;
|
||||||
#endif
|
#endif
|
||||||
@@ -265,8 +262,6 @@ void HyperionDaemon::freeObjects()
|
|||||||
Debug(_log, "Cleaning up Hyperion before quit.");
|
Debug(_log, "Cleaning up Hyperion before quit.");
|
||||||
|
|
||||||
stopCecHandler();
|
stopCecHandler();
|
||||||
delete _eventScheduler;
|
|
||||||
delete _osEventHandler;
|
|
||||||
|
|
||||||
#ifdef ENABLE_MDNS
|
#ifdef ENABLE_MDNS
|
||||||
if (_mDNSProvider != nullptr)
|
if (_mDNSProvider != nullptr)
|
||||||
@@ -333,24 +328,6 @@ void HyperionDaemon::freeObjects()
|
|||||||
|
|
||||||
// stop Hyperions (non blocking)
|
// stop Hyperions (non blocking)
|
||||||
_instanceManager->stopAll();
|
_instanceManager->stopAll();
|
||||||
|
|
||||||
delete _amlGrabber;
|
|
||||||
delete _dispmanx;
|
|
||||||
delete _fbGrabber;
|
|
||||||
delete _osxGrabber;
|
|
||||||
delete _qtGrabber;
|
|
||||||
delete _dxGrabber;
|
|
||||||
delete _videoGrabber;
|
|
||||||
delete _audioGrabber;
|
|
||||||
|
|
||||||
_videoGrabber = nullptr;
|
|
||||||
_amlGrabber = nullptr;
|
|
||||||
_dispmanx = nullptr;
|
|
||||||
_fbGrabber = nullptr;
|
|
||||||
_osxGrabber = nullptr;
|
|
||||||
_qtGrabber = nullptr;
|
|
||||||
_dxGrabber = nullptr;
|
|
||||||
_audioGrabber = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HyperionDaemon::startNetworkServices()
|
void HyperionDaemon::startNetworkServices()
|
||||||
@@ -418,27 +395,18 @@ void HyperionDaemon::startNetworkServices()
|
|||||||
|
|
||||||
void HyperionDaemon::startEventServices()
|
void HyperionDaemon::startEventServices()
|
||||||
{
|
{
|
||||||
if (_eventHandler == nullptr)
|
_eventHandler->getInstance();
|
||||||
{
|
Debug(_log, "Hyperion event handler created");
|
||||||
_eventHandler = EventHandler::getInstance();
|
|
||||||
Debug(_log, "Hyperion event handler created");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_eventScheduler == nullptr)
|
_eventScheduler.reset(new EventScheduler());
|
||||||
{
|
_eventScheduler->handleSettingsUpdate(settings::SCHEDEVENTS, getSetting(settings::SCHEDEVENTS));
|
||||||
_eventScheduler = new EventScheduler();
|
connect(this, &HyperionDaemon::settingsChanged, _eventScheduler.get(), &EventScheduler::handleSettingsUpdate);
|
||||||
_eventScheduler->handleSettingsUpdate(settings::SCHEDEVENTS, getSetting(settings::SCHEDEVENTS));
|
Debug(_log, "Hyperion event scheduler created");
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _eventScheduler, &EventScheduler::handleSettingsUpdate);
|
|
||||||
Debug(_log, "Hyperion event scheduler created");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_osEventHandler == nullptr)
|
_osEventHandler.reset(new OsEventHandler());
|
||||||
{
|
_osEventHandler->handleSettingsUpdate(settings::OSEVENTS, getSetting(settings::OSEVENTS));
|
||||||
_osEventHandler = new OsEventHandler();
|
connect(this, &HyperionDaemon::settingsChanged, _osEventHandler.get(), &OsEventHandler::handleSettingsUpdate);
|
||||||
_osEventHandler->handleSettingsUpdate(settings::OSEVENTS, getSetting(settings::OSEVENTS));
|
Debug(_log, "Operating System event handler created");
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _osEventHandler, &OsEventHandler::handleSettingsUpdate);
|
|
||||||
Debug(_log, "Operating System event handler created");
|
|
||||||
}
|
|
||||||
|
|
||||||
startCecHandler();
|
startCecHandler();
|
||||||
}
|
}
|
||||||
@@ -534,79 +502,10 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
|
|
||||||
if (_prevType != type)
|
if (_prevType != type)
|
||||||
{
|
{
|
||||||
// stop all capture interfaces
|
|
||||||
#ifdef ENABLE_FB
|
|
||||||
if (_fbGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_fbGrabber->stop();
|
|
||||||
delete _fbGrabber;
|
|
||||||
_fbGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_DISPMANX
|
|
||||||
if (_dispmanx != nullptr)
|
|
||||||
{
|
|
||||||
_dispmanx->stop();
|
|
||||||
delete _dispmanx;
|
|
||||||
_dispmanx = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_AMLOGIC
|
|
||||||
if (_amlGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_amlGrabber->stop();
|
|
||||||
delete _amlGrabber;
|
|
||||||
_amlGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_OSX
|
|
||||||
if (_osxGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_osxGrabber->stop();
|
|
||||||
delete _osxGrabber;
|
|
||||||
_osxGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_X11
|
|
||||||
if (_x11Grabber != nullptr)
|
|
||||||
{
|
|
||||||
_x11Grabber->stop();
|
|
||||||
delete _x11Grabber;
|
|
||||||
_x11Grabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_XCB
|
|
||||||
if (_xcbGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_xcbGrabber->stop();
|
|
||||||
delete _xcbGrabber;
|
|
||||||
_xcbGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_QT
|
|
||||||
if (_qtGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_qtGrabber->stop();
|
|
||||||
delete _qtGrabber;
|
|
||||||
_qtGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#ifdef ENABLE_DX
|
|
||||||
if (_dxGrabber != nullptr)
|
|
||||||
{
|
|
||||||
_dxGrabber->stop();
|
|
||||||
delete _dxGrabber;
|
|
||||||
_dxGrabber = nullptr;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create/start capture interface
|
// create/start capture interface
|
||||||
if (type == "framebuffer")
|
if (type == "framebuffer")
|
||||||
{
|
{
|
||||||
if (_fbGrabber == nullptr)
|
createGrabberFramebuffer(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberFramebuffer(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_FB
|
#ifdef ENABLE_FB
|
||||||
_fbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_fbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_fbGrabber->tryStart();
|
_fbGrabber->tryStart();
|
||||||
@@ -614,11 +513,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "dispmanx")
|
else if (type == "dispmanx")
|
||||||
{
|
{
|
||||||
if (_dispmanx == nullptr)
|
createGrabberDispmanx(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberDispmanx(grabberConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef ENABLE_DISPMANX
|
#ifdef ENABLE_DISPMANX
|
||||||
if (_dispmanx != nullptr)
|
if (_dispmanx != nullptr)
|
||||||
{
|
{
|
||||||
@@ -629,10 +524,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "amlogic")
|
else if (type == "amlogic")
|
||||||
{
|
{
|
||||||
if (_amlGrabber == nullptr)
|
createGrabberAmlogic(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberAmlogic(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_AMLOGIC
|
#ifdef ENABLE_AMLOGIC
|
||||||
_amlGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_amlGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_amlGrabber->tryStart();
|
_amlGrabber->tryStart();
|
||||||
@@ -640,10 +532,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "osx")
|
else if (type == "osx")
|
||||||
{
|
{
|
||||||
if (_osxGrabber == nullptr)
|
createGrabberOsx(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberOsx(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_OSX
|
#ifdef ENABLE_OSX
|
||||||
_osxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_osxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_osxGrabber->tryStart();
|
_osxGrabber->tryStart();
|
||||||
@@ -651,10 +540,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "x11")
|
else if (type == "x11")
|
||||||
{
|
{
|
||||||
if (_x11Grabber == nullptr)
|
createGrabberX11(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberX11(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_X11
|
#ifdef ENABLE_X11
|
||||||
_x11Grabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_x11Grabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_x11Grabber->tryStart();
|
_x11Grabber->tryStart();
|
||||||
@@ -662,10 +548,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "xcb")
|
else if (type == "xcb")
|
||||||
{
|
{
|
||||||
if (_xcbGrabber == nullptr)
|
createGrabberXcb(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberXcb(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_XCB
|
#ifdef ENABLE_XCB
|
||||||
_xcbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_xcbGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_xcbGrabber->tryStart();
|
_xcbGrabber->tryStart();
|
||||||
@@ -673,10 +556,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "qt")
|
else if (type == "qt")
|
||||||
{
|
{
|
||||||
if (_qtGrabber == nullptr)
|
createGrabberQt(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberQt(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_QT
|
#ifdef ENABLE_QT
|
||||||
_qtGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_qtGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_qtGrabber->tryStart();
|
_qtGrabber->tryStart();
|
||||||
@@ -684,10 +564,7 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
}
|
}
|
||||||
else if (type == "dx")
|
else if (type == "dx")
|
||||||
{
|
{
|
||||||
if (_dxGrabber == nullptr)
|
createGrabberDx(grabberConfig);
|
||||||
{
|
|
||||||
createGrabberDx(grabberConfig);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_DX
|
#ifdef ENABLE_DX
|
||||||
_dxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
_dxGrabber->handleSettingsUpdate(settings::SYSTEMCAPTURE, getSetting(settings::SYSTEMCAPTURE));
|
||||||
_dxGrabber->tryStart();
|
_dxGrabber->tryStart();
|
||||||
@@ -704,21 +581,17 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
else if (settingsType == settings::V4L2)
|
else if (settingsType == settings::V4L2)
|
||||||
{
|
{
|
||||||
#if defined(ENABLE_V4L2) || defined(ENABLE_MF)
|
#if defined(ENABLE_V4L2) || defined(ENABLE_MF)
|
||||||
if (_videoGrabber == nullptr)
|
_videoGrabber.reset(new VideoWrapper());
|
||||||
{
|
_videoGrabber->handleSettingsUpdate(settings::V4L2, getSetting(settings::V4L2));
|
||||||
_videoGrabber = new VideoWrapper();
|
|
||||||
_videoGrabber->handleSettingsUpdate(settings::V4L2, getSetting(settings::V4L2));
|
|
||||||
|
|
||||||
#if defined(ENABLE_MF)
|
#if defined(ENABLE_MF)
|
||||||
Debug(_log, "Media Foundation grabber created");
|
Debug(_log, "Media Foundation grabber created");
|
||||||
#elif defined(ENABLE_V4L2)
|
#elif defined(ENABLE_V4L2)
|
||||||
Debug(_log, "V4L2 grabber created");
|
Debug(_log, "V4L2 grabber created");
|
||||||
#endif
|
#endif
|
||||||
|
// connect to HyperionDaemon signal
|
||||||
// connect to HyperionDaemon signal
|
connect(this, &HyperionDaemon::videoMode, _videoGrabber.get(), &VideoWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::videoMode, _videoGrabber, &VideoWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::settingsChanged, _videoGrabber.get(), &VideoWrapper::handleSettingsUpdate);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _videoGrabber, &VideoWrapper::handleSettingsUpdate);
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
Debug(_log, "The v4l2 grabber is not supported on this platform");
|
Debug(_log, "The v4l2 grabber is not supported on this platform");
|
||||||
#endif
|
#endif
|
||||||
@@ -727,15 +600,12 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
{
|
{
|
||||||
#ifdef ENABLE_AUDIO
|
#ifdef ENABLE_AUDIO
|
||||||
// Create Audio Grabber
|
// Create Audio Grabber
|
||||||
if (_audioGrabber == nullptr)
|
_audioGrabber.reset(new AudioWrapper());
|
||||||
{
|
_audioGrabber->handleSettingsUpdate(settings::AUDIO, getSetting(settings::AUDIO));
|
||||||
_audioGrabber = new AudioWrapper();
|
|
||||||
_audioGrabber->handleSettingsUpdate(settings::AUDIO, getSetting(settings::AUDIO));
|
|
||||||
|
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _audioGrabber, &AudioWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _audioGrabber.get(), &AudioWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Debug(_log, "Audio grabber created");
|
Debug(_log, "Audio grabber created");
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
Debug(_log, "Audio capture not supported on this platform");
|
Debug(_log, "Audio capture not supported on this platform");
|
||||||
#endif
|
#endif
|
||||||
@@ -745,15 +615,13 @@ void HyperionDaemon::handleSettingsUpdate(settings::type settingsType, const QJs
|
|||||||
void HyperionDaemon::createGrabberDispmanx(const QJsonObject& /*grabberConfig*/)
|
void HyperionDaemon::createGrabberDispmanx(const QJsonObject& /*grabberConfig*/)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_DISPMANX
|
#ifdef ENABLE_DISPMANX
|
||||||
_dispmanx = new DispmanxWrapper(
|
_dispmanx.reset(new DispmanxWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
_grabber_pixelDecimation
|
_grabber_pixelDecimation
|
||||||
);
|
));
|
||||||
|
|
||||||
if (!_dispmanx->available)
|
if (!_dispmanx->available)
|
||||||
{
|
{
|
||||||
delete _dispmanx;
|
|
||||||
_dispmanx = nullptr;
|
|
||||||
Debug(_log, "The dispmanx framegrabber is not supported on this platform");
|
Debug(_log, "The dispmanx framegrabber is not supported on this platform");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -761,8 +629,8 @@ void HyperionDaemon::createGrabberDispmanx(const QJsonObject& /*grabberConfig*/)
|
|||||||
_dispmanx->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_dispmanx->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _dispmanx, &DispmanxWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _dispmanx.get(), &DispmanxWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _dispmanx, &DispmanxWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _dispmanx.get(), &DispmanxWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "DISPMANX frame grabber created");
|
Info(_log, "DISPMANX frame grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -773,15 +641,15 @@ void HyperionDaemon::createGrabberDispmanx(const QJsonObject& /*grabberConfig*/)
|
|||||||
void HyperionDaemon::createGrabberAmlogic(const QJsonObject& /*grabberConfig*/)
|
void HyperionDaemon::createGrabberAmlogic(const QJsonObject& /*grabberConfig*/)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_AMLOGIC
|
#ifdef ENABLE_AMLOGIC
|
||||||
_amlGrabber = new AmlogicWrapper(
|
_amlGrabber.reset(new AmlogicWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
_grabber_pixelDecimation
|
_grabber_pixelDecimation
|
||||||
);
|
));
|
||||||
_amlGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_amlGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _amlGrabber, &AmlogicWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _amlGrabber.get(), &AmlogicWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _amlGrabber, &AmlogicWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _amlGrabber.get(), &AmlogicWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "AMLOGIC grabber created");
|
Info(_log, "AMLOGIC grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -792,16 +660,17 @@ void HyperionDaemon::createGrabberAmlogic(const QJsonObject& /*grabberConfig*/)
|
|||||||
void HyperionDaemon::createGrabberX11(const QJsonObject& /*grabberConfig*/)
|
void HyperionDaemon::createGrabberX11(const QJsonObject& /*grabberConfig*/)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_X11
|
#ifdef ENABLE_X11
|
||||||
_x11Grabber = new X11Wrapper(
|
qDebug() << "createGrabberX11";
|
||||||
|
_x11Grabber.reset(new X11Wrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
_grabber_pixelDecimation,
|
_grabber_pixelDecimation,
|
||||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||||
);
|
));
|
||||||
_x11Grabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_x11Grabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _x11Grabber, &X11Wrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _x11Grabber.get(), &X11Wrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _x11Grabber, &X11Wrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _x11Grabber.get(), &X11Wrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "X11 grabber created");
|
Info(_log, "X11 grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -812,16 +681,16 @@ void HyperionDaemon::createGrabberX11(const QJsonObject& /*grabberConfig*/)
|
|||||||
void HyperionDaemon::createGrabberXcb(const QJsonObject& /*grabberConfig*/)
|
void HyperionDaemon::createGrabberXcb(const QJsonObject& /*grabberConfig*/)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_XCB
|
#ifdef ENABLE_XCB
|
||||||
_xcbGrabber = new XcbWrapper(
|
_xcbGrabber.reset(new XcbWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
_grabber_pixelDecimation,
|
_grabber_pixelDecimation,
|
||||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||||
);
|
));
|
||||||
_xcbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_xcbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _xcbGrabber, &XcbWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _xcbGrabber.get(), &XcbWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _xcbGrabber, &XcbWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _xcbGrabber.get(), &XcbWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "XCB grabber created");
|
Info(_log, "XCB grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -832,16 +701,16 @@ void HyperionDaemon::createGrabberXcb(const QJsonObject& /*grabberConfig*/)
|
|||||||
void HyperionDaemon::createGrabberQt(const QJsonObject& grabberConfig)
|
void HyperionDaemon::createGrabberQt(const QJsonObject& grabberConfig)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_QT
|
#ifdef ENABLE_QT
|
||||||
_qtGrabber = new QtWrapper(
|
_qtGrabber.reset(new QtWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
grabberConfig["input"].toInt(0),
|
grabberConfig["input"].toInt(0),
|
||||||
_grabber_pixelDecimation,
|
_grabber_pixelDecimation,
|
||||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||||
);
|
));
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _qtGrabber, &QtWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _qtGrabber.get(), &QtWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _qtGrabber, &QtWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _qtGrabber.get(), &QtWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "Qt grabber created");
|
Info(_log, "Qt grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -852,16 +721,16 @@ void HyperionDaemon::createGrabberQt(const QJsonObject& grabberConfig)
|
|||||||
void HyperionDaemon::createGrabberDx(const QJsonObject& grabberConfig)
|
void HyperionDaemon::createGrabberDx(const QJsonObject& grabberConfig)
|
||||||
{
|
{
|
||||||
#ifdef ENABLE_DX
|
#ifdef ENABLE_DX
|
||||||
_dxGrabber = new DirectXWrapper(
|
_dxGrabber.reset(new DirectXWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
grabberConfig["display"].toInt(0),
|
grabberConfig["display"].toInt(0),
|
||||||
_grabber_pixelDecimation,
|
_grabber_pixelDecimation,
|
||||||
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom
|
||||||
);
|
));
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _dxGrabber, &DirectXWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _dxGrabber.get(), &DirectXWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _dxGrabber, &DirectXWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _dxGrabber.get(), &DirectXWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "DirectX grabber created");
|
Info(_log, "DirectX grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -876,15 +745,15 @@ void HyperionDaemon::createGrabberFramebuffer(const QJsonObject& grabberConfig)
|
|||||||
|
|
||||||
int fbIdx = grabberConfig["input"].toInt(0);
|
int fbIdx = grabberConfig["input"].toInt(0);
|
||||||
QString devicePath = QString("/dev/fb%1").arg(fbIdx);
|
QString devicePath = QString("/dev/fb%1").arg(fbIdx);
|
||||||
_fbGrabber = new FramebufferWrapper(
|
_fbGrabber.reset(new FramebufferWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
devicePath,
|
devicePath,
|
||||||
_grabber_pixelDecimation
|
_grabber_pixelDecimation
|
||||||
);
|
));
|
||||||
_fbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_fbGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _fbGrabber, &FramebufferWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _fbGrabber.get(), &FramebufferWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _fbGrabber, &FramebufferWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _fbGrabber.get(), &FramebufferWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "Framebuffer grabber created");
|
Info(_log, "Framebuffer grabber created");
|
||||||
#else
|
#else
|
||||||
@@ -896,16 +765,16 @@ void HyperionDaemon::createGrabberOsx(const QJsonObject& grabberConfig)
|
|||||||
{
|
{
|
||||||
#ifdef ENABLE_OSX
|
#ifdef ENABLE_OSX
|
||||||
// Construct and start the osx grabber if the configuration is present
|
// Construct and start the osx grabber if the configuration is present
|
||||||
_osxGrabber = new OsxWrapper(
|
_osxGrabber.reset(new OsxWrapper(
|
||||||
_grabber_frequency,
|
_grabber_frequency,
|
||||||
grabberConfig["input"].toInt(0),
|
grabberConfig["input"].toInt(0),
|
||||||
_grabber_pixelDecimation
|
_grabber_pixelDecimation
|
||||||
);
|
));
|
||||||
_osxGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
_osxGrabber->setCropping(_grabber_cropLeft, _grabber_cropRight, _grabber_cropTop, _grabber_cropBottom);
|
||||||
|
|
||||||
// connect to HyperionDaemon signal
|
// connect to HyperionDaemon signal
|
||||||
connect(this, &HyperionDaemon::videoMode, _osxGrabber, &OsxWrapper::setVideoMode);
|
connect(this, &HyperionDaemon::videoMode, _osxGrabber.get(), &OsxWrapper::setVideoMode);
|
||||||
connect(this, &HyperionDaemon::settingsChanged, _osxGrabber, &OsxWrapper::handleSettingsUpdate);
|
connect(this, &HyperionDaemon::settingsChanged, _osxGrabber.get(), &OsxWrapper::handleSettingsUpdate);
|
||||||
|
|
||||||
Info(_log, "OSX grabber created");
|
Info(_log, "OSX grabber created");
|
||||||
#else
|
#else
|
||||||
|
@@ -199,33 +199,36 @@ private:
|
|||||||
#if defined(ENABLE_EFFECTENGINE)
|
#if defined(ENABLE_EFFECTENGINE)
|
||||||
PythonInit* _pyInit;
|
PythonInit* _pyInit;
|
||||||
#endif
|
#endif
|
||||||
|
SSDPHandler* _ssdp;
|
||||||
WebServer* _webserver;
|
WebServer* _webserver;
|
||||||
WebServer* _sslWebserver;
|
WebServer* _sslWebserver;
|
||||||
JsonServer* _jsonServer;
|
JsonServer* _jsonServer;
|
||||||
VideoWrapper* _videoGrabber;
|
|
||||||
DispmanxWrapper* _dispmanx;
|
|
||||||
X11Wrapper* _x11Grabber;
|
|
||||||
XcbWrapper* _xcbGrabber;
|
|
||||||
AmlogicWrapper* _amlGrabber;
|
|
||||||
FramebufferWrapper* _fbGrabber;
|
|
||||||
OsxWrapper* _osxGrabber;
|
|
||||||
QtWrapper* _qtGrabber;
|
|
||||||
DirectXWrapper* _dxGrabber;
|
|
||||||
AudioWrapper* _audioGrabber;
|
|
||||||
SSDPHandler* _ssdp;
|
|
||||||
EventHandler* _eventHandler;
|
|
||||||
OsEventHandler* _osEventHandler;
|
|
||||||
EventScheduler* _eventScheduler;
|
|
||||||
#ifdef ENABLE_CEC
|
|
||||||
CECHandler* _cecHandler;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
QScopedPointer<EventHandler> _eventHandler;
|
||||||
|
QScopedPointer<OsEventHandler> _osEventHandler;
|
||||||
|
QScopedPointer<EventScheduler> _eventScheduler;
|
||||||
|
|
||||||
|
QScopedPointer<VideoWrapper> _videoGrabber;
|
||||||
|
QScopedPointer<DispmanxWrapper> _dispmanx;
|
||||||
|
QScopedPointer<X11Wrapper> _x11Grabber;
|
||||||
|
QScopedPointer<XcbWrapper> _xcbGrabber;
|
||||||
|
QScopedPointer<AmlogicWrapper> _amlGrabber;
|
||||||
|
QScopedPointer<FramebufferWrapper> _fbGrabber;
|
||||||
|
QScopedPointer<OsxWrapper> _osxGrabber;
|
||||||
|
QScopedPointer<QtWrapper> _qtGrabber;
|
||||||
|
QScopedPointer<DirectXWrapper> _dxGrabber;
|
||||||
|
QScopedPointer<AudioWrapper> _audioGrabber;
|
||||||
|
|
||||||
|
#ifdef ENABLE_CEC
|
||||||
|
CECHandler* _cecHandler;
|
||||||
|
#endif
|
||||||
#if defined(ENABLE_FLATBUF_SERVER)
|
#if defined(ENABLE_FLATBUF_SERVER)
|
||||||
FlatBufferServer* _flatBufferServer;
|
FlatBufferServer* _flatBufferServer;
|
||||||
#endif
|
#endif
|
||||||
#if defined(ENABLE_PROTOBUF_SERVER)
|
#if defined(ENABLE_PROTOBUF_SERVER)
|
||||||
ProtoServer* _protoServer;
|
ProtoServer* _protoServer;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int _grabber_width;
|
int _grabber_width;
|
||||||
int _grabber_height;
|
int _grabber_height;
|
||||||
int _grabber_pixelDecimation;
|
int _grabber_pixelDecimation;
|
||||||
@@ -234,9 +237,8 @@ CECHandler* _cecHandler;
|
|||||||
int _grabber_cropRight;
|
int _grabber_cropRight;
|
||||||
int _grabber_cropTop;
|
int _grabber_cropTop;
|
||||||
int _grabber_cropBottom;
|
int _grabber_cropBottom;
|
||||||
|
|
||||||
QString _prevType;
|
QString _prevType;
|
||||||
|
|
||||||
VideoMode _currVideoMode;
|
VideoMode _currVideoMode;
|
||||||
SettingsManager* _settingsManager;
|
|
||||||
|
QScopedPointer<SettingsManager> _settingsManager;
|
||||||
};
|
};
|
||||||
|
@@ -45,7 +45,7 @@ SysTray::SysTray(HyperionDaemon *hyperiond)
|
|||||||
// instance changes
|
// instance changes
|
||||||
connect(_instanceManager, &HyperionIManager::instanceStateChanged, this, &SysTray::handleInstanceStateChange);
|
connect(_instanceManager, &HyperionIManager::instanceStateChanged, this, &SysTray::handleInstanceStateChange);
|
||||||
|
|
||||||
connect(this, &SysTray::signalEvent, EventHandler::getInstance(), &EventHandler::handleEvent);
|
connect(this, &SysTray::signalEvent, EventHandler::getInstance().data(), &EventHandler::handleEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
SysTray::~SysTray()
|
SysTray::~SysTray()
|
||||||
|
Reference in New Issue
Block a user